来源 Commit: 515b759 -- feat(prompt-cache): 新增提示词缓存功能模块
# 当 AI 学会「过目不忘」:Prompt Cache 为什么能省下 90% 的成本
你有没有想过,为什么你跟 Claude 聊得越嗨,它的反应反而越慢、你的账单反而越厚?
答案藏在一句工程界的老话里:**"缓存统治一切"**。到了 AI Agent 时代,这话不仅没过时,反而成了决定一个系统能不能跑起来的生死线。
今天聊的 Prompt Cache(提示词缓存),不是那种藏在浏览器设置里、点一下"清除缓存"就能解决的问题。它是大模型推理系统里的一套精密机制—— **专门用来对付人类和 AI 聊天时最浪费钱、最拖时间的那个环节**。
---
## 一、重复劳动:每次对话都在从头再来的 AI
想象一下这个场景。你跟一个编程助手聊了 20 轮,帮它改 bug、重构代码、写测试。到了第 20 轮,你把新的需求发过去。
后台发生了什么?
模型要把你们前 19 轮的对话——系统指令、工具定义、所有历史消息—— **从头到尾重新编码一遍**。一个字一个字地算注意力权重,算 KV 值,算完才能开始回答你第 20 轮的问题。
前 19 轮的内容明明跟上一轮一模一样,但模型还是像个强迫症图书馆员,每次都要从书架第一格开始重新盘点。这就是大模型推理里最花钱、最耗时的部分:**Prefill 阶段** ——把输入文本转成内部表示的过程。
聊 20 轮,重复算了 19 遍。冤枉不冤枉?
---
## 二、Prompt Cache 的原理:抄过的部分,快进
Prompt Cache 的解法说起来就一句话:**你在请求里标一个断点,后台把从开头到这个断点之间的编码结果存下来。下次前缀完全一样,直接复用,跳过重复计算。**
打个比方。你每次写论文都要重抄目录和前几章,再接上新的内容。有了缓存,相当于抄过的部分直接快进,**只写新的那一段**。
这里的关键词是 **"前缀匹配"**。缓存不是按"意思相似"来匹配的,是按字节级的前缀一致性来匹配的。你发的新请求,开头部分跟上次一模一样,那这部分的计算结果就可以直接拿来用。
---
## 三、关键数字:省钱省到离谱
几个硬数字,看完你就明白为什么 Anthropic 把缓存命中率当成 **基础设施级别的指标** 来监控了——地位跟服务器在线率差不多,命中率一掉,直接触发值班告警,走完整的事故响应流程。
- **缓存命中部分的价格打一折**——省 90%
- **首次写入多花 25%**——为了存下这个结果,第一次要付 1.25 倍的成本
- **默认存 5 分钟**,5 分钟内有请求就自动续期,不额外收钱;也可以选 1 小时的付费档
- **内容太短缓存不上**:一般至少 1024 个 token,新模型要 4096 个
举个实在的例子。10 万字的长对话,用 Claude Sonnet:
- **不开缓存**:每轮 0.30 美金
- **开了缓存**:首次 0.375,之后每轮只要 **0.03**
聊 10 轮,省下大约 90% 的输入成本。而且延迟也降下来了——不用重算的部分越多,第一个字出来得越快。
---
## 四、怎么排提示词?越不动的东西越往前放
既然缓存靠前缀匹配,那提示词里东西的 **排列顺序** 就至关重要。
Anthropic 的最佳实践是这样排的,从上到下:
1. **系统指令 + 工具定义** —— 这些是固定的,所有会话共享
2. **项目文档**(比如 CLAUDE.md)—— 同一个项目内共享
3. **当前会话的上下文** —— 只在这一轮对话里有效
4. **聊天消息** —— 逐轮增长,每轮只新增最后一条
一句话:**越不容易变的东西,越往前放。**
就好比收拾书桌。常年不动的参考书放最底层,这周要看的资料放中间,今天写的草稿放最上面。这样你每天坐下来才不用把整张桌子翻一遍。
---
## 五、三个坑:一个小细节,整条缓存链就断
这里有几个特别容易踩的坑,踩中一个,缓存白开。
**坑一:在固定指令里嵌了当前时间。** 每秒都在变,前缀永远对不上,缓存直接废掉。正确做法是——要更新时间,塞进 **对话消息** 里,别去动系统指令。
**坑二:工具定义用无序容器来装。** 比如 Python 的 dict 或 set,每次发请求顺序都不一样,前缀对不上。解决办法很简单:用有序容器(list),或者显式排序后再发。
**坑三:工具参数改了一个字段。** 哪怕只动一个字段,整条前缀的缓存全失效。所以在 Claude Code 的设计里,工具集一旦确定,基本不会在中途增删改。
---
## 六、进阶技巧:Plan Mode、Lazy Loading、子任务分叉
### Plan Mode:用消息切换状态,不动指令
Claude Code 有个"规划模式"——进入后模型只思考、不执行。直觉的做法是:进规划模式就把执行类工具移走,退出来再加回来。但 Anthropic 没这么干—— **这样一动工具,缓存就断了**。
他们的做法是:保留所有工具不动,另外加了两个特殊工具——"进入规划"和"退出规划"。那"规划模式下不能执行"这个约束怎么传达?**在对话中插入一条系统消息**,告诉模型你现在在规划。
关键区别:系统指令是固定的,在缓存前缀里;对话消息是流动的,不影响前缀。这样工具集始终不变,缓存始终有效。
### Lazy Loading:先放占位符,用时再加载
Claude Code 可能要接入几十个外部工具。全部完整定义塞进去?太占空间。按需加减?又破坏缓存。
折中方案叫**延迟加载**。一开始只放一个轻量的占位符——模型看到的只是工具名字,不含完整的参数定义。等模型真要用某个工具了,再通过"工具搜索"去拉取完整定义。
前缀始终只包含那些轻量占位符,不会因为加载了某个工具就变化。缓存稳稳的。相当于图书馆的书目索引,你先翻目录,找到想看的书再去书架取,不用把所有书都搬到桌上。
### 子任务:派实习生去独立的工位
需要小模型干活的时候怎么办?**派子任务**。子任务有自己独立的上下文和缓存,不会污染主对话的缓存链。
具体做法:让主模型先写个任务交接说明,把上下文浓缩好,传给子任务去执行,做完只把结果传回主对话。你不会为了省事让实习生坐到你的工位上用你的电脑,而是给他分配一台独立的机器,把任务说明写清楚发过去,做完把结果发回来。
---
## 七、缓存即基建:没有它,就没有 Claude Code
Anthropic 内部有个论断:**没有缓存,就没有 Claude Code。**
为什么?因为 Claude Code 这种 AI 编程助手是长对话的,一个会话几十轮。每一轮都要把上文全带上重新发,每次都从头算,延迟和成本会爆炸。
缓存命中率越高,你在同样的价格下能用得越多。所以 Anthropic 不光把它当性能优化,而是当 **用户体验的基石** 来看。命中率高,不光省钱,还直接影响能给付费用户多宽松的使用额度。
---
## 八、回头看:所有经验都在说同一件事
回看这 7 条经验,都在说同一件事—— **缓存就是前缀匹配**。
前缀里任何位置的变化,都会让其后所有内容的缓存失效。所以:别改指令,别动工具——一碰,整条缓存链就断。换模型、切账号、另起炉灶,同一个道理。
这看着像缓存优化,但讲的也是一种思路—— **先认死那条绕不开的限制,再围着它把整个系统搭起来。**
---
> 这个项目来自 easy-learn-ai(AI 知视系列),用 15 章交互式动画演示了 Prompt Cache 的完整知识体系。每一章配有旁白语音和视觉动画,可以在浏览器中直接体验。参考来源:Anthropic 工程师关于 Claude Code 提示词缓存设计的最佳实践分享。
#easy-learn-ai #每日更新 #记忆 #小凯 #PromptCache #AIAgent
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!
推荐
推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
领取 2000万 Tokens
通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力