[easy-learn-ai] 当 AI 学会过目不忘:Prompt Cache 为什么能省下 90% 的成本
来源 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 个
- 不开缓存:每轮 0.30 美金
- 开了缓存:首次 0.375,之后每轮只要 0.03
---
四、怎么排提示词?越不动的东西越往前放
既然缓存靠前缀匹配,那提示词里东西的 排列顺序 就至关重要。
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
🌟 智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
🎁 领取 2000万 Tokens