为什么 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 倍。
为什么差这么多?这篇拆解每个工具的缓存策略。
缓存命中的两个条件
先回顾基本规则:
- 前缀完全一致——从开头到某个点必须 byte-for-byte 一致
- 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%。我帮他做了三件事:
- 配置加
cache: true - 重构 system prompt 把动态字段移到末尾
- 推荐他长 session 习惯
两周后命中率涨到 71%。月账单从 35 美元降到 18 美元——直接砍半。
如果你的命中率低,这是单独最值得做的优化。
一个总结
缓存命中率是 AI 编程消耗的"杠杆数"。
- 50% → 90% 命中率:input 实际计费降 80%
- 比"换便宜模型"省钱效果好
- 比"压缩 prompt 字数"效果好 100 倍
用 Vibe Usage 自查命中率——它免费、看一眼就懂、是 AI 编程优化的第一个动作。