wx

关注公众号

Claude Code 一口气吃掉 33k tokens,但省钱的秘密其实在别处


导语

这篇文章来自 systima.ai 的博客,标题叫《Claude Code vs OpenCode Token Overhead》。作者在同样的模型、同样的机器、同样的任务下,把这两个编程助手拆开看了个底朝天。

结论很简单:Claude Code 每轮对话前自己先吃掉 33k tokens,OpenCode 只用 7k。但在复杂的多步骤任务中,Claude Code 的总消耗却比 OpenCode 更低。

你以为的“省”,和实际上的“省”,是两码事。


作者做了一件很多人想过但没做过的事:在 API 层面拦截了 Claude Code 和 OpenCode 的每一次请求,逐层分析 token 花在了哪里。

先说最扎眼的数字。

在用户还没输入任何内容之前,Claude Code 光是系统指令、工具定义、内置脚手架,已经烧掉了大约 33,000 个 token。OpenCode 是 7,000 个。差距接近 5 倍。

这 33k 是怎么堆出来的?拆开来看:

  • 工具定义占了最大头:Claude Code 内置了 27 个工具,包括后台代理编排、任务管理、推送通知这类“平台级”功能。光是这些工具的定义(tool schemas)就占了大概 24k tokens。OpenCode 只内置了 10 个经典编码工具,工具定义只占 4.8k。
  • 系统 prompt 本身也有差距:去掉工具定义后,Claude Code 的系统 prompt 还有 26,891 个字符,约 6.5k tokens;OpenCode 是 8,811 个字符,约 2k tokens。

换句话说,OpenCode 的整个“启动成本”还没到 Claude Code 的工具定义的零头。

但数据最有趣的部分不在这个静态对比。

缓存效率的差距更大。 OpenCode 每次请求的前缀字节级相同,一次写入缓存后几乎零成本回读。Claude Code 在会话中频繁重写缓存,同一任务下最多写了 OpenCode 54 倍的缓存 token——而缓存写入是按 premium 计价的。

还有配置膨胀。一份 72KB 的项目指令文件(AGENTS.md 或 CLAUDE.md),每轮对话再加约 20k tokens。挂 5 个 MCP 服务器,再加 5k-7k tokens。作者算了一笔账:一个真实的生产环境配置,可能第一轮请求前就已经 75k-85k tokens 深了。用户还没说话,先花掉近一半的上下文窗口。


但文章在这里给了个反转。

在一个需要“写代码→运行→测试→修复”的多步骤编码任务中,Claude Code 的总消耗是约 121k tokens,OpenCode 是约 132k。Claude Code 反而更省。

原因是 Claude Code 擅长批量并行工具调用——它可以把多个步骤打包成一次请求。OpenCode 一次只调用一个工具,轮次更多,每次都要重新支付那 7k 的固定开销。

也就是说:入口门槛高不等于全程花费高。 33k 的前置开销更像是一笔“预付费”,在复杂任务中可能通过批量调用赚回来。但如果你只做两三句简单的提问,OpenCode 显然更划算。

最夸张的数据在子代理上。一个小任务直接做花了 121k tokens,分流给两个子代理后飙升到 513k tokens。因为每个子代理都要支付自己那套完整的启动成本。


看完这些数据,如果你是开发者,能做什么来省钱?

我觉得最务实的几条:

第一,精简你的项目指令文件。 很多团队的习惯是把整个编码规范、架构文档、历史决策全塞进一个 AGENTS.md 或 CLAUDE.md。72KB 的文件每轮吃掉 20k tokens。真正需要的可能只是当前任务相关的几条规则。按需裁剪,而不是一股脑全放进去。

第二,控制 MCP 服务器数量。 你真的需要同时挂数据库、浏览器、文件系统、Git 和 Slack 五个工具吗?按任务场景动态加载,比常驻所有服务器聪明得多。

第三,慎用子代理。 121k 到 513k 的膨胀足够说明问题。子代理不是免费的并行计算,能单线程完成的工作,不要过早引入分布式编排。

第四,重视缓存命中率。 尤其是用 Claude Code 时,尽量保持会话连续,避免频繁重启工具,让缓存真正发挥作用。

第五,任务拆分策略要权衡。 如果你的任务需要多次工具调用,尽量在一个提示里塞多个步骤,充分利用批处理。别让 AI 一次只做一步。


但说实话,这些技术手段治标不治本。

我在跟用户的对话里聊到一个现象:几乎所有用 AI 写代码的团队,最终都会走上一条“不归路”。

一开始只写 5 条核心规则,够用。后来发现 AI 总犯同一个错误,加一条。又翻车,再加一条。规则之间开始打架,加一条“优先级说明”来调和。不敢删旧规则,怕 AI 又犯老毛病,只能往上叠新的。

变成了一份“祖传 AGENTS.md”——每一条规则在当时都有它的合理性,但合在一起就是一锅粥。

你问我是模型不够聪明,还是开发者文档管理习惯不好?两个都是。但更关键的是,我们很少停下来问一句:这条规则真的还在发挥作用吗?

我没有现成的答案。可能需要一个工具,能告诉你“这条规则在过去 100 次对话中被触发了多少次”或者“删除这条规则后任务成功率下降了百分之几”。但在那之前,能做的最简单的事就是:定期花十分钟审视你的规则文件,问自己一句——“如果删掉这条,AI 真的会出问题吗?”

多数时候,答案是否定的。


来源:

wx

关注公众号

©2017-2026 鲁ICP备17023316号-1 Powered by Hugo