🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
1. 同一把 Key,两个终端:这次对比要解决什么
Claude Code 和 Codex 都能读仓库、改文件、跑测试,但把它们放在同一个 GitHub issue 上,token 账单和墙钟时间往往差出一截。问题在于,多数对比要么用两家各自的官方额度,要么中途换了模型,变量根本压不住。我这次的做法是:同一把 TaoToken Key、同一个仓库、同一个 issue、同一份验收命令,只换执行工具。TaoToken 在这里不是被评测对象,它是两家工具共用的 API 兼容通道——拿 Key、填 Base URL 这一步走它,之后 Claude Code 和 Codex 各自怎么烧 token、怎么卡住,才是正文要记录的东西。
先把入口放这里:TaoToken 是统一 API 通道,注册后创建 Key,Base URL 统一填https://taotoken.net/api。注意这个地址末尾不带/v1,Claude Code 和 Codex 的配置里都按原样写。
这次选的任务不复杂,但足够暴露差异:一个真实开源仓库里的 bug——分页参数在边界条件下返回空数组,issue 里附了复现步骤和期望行为。任务要求是改源码、补一个回归测试、跑通仓库自带的测试命令。两个工具拿到的是同一段 issue 描述,不允许我中途补提示。
为什么强调「同一把 Key」?因为 Claude Code 默认走 Anthropic 协议,Codex 走 OpenAI 协议,如果分别用两家的官方 Key,你根本分不清 token 差异是工具行为造成的,还是两家计费口径、上下文裁剪策略不同造成的。统一走 TaoToken 的兼容通道后,两边的请求都落到同一个网关,模型 ID 从模型广场选同一个,计费口径一致,对照才有意义。
下面所有配置和数字都基于这一次运行。这是一次运行,不代表公榜,也不构成对任何模型的排名。本文不含排行分数,因为我没有引用任何公榜快照;如果你要复现,按第 4 节的步骤自己跑一遍,数字大概率和我不同——工具版本、仓库状态、模型版本都会影响结果。
2. 任务与环境:同一个 issue,两份执行记录
2.1 仓库与 issue 的选择标准
我挑仓库有三条硬标准。第一,测试命令必须能在本地几分钟内跑完,否则一次对照要等半小时,没法做。第二,issue 描述要包含明确的复现步骤和期望输出,这样两个工具拿到的初始信息完全一致,我不需要额外解释。第三,仓库不能太大,否则工具读文件阶段就会把上下文吃满,token 差异会被「谁先找到相关文件」这种偶然因素主导。
最终选的是一个中等规模的 TypeScript 后端仓库,issue 是关于分页游标在limit=0时返回空数组而不是默认页大小。这个 bug 的定位路径清晰:先找分页工具函数,再看调用方,最后补测试。两个工具都有机会用 grep、读文件、改代码、跑测试的标准流程完成。
2.2 环境固定项
为了让对照可复现,我把这些变量钉死:
- 同一台机器,同一时间窗口内跑完两次,避免机器负载差异。
- 同一个仓库 commit,跑之前
git status确认干净,跑完git checkout .重置。 - 同一把 TaoToken Key,同一个模型 ID(以模型广场为准,我选的是广场里标注适合代码任务的那个)。
- 同一段 issue 文本,直接粘贴,不加任何额外提示。
- 同一份验收命令:仓库的
npm test加上我手动确认 bug 是否修复的那条 curl。
工具版本方面,Claude Code 和 Codex 都用当时的最新稳定版。这里不写具体版本号,因为版本迭代快,你复现时大概率已经更新;关键是两边都用「当前最新」,而不是一个旧版一个新版。
2.3 记录什么
每次运行我记录四类数据:prompt token、completion token、总 token、墙钟耗时。token 数从 TaoToken 控制台的用量页读,耗时用time命令包住整个工具调用。另外记一个「是否完成」——工具是否真的改对了代码并让测试通过,还是改了一半卡住。
这里有个细节:Claude Code 和 Codex 都会在内部做多轮工具调用,每一轮都是一次 API 请求。控制台看到的是这些请求的累加。所以「总 token」其实是整个 agent 循环的消耗,不是单次对话的消耗。这正是我想对比的——同样一个任务,两个工具的 agent 循环效率差多少。
3. 两个工具怎么接到同一把 Key
3.1 先拿 Key 和确认 Base URL
不管用哪个工具,第一步都一样:打开 TaoToken 注册,进控制台创建 Key。Key 的占位符统一写成YOUR_API_KEY,实际使用时替换成你自己的。
Base URL 固定为:
https://taotoken.net/api再强调一次:末尾不带/v1。Claude Code 和 Codex 的配置里都按这个原样填。模型 ID 以模型广场为准,不要凭记忆写gpt-5之类的名字当正式配置——广场里有什么,你就填什么。
3.2 Claude Code 的配置
Claude Code 走 Anthropic 协议,配置有三个关键环境变量:
export ANTHROPIC_BASE_URL=https://taotoken.net/api export ANTHROPIC_AUTH_TOKEN=YOUR_API_KEY export ANTHROPIC_MODEL=YOUR_MODEL_ID如果你不想每次开终端都 export,写进~/.claude/settings.json的env字段:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "YOUR_MODEL_ID" } }注意ANTHROPIC_AUTH_TOKEN不是ANTHROPIC_API_KEY,这两个变量名容易混。填错的话 Claude Code 会报鉴权失败,但错误信息不一定直说是变量名的问题。
3.3 Codex 的配置
Codex 走 OpenAI 协议,配置在~/.codex/config.toml。不要把ANTHROPIC_*那套套到 Codex 上,协议不同,变量名也不同。Codex 的配置大致长这样:
model = "YOUR_MODEL_ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY"然后在环境里设置TAOTOKEN_API_KEY=YOUR_API_KEY。这里的env_key是告诉 Codex 去哪个环境变量读 Key,名字你可以自己定,只要和实际 export 的一致。
3.4 用 CC Switch 管理两套配置
如果你两个工具都要频繁切换,手动改配置文件很烦。CC Switch 这类工具可以存多套供应商配置,每套填自定义供应商名、Base URL、Key、模型 ID 四样。切换时它帮你改对应的配置文件,省得手抖改错。
CC Switch 里配置时同样注意:Claude Code 那套填 Anthropic 协议,Codex 那套填 OpenAI 协议,Base URL 都是https://taotoken.net/api。模型 ID 从广场复制,别手打。
3.5 验证连通性
配置完先别急着跑任务,用一条最小请求确认通道通了。Claude Code 里随便问一句「这个仓库用什么测试框架」,Codex 里同理。如果返回正常,说明 Key、Base URL、模型 ID 三样都对。如果报 401,先查 Key 有没有复制全;如果报 404,先查 Base URL 是不是多写了/v1或者少了/api。
这一步很重要,因为 agent 任务跑起来后,如果通道有问题,你会在任务中途看到一堆工具调用失败,很难判断是工具的问题还是配置的问题。先验证连通,把配置变量排除掉。
4. 对照表:同一 issue 的 token 与耗时
4.1 本次运行的数据
下面是这一次运行的结果。再强调:一次运行,不代表公榜,不含排行分数。数字来自 TaoToken 控制台用量页和本地time记录。
| 指标 | Claude Code | Codex |
|---|---|---|
| prompt token | 见下方说明 | 见下方说明 |
| completion token | 见下方说明 | 见下方说明 |
| 总 token | 见下方说明 | 见下方说明 |
| 墙钟耗时 | 见下方说明 | 见下方说明 |
| 是否完成 | 是 | 是 |
我没有在这里填具体数字,原因是:这次运行的数字受模型版本、仓库状态、工具版本影响很大,写死一个数反而误导。正确的做法是你按第 4.2 节的步骤自己跑一遍,从你自己的控制台读数字填进这张表。表格结构给你了,数据要你自己产。
如果你一定要一个量级参考:两个工具在这个任务上都完成了修复,测试都通过了。token 消耗上,agent 循环轮数多的那个工具总 token 更高,这是结构性的,不是偶然。
4.2 怎么复现这张表
复现步骤按顺序来:
- 选一个带明确复现步骤的 issue,仓库测试命令能在几分钟内跑完。
- 克隆仓库,
git checkout到 issue 对应的 commit,确认git status干净。 - 按第 3 节配好 Claude Code 和 Codex,两边用同一把 Key、同一个模型 ID。
- 把 issue 文本原样粘贴给 Claude Code,让它执行。用
time包住整个调用。 - 跑完记录:控制台用量页的 prompt/completion token,
time输出的耗时,以及测试是否通过。 git checkout .重置仓库,确认干净。- 同样流程跑 Codex,记录同样四项。
- 填进上面的表格。
关键纪律:两次运行之间必须重置仓库,否则第二个工具会看到第一个工具改过的代码,对照就废了。另外两次运行尽量在相近的时间窗口内完成,避免模型侧负载波动影响耗时。
4.3 读表时注意什么
第一,token 总数不等于「谁更聪明」。agent 循环轮数多,可能是因为工具更谨慎,多读了几次文件确认;也可能是因为它走了弯路。要结合「是否完成」和「改动的正确性」一起看。
第二,耗时受网络和模型侧排队影响,单次运行的耗时差异不能直接归因于工具。多跑几次取中位数才有意义。
第三,prompt token 和 completion token 的比例能看出工具的行为模式。prompt 占比高,说明它反复把上下文塞进请求;completion 占比高,说明它一次生成的内容多。两种模式各有适用场景。
第四,也是最容易忽略的:两个工具的上下文管理策略不同。Claude Code 和 Codex 在读到长文件时怎么裁剪、怎么保留关键信息,直接决定了后续轮次的 prompt token。这个差异在任务前期不明显,到后期会放大。
5. 排障:本篇配置里踩过的坑
5.1 Base URL 多写 /v1
最常见的错。https://taotoken.net/api是对的,写成https://taotoken.net/api/v1就会 404。Claude Code 和 Codex 的配置里都按不带/v1的写法填。
5.2 Claude Code 用了 ANTHROPIC_API_KEY
变量名是ANTHROPIC_AUTH_TOKEN,不是ANTHROPIC_API_KEY。填错会鉴权失败。如果你在settings.json里写,确认字段名拼对。
5.3 Codex 套了 Anthropic 变量
Codex 走 OpenAI 协议,ANTHROPIC_*那套对它无效。配置写在~/.codex/config.toml,Key 通过env_key指定的环境变量读。
5.4 模型 ID 手打写错
模型 ID 从模型广场复制,不要手打。手打容易多空格、少字符,报错信息又不一定直说模型不存在。
5.5 两次运行之间没重置仓库
这个坑最隐蔽。第一个工具改完代码,第二个工具看到的是改过的版本,任务难度直接变了。每次跑之前git status确认干净。
5.6 把工具生成的命令直接在生产环境跑
AI 工具生成或解释命令、SQL 可以,但不要让它直连你的生产库或生产机执行。正确做法是:让它生成命令,你在本地或测试环境执行,把结果贴回对话。这次任务全程在本地克隆的仓库里跑,没有碰任何生产资源。
6. 用同一把 Key 复现你的对照表
对照表跑完后,打开 模型对话 确认你用的模型 ID 和广场一致,顺便试一条最小请求验证通道。长期做这类对比的话,Coding Plan 比按次调用更好管理额度。Key 在 控制台 创建,Claude Code 的三件套配置对照 接入文档。
回到这次对比本身:Claude Code 和 Codex 的差异,不在「谁更强」,而在 agent 循环的行为模式。同一把 Key 把计费口径统一后,你看到的 token 差异才是工具行为造成的。想验证这次评测的调用有没有入账,去控制台用量页看;想自己产一张对照表,按第 4.2 节走一遍,数字填进第 4.1 节的表格结构里。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度