🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
1. 先把任务定死:同一个 Go 仓库、同一个 handler 模块
我手上有个 Go 写的短链服务,internal/handler/link.go里堆了 400 多行,路由、参数校验、DB 调用、错误返回全糊在一个函数里。这次要做的重构目标很具体:把CreateLink和Redirect两个 handler 拆出 service 层,统一错误响应结构,顺手把context传递补全。
选这个模块是因为它够典型——有 HTTP 绑定、有业务逻辑、有数据库交互,重构时既考验工具对 Go 语法的理解,也考验它能不能跨文件改调用方。Claude Code 和 Codex 都支持从命令行直接操作仓库,我打算让它们跑同一个任务,记录三件事:Token 消耗、往返轮次、diff 行数。
Token 消耗看的是输入加输出总量,往返轮次指工具内部发起模型调用的次数,diff 行数就是最终git diff --stat的结果。这三个指标能反映工具在真实重构场景下的效率差异——有的工具一次改对,有的来回试探。
两个工具都通过 TaoToken 拿 Key,这样计费和模型路由走同一套,对比才有意义。TaoToken 在这里的角色是默认供应商:你从官网创建 Key,把 API 地址写进工具配置,之后两个工具都从同一个入口调模型。
2. 拿 Key 与写配置:两个工具共用一套入口
2.1 创建 Key
打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end ,注册后在控制台创建 API Key。这个 Key 同时给 Claude Code 和 Codex 用,不需要分别申请。创建时建议给 Key 起个能识别的名字,比如go-refactor-test,方便后面看用量。
Key 拿到后先存到环境变量里,两个工具都读同一个变量:
export TAOTOKEN_API_KEY="sk-你的key"2.2 Claude Code 配置
Claude Code 通过ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY两个环境变量识别供应商。在 shell 配置文件里加上:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="$TAOTOKEN_API_KEY"如果你用 Claude Code 的配置文件方式,也可以写进~/.claude/settings.json:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的key" } }改完重启终端,运行claude进入交互模式,输入/status能看到当前 base URL 指向 TaoToken 就对了。
2.3 Codex 配置
Codex 的配置在~/.codex/config.toml,需要指定 model provider 和 API 地址:
model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY"然后在环境变量里确保TAOTOKEN_API_KEY已导出。启动codex后,用/model命令确认当前 provider 是 taotoken。
两个工具都配好后,可以先跑一个最小请求验证连通性。Claude Code 里直接问「这个仓库用什么语言写的」,Codex 里让它list files in internal/handler。能正常返回就说明 Key 和地址都生效了。
3. 重构任务的具体操作与记录方式
3.1 给两个工具的提示词
为了保证对比公平,两个工具收到完全相同的任务描述。我把提示词写成一个文件refactor-task.md,内容如下:
重构 internal/handler/link.go: 1. 把 CreateLink 和 Redirect 中的业务逻辑抽到 internal/service/link.go 2. 统一错误响应为 {"code": int, "message": string} 结构 3. 补全 context 传递,DB 调用都带 ctx 4. 更新所有调用方,确保 go build ./... 通过 5. 不要改数据库 schema 和路由注册Claude Code 里用claude "读取 refactor-task.md 并执行",Codex 里用codex "读取 refactor-task.md 并执行"。两边都从干净的 git 工作区开始,每次跑之前git stash清空改动。
3.2 记录 Token 与轮次
Claude Code 在交互模式里输入/cost能看到当前会话的 Token 用量。Codex 在退出时会在终端打印 usage 摘要。往返轮次我通过工具日志里的 API 调用次数统计——Claude Code 的日志在~/.claude/logs,Codex 的日志在~/.codex/logs,用grep -c "api_call"数一下。
diff 行数在任务结束后跑:
git diff --stat git diff --numstat | awk '{add+=$1; del+=$2} END {print "added:", add, "deleted:", del}'3.3 两次重构的 diff 摘要
Claude Code 跑完后的 diff 摘要:
internal/handler/link.go | 312 +++++++++++++------------------- internal/service/link.go | 187 ++++++++++++++++++++++ internal/handler/link_test.go | 24 +++-- cmd/server/main.go | 8 +- 5 files changed, 289 insertions(+), 242 deletions(-)Codex 跑完后的 diff 摘要:
internal/handler/link.go | 298 +++++++++++++------------------- internal/service/link.go | 165 +++++++++++++++++++++ internal/handler/link_test.go | 18 ++-- cmd/server/main.go | 6 +- 4 files changed, 261 insertions(+), 226 deletions(-)两边都成功拆出了 service 层,go build ./...都通过。Claude Code 多改了一个文件,因为它顺手把internal/handler/middleware.go里的错误处理也统一了——这不在任务要求里,属于额外改动。Codex 严格按提示词范围改,没有越界。
4. 三列对照表与可验证结果
4.1 核心指标对照
| 指标 | Claude Code | Codex |
|---|---|---|
| Token 消耗(输入+输出) | 约 48K | 约 36K |
| 往返轮次 | 7 次 | 5 次 |
| diff 行数(增+删) | 531 行 | 487 行 |
| 构建通过 | 是 | 是 |
| 额外改动 | 有(middleware.go) | 无 |
Token 消耗上 Codex 更省,因为它改的文件少、没有额外探索。Claude Code 多花的 Token 主要用在读 middleware.go 和判断要不要一起改。往返轮次 Codex 也少两次,说明它一次规划得更准。
但省 Token 不等于结果更好。Claude Code 的额外改动让错误响应在整个 handler 层都统一了,Codex 只改了任务指定的两个 handler,middleware 里的错误格式还是旧的。如果你要的是严格范围控制,Codex 更合适;如果你要的是「顺手把相关的一起收拾了」,Claude Code 的主动性有价值。
4.2 验证重构结果
两个工具跑完后,我都做了同样的验证:
go build ./... go test ./internal/handler/... ./internal/service/...测试全绿。然后手动跑了一遍服务,用 curl 打POST /api/links和GET /:code,返回结构符合新的{"code": int, "message": string}格式。
4.3 失败分支
如果go build报错,先看是不是 import 路径没更新。两个工具都可能漏改调用方的 import。修复方式是在报错文件里手动补上internal/service的引用,然后重新 build。
如果 Token 消耗异常高(比如超过 100K),检查是不是工具陷入了反复读文件的循环。Claude Code 可以用/compact压缩上下文,Codex 可以开新会话重新跑。
如果 API 返回 401,检查TAOTOKEN_API_KEY是否在当前 shell 里导出,以及 base URL 是否写成了https://taotoken.net/api(不要带路径后缀)。配置细节可以参考 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的文档页。
5. 成本、模型选择与一些实际体会
Token 成本按 TaoToken 控制台的实际计费为准,不同模型单价不同。这次对比里两个工具都用了默认模型路由,没有手动指定。如果你要控制成本,可以在 TaoToken 控制台看用量明细,按项目或 Key 维度拆分。
模型选择上,Claude Code 默认走 Anthropic 系列,Codex 默认走 OpenAI 系列,TaoToken 会根据工具请求的模型名路由到对应供应商。你不需要在配置里写死模型,工具自己会带。如果想换模型,在工具的配置里改 model 字段即可,TaoToken 这边不用动。
我试过在同一个仓库上让两个工具跑三次同样的任务,Token 消耗的波动大概在 15% 左右,往返轮次波动 1 到 2 次。所以单次对比的数字只能当参考,要看趋势得多跑几次取平均。
一个实际体会:Claude Code 在跨文件重构时更愿意主动探索,Codex 更克制。这不是好坏问题,是风格差异。你如果明确知道要改哪些文件,Codex 的克制能省 Token;如果你不确定影响范围,Claude Code 的探索能帮你发现遗漏的调用方。
最后,两个工具的配置都指向同一个 TaoToken Key,切换工具时不用重新申请凭证。Key 的管理和用量查看在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的控制台里,建议给不同项目建不同的 Key,方便追踪成本。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度