先从一个这两天刷屏的消息说起OpenAI 在一场演示中让某个推理模型借助约 2000 美元的计算资源在 FrontierMath 这类高难度数学基准上解出了 10 道“世纪难题”。标题很快被很多人转成“数学家的定义被改写了”评论区从 AI 能力讨论一路吵到数学本质。作为技术人我的第一反应其实是三个更具体的问题这 10 道题是怎么被评测出来的评测流程能不能复现如果我也想在自己的任务上跑类似评估应该怎么搭这篇文章不打算写“AI 会不会取代数学家”这种争论而是把新闻里的技术骨架拆出来Astra 相关的热点背后真正对开发者有长期价值的是三件事——推理模型的能力边界、可复现的 Agent 评测框架Codex Harness、以及如何用 OpenAI API 自己搭一个数学题评估流程。我们会先理清事件概念然后从 API Key 获取、环境搭建、Codex Harness 配置到本地跑通一个数学评测任务完整走一遍。新手可以按步骤操作有经验的开发者可以直接看第 4、5 节的代码和配置。1. 先从一则热点说起Astra、o3 与 2000 美元的数学题1.1 这则新闻到底在说什么先梳理事实。新闻里提到的“Astra”并不是一个单一产品在 OpenAI 的语境下更多是指代以 Agent 方式运行的高性能推理模型组合。真正引起数学界关注的是三块拼图推理模型通过“思考”更多 token 来提升复杂问题正确率的新一代模型典型代表是 o3 系列。FrontierMath由多位数学家设计的高难度数学题集题目考察的是研究级数学推理不是刷题级计算。此前 AI 在其中的正确率长期很低个别题目甚至需要人类数学博士花费数小时到数天。2000 美元计算预算不是指模型售价而是指在评测过程中允许模型为这 10 道题消耗约 2000 美元额度的推理计算资源。换句话说这次突破的核心不是“买了个贵模型”而是在足够多的推理计算量下模型在从未见过的研究级数学题上给出了可验证的正确解答。需要特别注意公开演示中的成果往往是精心挑选的题目不代表模型已经具备普遍数学研究能力。评测样本量、题目难度分布、验证方式都需要等官方技术报告出来后才能下结论。1.2 “10 道世纪难题”替代了旧的评测范式过去我们评价大模型基本靠 MMLU、GSM8K、HumanEval 这类题库。这类基准有一个共同问题题目会出现在训练语料中模型可能靠“记忆”得分。FrontierMath 的价值在于它由专业数学家持续出新题题目不会提前公开模型不太可能“背题”。这让评测范式发生了三个变化维度旧基准FrontierMath 这类新基准题目来源公开题库容易混入训练集数学家新编未公开能力考察知识记忆、模式匹配推理链路、数学直觉判定方式选择题 / 代码运行数学答案精确校验计算成本低几乎忽略可能达到数千美元以 2000 美元额度拿下 10 道题说明模型在“长时间推理”场景下确实有了质变。这也解释了一个现象为什么现在越来越多人讨论 Agent而不是单纯讨论对话模型。因为复杂任务需要模型自己规划步骤、反复验证、修正方向。Codex Harness 这类评测工具正是在这个背景下被 OpenAI 开源出来的。1.3 数学家的定义会被改写吗直接回答不会。数学家的核心工作不只是解题还包括提出猜想、建立理论、定义新概念、判断什么值得证明。即便模型能解出 10 道 FrontierMath 题它依然没有主动提出一个有价值的数学问题。但“数学家的定义”确实在被重新审视原因是 AI 正在变成数学家的“推理副驾驶”验证猜想数学家给出可能成立的结论AI 可以辅助检查推导。搜索反例在某些数论问题中AI 可以更快构造反例。计算辅助复杂积分、特殊函数化简、群论计算等AI 能大幅缩短人工试错时间。所以更准确的说法是AI 没有改写数学家的定义但正在改写“数学研究中机械化劳动”的占比。对开发者来说真正的机会在于——如何把这种能力接入自己的系统以及如何可靠地评估它。2. 环境准备与版本说明这篇文章后续会包含两套实操一套是快速调用 OpenAI API另一套是用 Codex Harness 搭建评测任务。开始前先把环境说清楚。2.1 基础运行环境本文示例以常见 Linux / macOS / WindowsWSL2环境演示核心依赖如下Python 3.10 或更高版本。官方 Python 包对 3.10 以上支持比较稳定。Node.js 18 及以上。Codex Harness 相关工具链需要 Node 运行时。Git用于克隆开源仓库。Docker可选。如果评测任务需要隔离环境推荐安装 Docker Desktop 或 Docker Engine。版本需要根据你的项目实际情况调整本文示例以常见环境为例重点演示配置思路。没必要刻意追求最新版本稳定优先。2.2 需要准备的账号与工具OpenAI 开发者账号用于创建 API Key。一个可用的 OpenAI API 项目并确保账户有余额。一个本地命令行终端能正常执行 Python、Node、Git 命令。需要提醒的是API 调用会产生费用尤其是推理模型按 token 计费成本远高于普通对话模型。本文所有示例都建议控制题目数量和推理轮次避免产生意外账单。2.3 示例项目结构为了后续操作清晰建议先创建一个项目目录mkdir -p openai-math-eval cd openai-math-eval mkdir -p scripts tasks results最终目录结构大致如下openai-math-eval/ ├── scripts/ # Python 与 Node 脚本 ├── tasks/ # 评测任务定义 ├── results/ # 评测结果输出 └── README.md # 项目说明3. 快速跑通 OpenAI API从获取 Key 到第一次调用不管你是想复现“2000 美元解数学题”还是只想在业务里接入 AI 能力第一步都是拿到 API Key 并跑通一次请求。3.1 创建 API Key官方途径登录 OpenAI 官方开发者平台后按以下步骤操作进入 API Keys 管理页面。点击 Create new secret key。为该 Key 设置名称例如math-eval-demo。创建后立即复制保存。Key 只显示一次关闭页面后无法再次查看。需要特别强调的是API Key 等同于账户凭证不要提交到 Git 仓库不要写在业务代码里更不要分享到任何公开平台。推荐用环境变量或本地配置文件管理。如果你还没有账户或余额需要先完成开发者平台的账户设置并确保账户状态可用。具体额度和可用模型以官方后台显示为准。3.2 安装 OpenAI Python SDK在项目虚拟环境中安装官方 SDKpython -m venv .venv source .venv/bin/activate # Windows 使用 .venv\Scripts\activate pip install openai python-dotenvpython-dotenv 用于读取 .env 文件避免把 Key 写死在代码里。3.3 第一次对话请求创建scripts/01_first_call.py 文件路径scripts/01_first_call.py 功能第一次调用 OpenAI API确认账号、模型、网络链路都正常。 import os from openai import OpenAI from dotenv import load_dotenv load_dotenv() client OpenAI( api_keyos.getenv(OPENAI_API_KEY), ) response client.chat.completions.create( modelgpt-4o-mini, messages[ {role: system, content: 你是一个数学助手。}, {role: user, content: 请计算 17 * 23 等于多少} ], temperature0 ) print(response.choices[0].message.content)创建项目根目录下的.env文件OPENAI_API_KEY你的密钥运行脚本python scripts/01_first_call.py如果配置正确终端会输出391到这里API 调用链路已经打通。接下来所有代码都会复用这个 client 的创建方式。3.4 理解几个关键参数model模型名称。不同模型的能力和价格差异很大具体以官方模型列表为准。messages对话消息列表。system用来设定角色或约束user是用户输入。temperature采样温度。数学题场景建议设置为 0 或接近 0减少随机性。max_tokens限制输出长度。复杂数学题需要更长输出时要合理调大。这个接口是 OpenAI API 兼容协议中最常见的调用方式你可以把它当作所有后续实验的最小底座。4. 用 Codex Harness 搭建一个可复现的评测任务新闻里“用 2000 美元解决 10 道题”之所以可信是因为背后有一套可重复运行的评测工具。OpenAI 开源了 Codex Harness用于评估 Codex CLI 这类 Agent 在真实任务上的表现。对你来说它最大的价值是可以把自己的任务变成自动评测集然后反复验证不同模型和不同提示词的效果。4.1 Harness 是什么简单理解Harness 是一个“打分框架”。它做的事情是给定一个任务描述比如“请解答这道数论题”。让 Agent 与一个隔离环境交互Agent 可以读文件、写代码、运行命令。Agent 给出最终答案。Harness 运行验证脚本判断答案是否正确。输出结构化评分结果。相比“人肉复制题目到对话框”Harness 做到了评测流程的自动化、标准化和可复现。4.2 克隆并安装OpenAI 的 Codex 仓库在 GitHub 上公开存储库地址是github.com/openai/codex。克隆并查看目录结构git clone https://github.com/openai/codex.git cd codex以仓库 README 提供的方式安装依赖通常是 npm 或 pnpm 安装npm install具体安装命令以仓库当前文档为准因为开源项目迭代很快。这里重点理解流程不要死记命令。4.3 配置一个数学评测任务Harness 的配置核心是config.toml和任务定义。任务定义通常包含任务名称。启动命令。验证命令。超时时间。运行环境容器或本地目录。简化示例# 文件路径codex/tasks/math-task-001.toml [task] name math-frontier-sample description 验证 AI 能否正确解出一道欧拉函数相关的数论题 [setup] run pip install sympy [run] command python solve.py [verify] command python verify.py --input result.json --expected 42 timeout 10m这个文件表达的含义是在隔离环境中安装 sympy运行solve.py最后用verify.py校验答案。你只需要把solve.py和verify.py写好剩余事情都由 Harness 调度。4.4 运行评测并查看结果在仓库根目录执行npx codex-harness run --task tasks/math-task-001.toml评测结束后Harness 会输出类似这样的汇总信息Task: math-frontier-sample Status: PASS Time: 4m32s Output: answer42如果状态是FAIL则说明 Agent 给出的答案没有通过验证。这种“通过 / 不通过”的评判方式比肉眼判断更有说服力。5. 本地实战用推理模型解一道高难度数学题如果你暂时不想引入完整的 Harness只想验证“推理模型能不能解数学题”可以直接用 Python 写一个最小评测脚本。下面这个示例演示了完整流程设计题目、调用模型、校验结果、输出结构化日志。5.1 题目与验证方案设计为了演示我选择一道中等难度的数论题求 1 到 1000 之间所有正整数中与 1000 互质的整数个数。这其实就是欧拉函数 φ(1000) 的计算。答案是 400。选择这道题的原因是模型只要理解互质概念并且能写出正确的数数逻辑就能得到答案同时它又比“17*23”这类口算题更有区分度。验证方案不是看模型输出“400”就完事而是要求模型输出一段可运行代码我们再独立执行这段代码用程序结果判断正确性。这个思路和 FrontierMath 的验证逻辑是一致的看结果不轻信推理过程。5.2 完整代码创建scripts/02_math_eval.py 文件路径scripts/02_math_eval.py 功能调用推理模型解答数论题并对答案做独立验证。 import json import math import os import re from openai import OpenAI from dotenv import load_dotenv load_dotenv() client OpenAI( api_keyos.getenv(OPENAI_API_KEY), ) # 选择一个推理模型具体名称以官方模型列表为准 MODEL_NAME o3-mini TASK r 请解决下面这道数论题 求 1 到 1000 之间所有正整数中与 1000 互质的整数个数。 要求 1. 先给出你的推理思路。 2. 然后输出一段 Python 代码代码中定义函数 compute_answer()返回最终整数答案。 3. 用 JSON 输出格式为 {thinking: 你的推理, code: python代码} def extract_json(text: str) - dict: 从模型输出中提取 JSON 对象。 text text.strip() # 处理代码块包裹的情况 text re.sub(r^(?:json)?|$, , text, flagsre.MULTILINE).strip() try: return json.loads(text) except json.JSONDecodeError: # 如果模型没有严格按 JSON 输出这里做兜底 start text.find({) end text.rfind(}) if start ! -1 and end ! -1: return json.loads(text[start:end 1]) raise def run_solution_code(code: str) - int: 在受限命名空间中执行模型生成的代码。 注意这里只是教学示例生产环境请使用 Docker 等隔离方案。 namespace: dict {} exec(code, namespace) result namespace[compute_answer]() return int(result) def main() - None: response client.chat.completions.create( modelMODEL_NAME, messages[ { role: system, content: 你是一个严谨的数学解题助手请严格按要求输出 JSON。 }, { role: user, content: TASK } ], response_format{type: json_object}, ) raw_output response.choices[0].message.content parsed extract_json(raw_output) print( 模型推理 ) print(parsed.get(thinking, )) code parsed.get(code, ) print( 模型生成的代码 ) print(code) # 独立验证使用标准库 math.gcd 重新实现 expected sum(1 for n in range(1, 1001) if math.gcd(n, 1000) 1) actual run_solution_code(code) print( 验证结果 ) print(f标准答案: {expected}) print(f模型答案: {actual}) print(f是否通过: {expected actual}) # 记录评测日志 result { model: MODEL_NAME, task: euler_phi_1000, expected: expected, actual: actual, passed: expected actual, thinking: parsed.get(thinking, ), } with open(results/sample_result.json, w, encodingutf-8) as f: json.dump(result, f, ensure_asciiFalse, indent2) if __name__ __main__: main()5.3 运行验证先确保results目录存在mkdir -p results python scripts/02_math_eval.py如果一切正常你会看到类似输出 模型推理 1000 2^3 * 5^3根据欧拉函数公式 φ(1000) 1000 * (1 - 1/2) * (1 - 1/5) 400。 模型生成的代码 import math def compute_answer(): return sum(1 for n in range(1, 1001) if math.gcd(n, 1000) 1) 验证结果 标准答案: 400 模型答案: 400 是否通过: True5.4 结果说明这个示例看起来很“小”但它已经具备了一个可复现评测的完整骨架任务定义题目文本 输出约束。模型推理模型给出思路。代码生成模型生成可执行代码。独立校验我们用标准库重新计算结果而不是直接相信模型的输出。日志留存结果写入 JSON方便后续统计多次实验。在实际工作中你会把“单次通过”扩展到“多次采样 多题统计”这样才更有统计学意义。6. 常见问题与排查思路在实际操作中你大概率会遇到下面几类问题。按表中顺序排查基本都能解决。问题现象常见原因解决思路调用 API 返回 401 错误API Key 无效、已删除或环境变量没读取到检查 .env 文件确认 Key 没有多余空格确认已 export 到当前终端调用 API 返回 429 错误账户余额不足、速率限制检查账户余额降低并发或换用更低价格模型模型不输出 JSON提示词约束不足或因 max_tokens 截断在 system 消息里强调 JSON 格式增加 max_tokensexec 执行模型代码报错模型生成的代码引用了不存在的库在任务里预设可用依赖或要求模型只使用标准库Codex Harness 安装失败Node 版本过低或网络原因拉取依赖失败升级 Node 到 18国内网络环境建议配置镜像源运行评测总是超时模型在长任务上思考过久提高超时时间或先拆成子任务再汇总标准答案和模型答案都对不上题目表述有歧义或边界条件不同写清“1 到 1000 之间”明确是否包含端点最值得注意的一点是不要把模型输出的文本当成最终答案一定要用独立验证脚本做校验。评测系统的价值在于“给结果打分”而不是“给过程鼓掌”。7. 最佳实践与工程建议7.1 API Key 与成本管理生产环境必须遵循最小权限原则Key 只授予项目需要的最小权限不要创建一个“全功能 Key”就到处用。通过环境变量或密钥管理服务注入配置禁止硬编码。对推理模型设置预算上限例如在 OpenAI 后台设置 monthly budget。每次评测任务记录消耗的 token 数和费用方便横向对比模型性价比。7.2 评测集建设如果你要持续评估 AI 数学能力不能只有一道题。建议按难度分层构建题目集难度示例验证方式基础计算高精度乘法、多项式展开程序输出精确结果推理证明不等式证明、数列递推人工复核 关键步骤检查研究级未公开的数论猜想验证数学家团队长期维护评测集的价值在于“不被记忆污染”。题目越新、越不容易出现在训练集里结果越可信。7.3 结果可信度单次通过率很容易被运气影响推荐的做法是同一道题多次采样统计通过率而不是只看一次结果。固定随机种子控制 temperature 等参数保证实验可复现。记录完整的提示词版本提示词微调后结果可能差异很大。对于“数学题”尽量要求模型输出可验证的代码或结构化推导而不是直接输出数字。7.4 下一步学习路线如果你对 Agent 评测和数学推理感兴趣可以沿着这条路线深入掌握 OpenAI API 的基础调用把消息格式、参数含义吃透。阅读 Codex Harness 的源码和示例任务理解评测调度原理。实践更复杂的 Agent 场景让模型自己写代码、运行测试、修正 bug。关注 FrontierMath 或类似未公开题库的评测方法理解如何避免数据污染。尝试把自己的业务问题改造成“可自动验证的任务”这是 AI 落地中最有价值的能力之一。回到开头的问题“数学家的定义被改写了吗”我的答案很简单没有。但 AI 确实在改写工程师评估 AI 的方式。从“1 道题 肉眼判断”升级到“10 道题 自动化验证”这个转变才是开发者最值得抓住的东西。建议你先从第 3 节的最小调用跑起来再慢慢构建自己的评测集。任何一次能力的验证都比旁观一场争论更有价值。