Prompt Caching 完全指南:原理、成本模型与落地姿势

Prompt caching 能让重复前缀的输入 Token 成本下降一个数量级。本文拆解 Anthropic 与 OpenAI 的缓存实现差异、哪些场景真的省钱、以及如何用统一网关在多家模型上复用同一套缓存策略。

Prompt caching 解决的是什么问题

大多数 LLM 调用的输入里,有相当大一部分是每次都一样的:系统提示词、few-shot 示例、检索出来的固定文档、工具定义(tool schema)。按普通计费,这些重复内容每次都要重新付一遍输入 Token 的钱,也每次都要重新算一遍 attention。

Prompt caching 的思路很直接:服务端把这段前缀的计算结果存下来,下次请求如果前缀完全相同,就直接复用,只对新增部分重新计算。Anthropic 在 [prompt caching 文档](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)中把它定位为降低延迟与成本的手段,OpenAI 侧对应的是自动 prompt caching 与 batch 折扣等机制。

哪些场景真的省钱

Prompt caching 不是一个「打开就省」的开关。它有一个明确的赢利边界:同一段前缀被复用的次数 × 前缀长度 > 缓存写入的额外开销。

  • 长系统提示词 + 多轮对话:系统提示词几千 Token、会话轮次多,几乎必赚。
  • RAG + 固定文档集:把不变的政策文档/知识库放前缀,只让用户问题变化。
  • 代码 Agent / 工具调用:工具 schema 和仓库结构说明通常在每次调用里重复。
  • 单次、短前缀的调用:写入缓存的开销可能高于省下的钱,不要强行缓存。

导致缓存失效的五个常见错误

  • 前缀里混入时间戳或随机 ID:哪怕只在一个固定位置放 Date.now(),整段前缀都变了。
  • 系统提示词动态拼接:不同用户拿到不同前缀,缓存命中率会被稀释到接近 0。
  • 对历史消息做摘要压缩:每轮改写一次,前缀就不稳定了。
  • 把用户输入放在最前面:这是最常见的结构错误,应该让变量尽量靠后。
  • 只看账单不看命中率:没有命中率指标时,缓存的收益完全无法归因。

在多家模型之间复用同一套缓存策略

如果你的产品同时用 Claude 和 GPT,缓存语义在不同厂商之间并不完全一致(谁声明缓存断点、TTL 多长、计费方式如何)。把这段适配收在一个统一网关后面,好处是业务代码只维护一份提示词结构,切换模型时不必重写。

Admesh 的网关对下游保持 OpenAI 兼容协议,因此同一份提示词结构可以只改 model 字段就在不同厂商之间切换;缓存命中的计费口径统一体现在账单的 usage 明细里,不需要为每家厂商分别对接计费口径。

Admesh 实时费率(节选)

以下价格来自 Admesh 后台实时配置,单位为美元 / 每百万 Token。完整清单见模型目录。

Admesh.ai 模型价目表:8 个已启用模型的价格与上下文窗口
模型名称与 ID上下文窗口输入价格 / 1M输出价格 / 1M缓存命中 / 1M
Claude Opusanthropic/claude-opus200K$1.00 / 1M$3.00 / 1M$0.1 / 1M
Claude Sonnetanthropic/claude-sonnet200K$1.00 / 1M$3.00 / 1M$0.1 / 1M
DeepSeek Chatdeepseek/deepseek-chat64K$1.00 / 1M$3.00 / 1M$0.1 / 1M
DeepSeek Reasonerdeepseek/deepseek-reasoner64K$1.00 / 1M$3.00 / 1M$0.1 / 1M
Gemini 1.5 Flashgoogle/gemini-1.5-flash1M$1.00 / 1M$3.00 / 1M$0.1 / 1M
Gemini 1.5 Progoogle/gemini-1.5-pro1M$1.00 / 1M$3.00 / 1M$0.1 / 1M
MiniMax ababminimax/abab25K$1.00 / 1M$3.00 / 1M$0.1 / 1M
MiniMax Textminimax/minimax-text25K$1.00 / 1M$3.00 / 1M$0.1 / 1M

以上为标准公有通道单价,按 Token 实际用量结算。 查看完整模型目录

落地清单

  1. 把提示词拆成「稳定前缀 / 半稳定部分 / 用户输入」三段,稳定部分放最前。
  2. 确保稳定前缀中不出现时间戳、随机数、用户 ID。
  3. 在账单里单独统计缓存读写 Token,换算成真实命中率。
  4. 用一份固定的评测请求集定期回归,确认提示词改动没有打崩命中率。
  5. 给缓存收益设一个下限(例如低于 5% 就回滚提示词结构),避免为优化而优化。

常见问题

Prompt caching 能省多少?
取决于前缀复用次数与前缀长度,没有通用数字。经验上,系统提示词超过 2K Token、同一会话超过 3 轮、或同一文档被反复检索时,节省最明显。建议用账单里的缓存 Token 数 ÷ 总输入 Token 数算出实际命中率,再判断是否需要调整提示词结构。
缓存的输出结果会被别的用户读到吗?
不会。缓存的是同一 API Key / 账户下的前缀计算状态,不会跨租户共享,也不会把某次响应的结果暴露给其他账户。但出于安全考虑,仍不建议把任何敏感数据放在可能被复用的提示词前缀里。
换了模型以后缓存还在吗?
不在。缓存的粒度是「模型 + 前缀」,切换模型等于换了一套缓存空间,需要重新预热。这也是为什么多模型切换频繁的应用,缓存命中率往往偏低。

参考来源