1. 复现 HMMT 99.6% 之前,先看清多 Key 这层障碍
1.1 原报告里最扎眼的一组数字,来自 GPT-5
HMMT 99.6% 是原报告里最扎眼的一组数字:GPT-5 在哈佛-麻省理工数学竞赛基准里跑到了这个成绩。可当我准备自己复现时,先被两张账单拦住了——OpenAI 一把 Key、Google 一把 Key。我用的解法是统一走 TaoToken 的兼容通道 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 拿一把 Key,Base URL 填 https://taotoken.net/api,接着在 Claude Code 或 Codex 里从 GPT-5 切到 Gemini 2.5,跑同一道 HMMT 题,直接看返回结果的准确率和耗时。
原报告给出的理由很明确:GPT-5 用实时路由器把请求分成日常查询和深度推理两条路,主模型负责速度,深度推理模型负责多步逻辑,两者加在一起才把数学基准顶上去。Gemini 2.5 是它最常被拿来对比的对手,同样是混合专家(MoE)架构,但调度方式不同,还带着 100 万 token 的超长上下文。哪边更适合解题,论文里争不出结果,亲手跑一遍最直接。
1.2 真正的障碍:两套控制台、两把 Key、两套模型 ID
问题出在复现的方式上。OpenAI 的控制台管 GPT-5 的 Key,Google 的控制台管 Gemini 2.5 的 Key,两边计费维度不一样,模型 ID 的命名风格也不一样。想在同一个工程里对比两个模型,就得在两套环境之间来回切。第一遍跑 GPT-5 时用的环境变量,到 Gemini 2.5 那边基本作废,所有配置都要重新对一遍。
这种混乱很容易让人误判模型差距。某个结果不对,可能不是模型算错了,而是环境变量读的还是上一次的 Key,请求根本没有发到目标模型上。复现论文数据,第一件事不是选模型,而是把环境变量、Base URL、模型 ID 这三样东西变成可重复的配置。
1.3 把模型能力和接入通道拆开看
我拆开来看,其实有两层:模型层是 GPT-5 与 Gemini 2.5 的能力差异,接入层是 API Key、Base URL、模型 ID 的管理差异。TaoToken 只解决接入层,它让两把 Key 变成一把,让 Base URL 统一成 https://taotoken.net/api,让切换模型变成改一个模型 ID。模型本身没有任何改动,该 99.6% 的还是 99.6%,该显 MoE 长处的还是显长处。
这也是标题里“同一把 TaoToken Key”到底意味着什么:你只需要维护一个 Key 的用量、账单、权限,剩下的精力全部花在题目和结果上。
2. 拿 Key:先去 TaoToken 官网,模型 ID 回模型广场查
2.1 官网只负责注册、建 Key、看模型广场和用量
配置前先做两件事:打开 TaoToken 注册账号、创建 API Key;然后在模型广场里记下你要用到的模型 ID。创建完的 Key 形如一段较长字符串,本文一律用 YOUR_API_KEY 替代。请注意,官网只负责注册、建 Key、看模型广场和用量,它不参与任何一次实际请求。
实际请求里出现的地址只有一个:https://taotoken.net/api。它末尾没有 /v1,也不需要接路径。Claude Code、Codex 这类工具问你要 Base URL 时,填这个就好。如果你习惯在 OpenAI 生态里写 https://api.openai.com/v1,到这里最容易手滑补上 /v1。多出来的这一截会让工具去请求一个不存在的路径,返回 404 而不是模型答案。
所以页面地址和接口地址要分开记忆:网页去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end ,接口写 https://taotoken.net/api 。前者是给人点进去建 Key 的,后者是给程序发请求的,两者不能互换。
2.2 模型 ID 以模型广场当时列表为准
原报告里写的 GPT-5、GPT-5 mini、Gemini 2.5 Pro 是产品名,不等于配置时要填的模型 ID。TaoToken 的模型广场会列出当前可用的准确 ID,配置时以那个列表为准。同一个 Key,模型 ID 填成 GPT-5 对应的那个,请求就打到 GPT-5;填成 Gemini 2.5 对应的那个,请求就打到 Gemini 2.5。
提示:模型广场会更新,今天看到的 ID 过两天可能下线或改名。每次改动配置前,都回 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的模型广场复制一遍,不要拿旧笔记里的 ID 硬填。
3. Claude Code 切换:settings.json 里让 Base URL 指向 TaoToken
3.1 环境变量版:三条变量指到同一把 Key
Claude Code 读的是 Anthropic 风格的环境变量。在终端里,把下面三行放进当前 shell,或者写进 ~/.zshrc / ~/.bashrc,就能让 Claude Code 走 TaoToken 通道。
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY" export ANTHROPIC_MODEL="YOUR_MODEL_ID"YOUR_API_KEY 是你在官网创建的那把 Key;YOUR_MODEL_ID 是你在模型广场看到的目标模型 ID。注意 ANTHROPIC_BASE_URL 后面没有 /v1。Anthropic 官方客户端会在基础地址后自己拼路径,TaoToken 的 /api 已经兼容了这个行为。
3.2 settings.json 版:把 env 写进 Claude Code 配置
如果不想每次开 shell 都 export,可以把同样的内容写进 ~/.claude/settings.json:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "YOUR_MODEL_ID" } }保存后重启 Claude Code。之后要切换模型,只改 ANTHROPIC_MODEL 这一个值,就能在 GPT-5 和 Gemini 2.5 之间来回横跳。这种做法的代价是同一时间只有一个模型生效,适合按阶段对比:先跑一遍 GPT-5,记下结果;再改成 Gemini 2.5,重跑一遍。
4. Codex 接入:config.toml 里按 OpenAI 风格加 provider
4.1 model_provider 与 base_url 的写法人各不同
Codex 的入口是 OpenAI 风格,别把 ANTHROPIC_* 搬过来。它读 ~/.codex/config.toml,需要在里面注册一个名为 taotoken 的 model_provider:
model = "YOUR_MODEL_ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" api_key = "YOUR_API_KEY"这里的 model 是默认模型 ID,model_provider 指定走哪个供应商。如果你已经在环境变量里设置过 OPENAI_API_KEY,也可以删掉 api_key 那行,让 Codex 从环境变量读。
4.2 从 GPT-5 切到 Gemini 2.5:改 model 或运行时参数
在 config.toml 里改 model 那一行,把模型 ID 换成 Gemini 2.5 对应的那个,保存后重新运行 codex。如果不想改文件,也可以用运行时参数覆盖:codex exec --model YOUR_MODEL_ID "提示词"。两个模型 ID 走同一个 provider,Key 还是同一把,账单也汇总在同一个账号下。
5. 重跑同一道 HMMT 题:准确率和耗时一起看
5.1 选一道题,固定提示词
HMMT 的历年题不愁没有来源。选一道包含多步推理的代数或组合题,把题目原样贴进提示词,要求模型给出最终答案并写出推理过程:
下面是一道 HMMT 竞赛题。请给出最终答案,并把解题步骤写成可复现的推导过程: [粘贴题目]这里不粘贴具体题目,因为复现的价值在于用你自己选的题。关键是同一道题、同一个提示词、同一个 Key,在两个模型下各跑一次。提示词里不要加“请用某某模型的方法”之类的话,否则会干扰对模型原生能力的判断。
5.2 用 time 把两次耗时记下来
在 Claude Code 里,用 claude -p 直接跑非交互式指令,配合系统 time 能拿到一次请求的总耗时:
time claude -p "下面是一道 HMMT 竞赛题。请给出最终答案,并把解题步骤写成可复现的推导过程:[粘贴题目]"第一次跑之前确认 ANTHROPIC_MODEL 是 GPT-5 对应的 ID;跑完记录答案、推理过程和 time 的输出。然后改 ANTHROPIC_MODEL 为 Gemini 2.5 对应的 ID,再跑一遍同样的命令。Codex 里对应的是 codex exec,模型由 config.toml 或 --model 控制。
5.3 验证请求真的落在了目标模型上
只靠输出文字没法判定到底是哪个模型。更可靠的办法是去 TaoToken 控制台看这把 Key 的调用记录,记录会按模型 ID 区分每次请求。跑完后打开官网,对着时间戳核对,那两个请求分别对应哪个模型。这也是为什么一开始要强调模型 ID 以模型广场为准——模型 ID 填错,验证阶段全部失真。
6. 排障:模型 ID 填错比 401 更常见
6.1 401 先检查 Key 的完整性
最常见的原因不是 Key 错误,而是复制的时候漏了字符,或者 shell 把 Key 拆开了。配置里用双引号包住 YOUR_API_KEY,替换后确认没有换行和空格。另外确认这把 Key 确实是在官网创建,并且没有误删除。如果用的是 settings.json 或环境变量,还要确认改动后重启了 Claude Code,进程没读到旧环境变量。
6.2 404 往往是模型 ID 与模型广场不一致
把论文里的产品名当模型 ID 填进去,接口找不到对应模型,直接返回模型不存在之类的错误。解法很简单:回到 TaoToken 官网 的模型广场,复制列表里现成的 ID。模型广场列表会更新,上次看到的 ID 下次未必还在,每次配置前都回官网确认一次。
6.3 Base URL 多写 /v1 会被工具拼出坏路径
TaoToken 的接口地址是 https://taotoken.net/api,不是 https://taotoken.net/api/v1。工具会在 Base URL 后面自己拼路径,你多写一层 /v1,最终请求会打到不存在的地址上。检查配置文件时,优先看这一行。这个错在 Claude Code 和 Codex 里都会出现,现象都是请求失败,但日志里看不到模型输出。
7. 跑完去控制台对一下这次调用
7.1 先用模型对话页冒烟
配置保存后,先在 TaoToken 模型对话 里用同一把 Key 发一条测试消息,确认模型 ID 和 Base URL 没填错。这一页的作用是绕过本机配置,直接在网页端验证 Key 和模型 ID 的组合是否有效,省去反复改文件的步骤。
7.2 长期写代码看 Coding Plan,Key 管理回到 API Keys 页
如果你打算一周里有好几天用 Claude Code 跑题、算数据、改代码,打开 Coding Plan 看看套餐是否和你的调用量匹配。Key 的统一管理在 控制台 API Keys 页,跑完 HMMT 对比后,回到这里核对该 Key 下的两个请求是否分别计入对应模型。Claude Code 的环境变量对照,参见 接入文档。
最后留一个体会:复现论文数字,最花时间的往往不是模型推理,而是把环境稳定下来。同一把 Key、同一个 Base URL、模型 ID 以模型广场为准,这个三角稳定之后,GPT-5 和 Gemini 2.5 之间的切换就只是一个字符串的替换。至于 HMMT 99.6% 能不能被 Gemini 2.5 追平,答案留给每一台执行这个流程的电脑自己出。