提示词缓存怎么省钱:把重复的前缀只算一次
提示词缓存(Prompt Caching)的思路很直接:每次请求里那些不变的部分,比如系统提示、工具定义、长文档,让服务端记住,下次相同前缀再来时按低价读取。命中缓存的输入 Token 价格通常只有基础输入价的一成左右,同时首字延迟也会下降。但它不是开了就有效,前缀必须一致、长度必须达标、请求间隔必须落在有效期内。本文对照 Anthropic 与 OpenAI 的官方文档(核验日期 2026-09-20),讲清命中条件、命中率的算法,以及账单会发生什么变化。
缓存命中的三个条件
前缀必须逐字节一致
缓存匹配的是请求开头的一段连续内容,只要前面某个位置变了,后面的内容即使一模一样也无法命中。Anthropic 的缓存层级按 tools、system、messages 的顺序排列,上游的改动会向下级联:改了工具定义,三层缓存都失效;改了系统提示,系统和消息层失效;只改消息,只影响消息层。所以稳定内容放前面、变化内容放后面,是最基本的排布原则。
长度要达到最小门槛,间隔要落在有效期内
两家都设有最小可缓存长度和有效期,下表是本次核验到的口径,模型不同数值不同,落地前请回到官方页面确认所用模型。
| 项目 | Anthropic | OpenAI |
|---|---|---|
| 开启方式 | 用 cache_control 标记,可在顶层自动缓存,也可在内容块上设置断点,单次请求最多 4 个断点 | 自动识别可复用前缀;较新模型还支持显式断点 |
| 最小长度 | 随模型而异,文档列出 512、1,024、2,048、4,096 Token 四档 | GPT-5.6 及之后为 1,024 Token,更早模型随请求设置有差异 |
| 有效期 | 默认 5 分钟,可选 1 小时 | GPT-5.6 及之后为最近一次写入或复用后 30 分钟;更早模型通常 5 到 10 分钟无活动,最长一小时 |
| 读取价格 | 多数模型为基础输入价的 0.1 倍 | GPT-5.6 为未缓存输入价的 0.1 倍,更早模型因模型而异 |
| 写入价格 | 5 分钟缓存为 1.25 倍,1 小时缓存为 2 倍 | 文档列有 cache_write_tokens 字段,计价以官方定价页为准 |
| 用量字段 | cache_creation_input_tokens、cache_read_input_tokens、input_tokens | usage.input_tokens_details.cached_tokens |
哪些改动会悄悄让缓存失效
除了改提示词本身,Anthropic 文档还列出了几类容易忽视的变化:工具定义任何改动会使全部层级失效;切换网页搜索或引用功能会使系统层和消息层失效;tool_choice 变化、图片的增减会使消息层失效;思考相关参数(推理强度、思考预算)变化会使消息层失效。另外,回溯窗口只有 20 个内容块,断点之前的历史如果新增了超过 20 个块,就可能找不到之前写入的缓存。
命中率怎么算,账单会变成什么样
先把三个用量字段读明白
Anthropic 响应里的 input_tokens 只表示最后一个缓存断点之后的那部分,并不是全部输入。总输入等于 cache_read_input_tokens、cache_creation_input_tokens 与 input_tokens 三者之和。文档举过一个例子:缓存了 20 万 Token 的文档,再问一个 50 Token 的问题,input_tokens 显示 50,总输入却是 200,050。命中率因此可以定义为:
命中率 = 读取的缓存 Token ÷ 总输入 Token。
OpenAI 侧对应的是 usage.input_tokens_details.cached_tokens 占总输入的比例。演示数字(非实测):某次请求读取 18,000、新写入 0、未缓存 2,000,命中率为 18,000 ÷ 20,000 = 90%。
用公式估算回本点
以 Anthropic 的 5 分钟缓存为例,设重复前缀长度为 P、基础输入单价为 B,同一前缀在有效期内被请求 N 次。不缓存的成本是 N × P × B;缓存后,第一次按 1.25 倍写入,之后每次按 0.1 倍读取,总成本是 (1.25 + 0.1 × (N − 1)) × P × B。N 为 2 时是 1.35 对 2.0,第二次请求就已经回本。之后命中率越高,节省越多:若把缓存读取按 0.1 倍计价,命中比例为 50% 时,输入成本约为不缓存时的 55%;命中比例为 90% 时约为 19%。这是按公式推算的示意,没有计入写入溢价和输出费用。
还有一个附带好处:限流额度
Anthropic 速率限制文档说明,对多数模型,cache_read_input_tokens 不计入每分钟输入 Token 限额,只有未缓存输入与缓存写入计入。文档的示例是:在 200 万 ITPM 限额和 80% 命中率下,每分钟可处理的总输入约 1000 万。命中率高,不只省钱,也在放宽吞吐上限。
提高命中率的五个动作
- 把系统提示、角色说明、工具定义、示例和长背景资料放在提示词最前面,动态内容(用户问题、时间戳、检索结果)放在最后。
- 不要在前缀里放会变的东西,比如当前时间、请求编号、随机排序的工具列表。
- 对话采用只追加的方式:历史消息不改写、不重排,新内容只加在末尾。
- 让请求间隔小于有效期。低频任务可以考虑 Anthropic 的 1 小时缓存,但写入价格是 2 倍,需要算清楚是否值得。
- 在同一段对话内固定推理强度与思考预算,需要临时调整时,用最新用户消息里的提示语,而不是改参数。
OpenAI 文档同样强调保持工具定义稳定、历史只追加;对较早的模型,prompt_cache_key 可以帮助把同类请求路由到同一缓存,较新的 GPT-5.6 及之后则不需要为优化缓存而设置它。
常见误区与排查清单
- 误区一:以为缓存是全局共享的。它按前缀匹配,任何一处变化都会让后续内容失效。
- 误区二:只看 input_tokens 判断输入量。缓存开启后这个数字会明显偏小,要把三个字段加总。
- 误区三:短提示词也期望命中。低于最小长度不会被缓存,用量字段里会一直是 0。
- 误区四:频繁切换模型或参数。多模型混用时,每个模型各有自己的缓存,切换会重新写入。
排查顺序建议是:先确认前缀是否达到该模型的最小长度,再对比相邻两次请求的前缀是否有差异,接着检查工具、图片、思考参数有没有变化,最后看两次请求的时间间隔有没有超过有效期。每一步都用用量字段里的读取量作为证据,不凭感觉判断。
总结:让重复的部分只付一次全价
提示词缓存的收益来自把稳定前缀固定下来,再用命中率这一个数字去监控。先在日志里记录读取量与总输入,算出每类请求的命中率,再决定是调整提示词排布,还是调整调用频率。如果你的日常对话集中在同一批长文档或同一套系统提示上,可以先按本文的方法测一周命中率,再对照 Tonbo AI 的 Token 套餐与按量充值,选择更适合自己用量曲线的额度方式。
延伸阅读









