背景:一场意外的发现
当我们让 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 讨论