提示词缓存与 TOMC — 2026-10-17
提供商对重复出现的请求开头按较低的缓存价计费。有网友指出,改写历史会打断缓存。我们把两种情况都测了,并修改了 AutomaticChatSession 的默认策略。
Claude 真实计费实测
Claude Code 2.1.301 无界面调用,模型 claude-haiku-5-5,费用为 Claude Code 按官方价目报告的数字,包含缓存写入和读取。三份约 2 万 token 的合成历史(Codex 留存测试语料的 seed 11、23、37),每种做法每份历史一个会话,连续 6 轮(5 个单题 + 1 个 JSON 汇总)。
| 做法 | 6 轮平均总费用 | 单题答对 | JSON 汇总答对 |
|---|---|---|---|
| 完整历史,缓存全程有效 | $0.0197 | 11/15 | 11/15 |
| 开头用 TOMC 整理一次(40% 预算),之后不变 | $0.0089(−55%) | 14/15 | 14/15 |
第 2–6 轮两种做法都有 95% 以上的内容从缓存读取。TOMC 每轮仍更便宜,因为缓存读取是打折而不是免费,而它的请求只有约一半长。完整历史答错的 4 题都是把过时值当成最新值。在已经热起来的长对话中途切换到 TOMC,要付一次缓存写入;本次相当于约 6 轮热缓存对话,约 10 轮后回本。
自动请求循环的模拟
我们记录 AutomaticChatSession 实际生成的每条请求消息,按“与以前请求的最长相同消息前缀”计算缓存命中,假设所有请求都在缓存有效期内。价格以未缓存输入单价为 1:Anthropic 式(写 1.25×,读 0.1×)、OpenAI/DeepSeek 式(未命中 1×,命中 0.1×)、以及缓存便宜 50 倍(命中 0.02×)。不计输出。40 轮,默认 80% 记忆预算,三份历史平均;相对“完整历史 + 缓存”的输入费用:
| 策略 | 聊天(每轮 1 次请求) | Agent 循环(每轮 2 次请求,工具输出较长) | 缓存命中率 |
|---|---|---|---|
旧默认:refresh_policy="cadence",refresh_every=2 |
+538% 至 +1618% | +622% 至 +2219% | 约 4% |
新默认:refresh_policy="stable" |
−16% | −12% | 95–97% |
旧策略把最新一条用户消息当任务,普通聊天几乎每次都重新整理,而且整理结果很少满足复用条件。“只在请求装不下时才重整”对 Agent 循环很关键:如果新增 8K 就重整,稳定策略仍比完整历史贵 5–52%。
以前的结果不受影响:Codex 留存测试和叠加实测每题都在全新会话里回答,两边都没有缓存;MCP 插件只在被调用时准备上下文,不会改写宿主的请求。
局限
真实计费部分只有一个模型、三份相关的合成历史、每种做法一个会话。模拟按消息粒度判断前缀,没有考虑各提供商的最小缓存长度、分块粒度和过期时间。沿用为早先任务整理的记忆,可能缺少后来任务需要的细节;重要答案请核对。