Claude Code 与 OpenCode 令牌开销分析

Claude Code 与 OpenCode 令牌开销分析

Claude Code 的令牌开销显著高于 OpenCode

Claude Code 在处理用户提示之前,需要大约 33,000 个令牌的系统提示、工具模式和脚手架,而 OpenCode 只需要约 7,000 个令牌。这个基线开销占用了模型上下文窗口的相当大一部分,并增加了成本,尤其是在提示缓存效率低下或任务被分配给子代理时。

基线令牌消耗

在受控测试中,两者都被要求给出一句回复("OK"),测得的开销如下:

组件 Claude Code OpenCode
系统提示 ~6.5k 令牌 ~2.0k 令牌
工具模式 ~24k 令牌 ~4.8k 令牌
脚手架 ~2.5k 令牌
首轮总负载 ~32,800 令牌 ~6,900 令牌

Claude Code 的开销主要来源于更多的工具定义(27 个工具 vs. OpenCode 的 10 个)以及更为详尽的行为准则,包括语气规则和安全指引。即使禁用工具,Claude Code 的系统提示仍是 OpenCode 的三倍以上。

配置乘数的影响

实际使用中会叠加多层令牌消耗,进一步放大基线开销:

指令文件

添加一个 72KB 的指令文件(例如 CLAUDE.mdAGENTS.md)会为两个框架的每一次请求额外增加约 20,000 个令牌。

MCP 服务器

每个小型模型上下文协议(MCP)服务器会在每次请求中增加 1,000 到 1,400 个令牌。配置为五台服务器时,基线会额外增加约 5,000 到 7,000 个令牌。

子代理

将任务委派给子代理是最显著的令牌乘数。因为每个子代理都需要自己的启动提示,且父代理必须读取子代理的对话记录,成本会呈指数增长。一次测试显示,直接完成的任务消耗 121,000 令牌,而分配给两个子代理后消耗 513,000 令牌——增长了 4.2 倍。

性能与成本权衡

虽然 Claude Code 的基线更高,但它采用了不同的编排策略,在复杂的多步骤任务上可以降低总令牌消耗。

并行批处理 vs. 串行执行

在写‑运行‑测试‑修复循环中,Claude Code 将多个工具调用批量合并为一次往返,而 OpenCode 则每轮调用一次工具。由于基线会在每次请求中重新发送或重新读取,Claude Code 的激进批处理导致请求次数更少(3 次 vs 10 次),从而在总令牌消耗上趋于与 OpenCode 持平,尽管单次请求成本更高。

提示缓存效率

提示缓存可以降低重复前缀的成本,但其效果取决于前缀的稳定性。

  • OpenCode 在请求之间保持字节级相同的前缀,因而缓存命中率高,缓存写入极少。
  • Claude Code 前缀不稳定,会产生不同的请求类别(热身探测、主对话、子代理调用)并且其首条消息的脚手架会变化。这导致缓存写入显著增多——比 OpenCode 多 5.9 倍到 54 倍,这部分会按溢价计费。

社区见解与反驳

用户和开发者指出了这些框架在价值主张上的若干定性差异:

"Claude Code 不仅仅是一个框架,它是一个不同的产品……如果你使用的是 API,完全没有理由使用 Claude Code。"

一些用户认为原始令牌数量并不如最终的智能水平和工作效率重要。另一些人则认为 Claude Code 的高开销可能是 Anthropic 为了推动用户订阅或提升 API 收入的策略选择。

社区还提到了其他替代方案,包括 Pi(据称每次发送不超过 1,000 令牌)和 Cline(因其用户界面和透明度受到部分用户青睐)。

Sources