Claude Code的33K令牌开销

Claude Code提示前耗33K token,OpenCode仅7K

背景:一场意外的发现

当我们让 Claude Code 和 OpenCode 运行在相同的模型、相同的机器、相同的任务上,然后逐条检查它们发送和接收的所有内容时,一个惊人的事实浮出水面:Claude Code 远比 OpenCode”饥饿”。

在要求两个编程代理只返回一行回复的简单测试中,Claude Code 在提示词到达之前就消耗了约 33,000 个 token —— 包括系统提示、工具模式和各种注入的脚手架代码。而 OpenCode 只消耗了约 7,000 个 token。差距接近 5 倍。

这项研究由 systima.ai 团队完成,他们使用了模型网关来捕获所有 API 请求的完整载荷。结果在 Hacker News 上引发热议,426 分、238 条评论。

核心发现:缓存效率的鸿沟

差距不仅仅在于初始 token 数量。更关键的是缓存效率:

OpenCode 的请求前缀在每次运行中字节完全相同 —— 一次缓存,整个会话受益,后续请求以极低成本读取缓存。而 Claude Code 在会话中反复重写数万 token 的提示缓存,相同任务上写入的缓存 token 比 OpenCode 多出最高 54 倍。缓存写入按高价计费,这就是 Claude Code 使用仪表盘数字不断攀升的原因。

进一步的实验发现,这种差距是模型相关的。在 Claude Fable 5 上重新运行时差距缩小到约 3.3 倍,因为 Claude Code 向新模型发送的系统提示更小。但仍然远高于 OpenCode。

配置膨胀:雪上加霜

真实的生产环境会让这个问题更加严重:

  • 一个典型的 AGENTS.md 或 CLAUDE.md 配置文件(72KB)会为每次请求额外增加约 20,000 token
  • 五个普通的 MCP 服务器再增加 5,000 到 7,000 token
  • 当真实工作环境发送第一条请求时,用户还没输入一个字,就已经消耗了 75,000 到 85,000 token

子代理(subagent)机制更是放大了成本。一个直接执行消耗 121,000 token 的小任务,当分派给两个子代理时消耗了 513,000 token —— 每个子代理都有自己的启动成本,父代理还要消费其对话记录。

Claude Code 的优势

研究也发现了一个有利于 Claude Code 的结果:在多步骤任务中,Claude Code 的全局总消耗反而低于 OpenCode。原因在于 Claude Code 会将多个工具调用打包到更少的请求中,而 OpenCode 每轮都在重复支付其较小的基线成本。仪表盘起步更高,但会话的展开方式决定了最终谁花得更多。

社区反响

HN 社区的讨论非常热烈。多位开发者表示早就注意到代理工具”试图变得聪明”时产生的巨大 token 消耗。有评论指出 Anthropic 的商业模式自然激励高消耗 —— 他们想打造最好的编程代理,不关心(甚至被激励于)高成本。而其他代理如 OpenCode 则必须在性能和成本之间做出权衡。

也有评论质疑测试使用的模型版本较旧(Sonnet 4.5),但核心发现 —— Claude Code 的系统提示开销显著高于竞品 —— 得到了广泛认同。一位开发者幽默地说:”所以不仅文章是 AI 写的,连测试也全由 AI 完成的?”

原文链接:systima.ai · HN 讨论

Leave a Reply

Your email address will not be published. Required fields are marked *