提示词缓存与 TOMC — 2026-10-17

English · 请求策略

提供商对重复出现的请求开头按较低的缓存价计费。有网友指出,改写历史会打断缓存。我们把两种情况都测了,并修改了 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 插件只在被调用时准备上下文,不会改写宿主的请求。

局限

真实计费部分只有一个模型、三份相关的合成历史、每种做法一个会话。模拟按消息粒度判断前缀,没有考虑各提供商的最小缓存长度、分块粒度和过期时间。沿用为早先任务整理的记忆,可能缺少后来任务需要的细节;重要答案请核对。