提示词缓存为什么没帮我省下钱?
缓存只认「从头到断点逐字节一致」的前缀,正文里插一个日期就能让它彻底失效。
先把两件事分开:命中率问题,和回本问题。命中要求从提示词开头到标记断点的内容完全一致,包括工具定义、历史消息的顺序和格式。系统提示词里塞一个当天日期、工具数组每次序列化顺序不同、模板引擎留下一个尾随空格,都会让缓存从头失效,而且不报错,你只能从返回的用量字段里看出来。
回本问题是另一回事:缓存写入要付溢价,读取却很便宜。按常见的写入 1.25 倍、读取 0.1 倍计算,同一段前缀如果只用一次,写加读一共 1.35 倍,比不缓存还贵;读两次总计 1.45 倍,才比不缓存的 2 倍便宜。所以短会话、低频调用的场景本来就不该指望缓存。
模型每次读完提示词,都会在显存里留下一份中间状态。默认情况下这份状态用完就丢,下一次请求还得从头算一遍。缓存做的事情就是把它留一小段时间,下次遇到相同前缀直接复用,省掉重复的 prefill 计算。
听起来只要打开开关就省钱,实际却经常出现「开了缓存账单没变」甚至「账单变高」。原因都能归结到一处:缓存匹配的是前缀,而不是内容。
1命中条件只有一个
不同厂商的开关和阈值不一样,但匹配规则完全一致。
| 维度 | 要求 | 常见踩坑 |
|---|---|---|
| 匹配方式 | 从开头到断点的内容逐字节相同 | 把日期、用户名插在系统提示词开头 |
| 最小长度 | 按不同模型设 1024 到 4096 字的门槛 | 提示词太短,加了标记也不缓存且不报错 |
| 有效期 | 常见 5 分钟一档,另有 1 小时一档 | 任务间隔超过有效期,每次都重新写 |
| 写入计费 | 按原价溢价收费,一次性的前缀亏本 | 前缀只用一次就以为开了缓存能省钱 |
缓存不会告诉你「这次没命中」,只能自己去读返回里的用量字段:有的厂商给「从缓存读取的字数」,有的给「创建缓存的字数」。这两个数都是零,说明这段前缀根本没进缓存。
2让前缀稳定下来的四条纪律
把会变的东西全部挪到后面,缓存命中率立刻不一样。
- 固定内容放前面
- 工具定义、系统提示词、示例对话这些每次都一样的块,统一放在最前面。
- 易变内容全往后放
- 时间戳、用户标识、本轮检索到的文档,一律追加在末尾,不要插进前缀。
- 序列化要确定性
- 工具数组按固定顺序输出,JSON 序列化关掉随机键序,别让顺序漂移破坏字节一致性。
- 模板别留尾巴
- 模板引擎常在行尾留下空格或换行差异,这种差异在肉眼看来完全一样,但足以让缓存失效。
3算一遍回本点再决定开不开
把写入溢价和读取折扣放在一起比,答案很直接。
| 场景 | 缓存总成本(倍) | 不缓存总成本(倍) | 结论 |
|---|---|---|---|
| 前缀只读 1 次 | 写 1.25 + 读 0.1 = 1.35 | 1.00 | 亏,不该缓存 |
| 前缀读 2 次 | 1.25 + 0.2 = 1.45 | 2.00 | 赚,第 2 次读回本 |
| 1 小时档读 3 次 | 写 2.00 + 0.3 = 2.30 | 3.00 | 赚,长任务划算 |
| 12 步任务、8 千字前缀 | 约 16800 等效字数 | 96000 字数 | 省约 82.5% |
回本点随写入溢价变化:溢价 25% 的档位读第二次就回本,溢价 100% 的长效档位要读到第三次才回本。
4什么时候干脆别开
缓存不是越多越好,有几类负载天生不适合。
- 用户之间没有共享前缀
- 每个用户的问题都不同,前缀各写各的,读不到别人的缓存。
- 每次部署都重写系统提示词
- 把系统提示词热更新做成常态,缓存永远在重建。
- 突发后长时间闲置
- 任务集中在几分钟内跑完就停工,缓存很快过期,下次又是冷启动。
- 单次问答的短提示词
- 长度够不着最小门槛,开了也是空转。
顺着这个问题往下用
全部工具总览 →相关疑问
为什么我在系统提示词里加了日期,缓存就再也没命中过?
因为缓存从前缀的第一个字节开始匹配,日期一变,整个前缀的字节表示就变了,断点之后的一切都被判定为新内容。正确做法是把日期挪到用户消息里,系统提示词保持长期不变,这样一段前缀能被复用很多次。
缓存写入为什么要额外收钱?
因为它占用了提供方的存储和显存资源,而且写入时要生成并保存这份中间状态。计费逻辑和读取折扣是配套的:读得越多越划算,只写不读就纯亏。这也解释了为什么短会话开缓存会看到成本上升。
怎么确认这次到底命中了没有?
看接口返回的用量字段。有的厂商把它们列为「缓存读取字数」和「缓存创建字数」两个独立项,有的把它折进输入字数里单独标注。这两个数字长期为零,说明前缀不稳定或者没够着长度门槛,而不是缓存坏了。
缓存能替代批处理省钱吗?
两者作用对象不同。缓存降的是「反复发送同一段长前缀」的成本,批处理降的是「大量互不相关请求」的单价。一段稳定的系统提示词配合批量任务,可以同时吃到两边的折扣;但只有高频复用同一前缀时,缓存才是主力手段。
继续看:相关问题与资料
全部问题解答 →内容说明:本页针对具体使用问题作答,方法步骤与数值由本站自行整理与复算,事实性内容以对应官方规范与文档为准。内容最后核对日期:2026-10-09。若发现错误,欢迎通过页脚反馈入口告知。
速查在线工具箱