Claude CodeCodex CLIOpenCode

为什么 Codex 的缓存命中率比 OpenCode 高这么多?真实数据拆解

6 个主流工具的缓存命中率从 51% 到 92%——差 40 个百分点。这意味着账单可能差 4-5 倍。这篇分析每个工具的缓存策略和你怎么选。

我看 Vibe Usage 上 6 个主流工具的缓存命中率:

工具 缓存命中率
Codex CLI 92%
Claude Code 91%
OpenCode 67%
Gemini CLI 59%
openclaw 53%
hermes 51%

差 40 个百分点。按 Anthropic / OpenAI 缓存价格(10% 全价)算,缓存命中率从 50% 到 90%——意味着实际计费的 input token 价格相差 5 倍。

为什么差这么多?这篇拆解每个工具的缓存策略。

缓存命中的两个条件

先回顾基本规则:

  1. 前缀完全一致——从开头到某个点必须 byte-for-byte 一致
  2. TTL 内复用——5 分钟(默认)或 1 小时(扩展)

满足两条才能命中。命中率取决于工具怎么管理 prompt 结构。

Claude Code(91%):默认稳定

Claude Code 默认开 prompt cache,且 prompt 结构稳定:

  • 系统提示(Anthropic 内置,不变)
  • CLAUDE.md / AGENTS.md(你不动它就不变)
  • 工具列表(不变)
  • 历史对话(追加式,前缀稳定)
  • 当前消息(变化部分在末尾)

只要你 5 分钟内连续操作,每条新消息的前 95% 都能命中缓存。

Codex CLI(92%):Agent 循环帮忙

Codex 的高命中率部分得益于它的 Agent 循环——一次任务里 100+ 次调用,前面累积的内容被反复使用,缓存命中率天然高。

加上 OpenAI prompt cache 实现成熟,Codex 单次 session 内的命中率非常稳定。

OpenCode(67%):Provider 不一致

OpenCode 是"BYO provider"——你接 Anthropic、OpenAI、GLM 等。每个 provider 的 cache 实现不同:

  • Anthropic / OpenAI:cache 默认开 + 成熟
  • GLM、Together:部分支持 cache,需手动开
  • 自部署:取决于你的部署是否实现 cache

OpenCode 用户中接非 Anthropic / OpenAI provider 的占比高,导致整体命中率下来。

具体 mitigation:在你的 OpenCode 配置里手动添加 cache: true,能把命中率从 47% 直接拉到 65%+。

Gemini CLI(59%):Google cache 模型不同

Google 的 prompt cache 设计跟 Anthropic / OpenAI 不一样——它要求你显式声明哪些部分缓存(context_caching API),不是自动前缀检测。

Gemini CLI 默认没有用 context_caching API,所以等价于"不开 cache"——每次都付全价。

如果你想优化 Gemini CLI 消耗,需要切到一个开了 context_caching 的客户端。

OpenClaw(53%)和 Hermes(51%)

这两个工具命中率都很低——可能因为:

  • 没默认开 cache
  • prompt 模板里掺动态字段
  • 用户多 provider 切换让缓存失效

如果你用这些工具且消耗不小,深查一下 prompt 模板是首要优化项。

你能做什么把自己命中率拉到 85%+

1. 移除 prompt 中所有动态字段

最常见的错误:CLAUDE.md / AGENTS.md 里有 今天是 {{date}} 这种动态字段。把它移除。

2. 稳定的内容靠前

把"项目背景 / 工具说明 / 风格约定"放在 prompt 最前。这样无论你后面问什么,前 N 千 token 都缓存命中。

3. 5 分钟 TTL 内连续操作

保持长 session 比频繁开关省钱。中间走神超过 5 分钟前缀缓存全部失效。

4. 主动开 cache(如果工具不默认开)

OpenCode、各种 SDK——确认 cache: true 显式开启。

5. 不要频繁切换不同项目

跨项目的前缀差异巨大。如果你能把多个项目用同一份 prompt 模板(哪怕牺牲点细节),跨项目缓存能复用。

怎么知道自己命中率

打开 Vibe Usage 看每个工具的缓存命中率。它会按工具、按模型、按时间分别显示 cached_input / (cached_input + input) 比例。

如果你的命中率:

  • > 85%:很好,按 group 平均水平之上
  • 70-85%:可以再优化
  • < 70%:有大量优化空间,单独这一项就能砍 30-50% 月支出

真实节省案例

我朋友 OpenCode + GLM 用法的命中率 38%。我帮他做了三件事:

  1. 配置加 cache: true
  2. 重构 system prompt 把动态字段移到末尾
  3. 推荐他长 session 习惯

两周后命中率涨到 71%。月账单从 35 美元降到 18 美元——直接砍半。

如果你的命中率低,这是单独最值得做的优化。

一个总结

缓存命中率是 AI 编程消耗的"杠杆数"。

  • 50% → 90% 命中率:input 实际计费降 80%
  • 比"换便宜模型"省钱效果好
  • 比"压缩 prompt 字数"效果好 100 倍

用 Vibe Usage 自查命中率——它免费、看一眼就懂、是 AI 编程优化的第一个动作。

相关阅读

相关阅读

为什么 Codex 的缓存命中率比 OpenCode 高这么多?真实数据拆解