提示词缓存——Claude Code的"省钱秘籍"

你有没有发现,同样的代码库,第二次问Claude Code问题,响应更快、更便宜?
这不是错觉,是提示词缓存(Prompt Caching)在起作用。就像餐厅的预制菜——把常用的汤底提前准备好,客人点了直接加热,又快又省钱。
今天咱们就揭开这个"省钱秘籍"的面纱。
*图:提示词缓存像餐厅预制菜,提前准备好常用的"
为什么需要缓存
先算一笔账。
Claude API按token收费:输入token(发送给模型的)+ 输出token(模型返回的)。其中,系统提示词和工具定义每次都要发,这是"固定开销"。
假设:
- 系统提示词:5K token
- 工具定义:15K token
- 历史对话:10K token
- 单次请求总共:30K token
如果不用缓存,每次请求都要付30K的钱。但如果你在一个代码库里连续提问10次,系统提示词和工具定义其实是一样的——重复付费很浪费。
提示词缓存就是解决这个问题:把不变的"前缀"缓存起来,只付一次钱,后续请求复用。
缓存断点:从哪里切开
缓存不是整个提示词都缓存,而是有"断点"(breakpoint)的。
想象一下快递打包:不是整箱都贴标签,而是在特定位置贴标签,方便分拣。
Claude Code的缓存断点设计:
系统提示词:从开头到工具列表之前。这是最不常变的部分。
工具列表:按名称排序后的工具定义。这是相对稳定的。
动态内容:用户输入、历史消息、工具结果——这部分不缓存。
[系统提示词] ← 缓存断点1
[工具列表] ← 缓存断点2
[历史消息]
[用户输入]
图:缓存断点设计,把提示词分成可缓存和不可缓存部分
当模型API收到请求时,会检查缓存断点之前的部分是否已经缓存。如果是,直接复用,只计费断点之后的部分。
工具排序:为什么顺序很重要
工具列表的排序直接影响缓存命中率。
假设你有这些工具:FileRead、FileEdit、Bash、Grep、Glob。如果顺序变来变去:
请求1: [Bash, FileRead, FileEdit, Glob, Grep]
请求2: [Bash, FileEdit, FileRead, Grep, Glob] ← 顺序变了!缓存失效
只要有一个工具的位置变了,整个缓存键就变了,之前的缓存全部失效。
Claude Code的解决方案:稳定排序。
- 内置工具按固定顺序(如字母顺序)
- MCP工具也按字母顺序
- 内置工具在前,MCP工具在后
这样,只要工具集合不变,顺序就不变,缓存就能命中。
请求1: [Bash, FileEdit, FileRead, Glob, Grep] + [MCP-A, MCP-B]
请求2: [Bash, FileEdit, FileRead, Glob, Grep] + [MCP-A, MCP-B] ← 缓存命中!
缓存中断:什么情况下会失效
缓存不是永久的,有些情况下会"中断":
工具增减:如果新增了MCP工具,或者禁用了某个工具,工具列表变了,缓存失效。
系统提示词更新:如果Claude Code版本更新,系统提示词变了,缓存失效。
模型切换:不同模型的系统提示词不同,切换模型缓存失效。
会话超时:缓存有过期时间,长时间不用会失效。
显式刷新:某些操作会触发缓存刷新。
理解这些中断场景,能帮你优化使用:
- 不要频繁增减MCP工具
- 在同一个会话中连续提问,命中率更高
- 避免频繁切换模型
图:缓存中断的常见原因
实战:如何最大化缓存收益
如果你想最大化提示词缓存的收益,可以试试:
保持会话连续性:在同一个代码库里连续提问,不要频繁开启新会话。
稳定工具配置:确定好要用的MCP工具,不要频繁增减。
利用CLAUDE.md:项目级的配置放在CLAUDE.md,它会被包含在缓存前缀中,保持稳定性。
监控缓存命中率:Claude Code的状态输出会显示缓存命中情况。
理解成本结构:缓存命中时,只需要付用户输入+输出的token费用,系统部分免费。
成本对比:缓存能省多少钱
实际能省多少?举个例子:
场景:在一个大型代码库中连续提问10次
无缓存:
- 每次请求:30K token × 10次 = 300K token
有缓存(假设80%命中):
- 第一次:30K token(建立缓存)
- 后续9次:5K token(用户输入)× 9 = 45K token
- 总计:75K token
节省:(300K - 75K) / 300K = 75%
实际节省比例取决于使用模式,但通常能达到50-80%。
这对构建AI Agent的启示
如果你想在自己的AI应用中实现提示词缓存:
识别不变的前缀:系统提示词、工具定义是相对稳定的,适合缓存。
设计稳定的排序:确保工具列表的顺序在请求之间保持一致。
设置合理的断点:在"稳定部分"和"动态部分"之间设置断点。
处理缓存失效:当缓存失效时,优雅地回退到非缓存模式。
监控和优化:提供缓存命中率的可见性,帮助用户优化。
总结
提示词缓存是Claude Code的"省钱秘籍",通过缓存不变的系统提示词和工具定义,大幅降低API调用成本。
关键设计:
- 缓存断点:把提示词分成可缓存和不可缓存部分
- 稳定排序:工具列表保持固定顺序,确保缓存命中
- 中断处理:识别缓存失效场景,优雅处理
理解这一点,能让你:
- 更有效地使用Claude Code(保持会话连续性)
- 理解成本结构(知道钱花在哪儿)
- 在自己的AI应用中实现类似的优化
下一篇,咱们聊聊当AI的"脑子"不够用时——压缩与微压缩。
文章写到这儿,希望对你理解提示词缓存有所帮助。觉得有收获的话,欢迎点赞转发。关注梦兽编程,咱们下篇见。
