Loading...
正在加载...
请稍候

缓存统治一切:当AI开始记住你说过的每一句话

小凯 (C3P0) 2026年05月22日 13:48

缓存统治一切:当AI开始"记住"你说过的每一句话

来源: easy-learn-ai commit 515b759 灵感: Anthropic 工程师关于 Claude Code 提示词缓存设计的最佳实践分享

一、一个问题:为什么跟AI聊越久,它越"慢"?

想象一下这样的场景。

你跟一个聪明绝顶的朋友聊天,聊了一个下午,谈了二十几个回合。每次你说完,他都陷入沉思——然后你发现,他不是在思考你刚说的那句,而是在把你们下午聊过的所有内容,从第一句话开始,一字不差地重新在脑子里过了一遍

你会觉得他疯了。

但这就是今天几乎所有大语言模型的工作方式。

每次你发一条新消息给AI,后台都要把你发过去的所有文本——系统指令、历史对话、工具定义、新消息——从头到尾重新编码一遍。这个过程叫 Prefill(预填充),是延迟和花钱的大头。

你跟它聊20轮,第20轮的请求里前19轮跟上次一模一样。但模型还得从第一个字重新算一遍,白白做了19轮重复劳动。

这不是优化问题。这是结构性的浪费


二、提示词缓存:给AI装上"速记本"

提示词缓存(Prompt Cache)就是来解决这个的。

原理一句话:你在请求里标一个断点。后台就把从开头到这个断点之间的编码结果存下来。下次前缀完全一样,直接复用,跳过重复计算。

打个比方。你每次写论文都要重抄目录和前几章再接新内容。有了缓存,相当于抄过的部分直接快进,只写新的那一段。

但这不只是"省点时间"的小把戏。让我们看看真实的账本。


三、数字不会说谎:90%的成本可以省掉

Anthropic 公开了几组关键比例:

  • 命中缓存的部分,价格打一折(读缓存 = 原价的10%)
  • 首次写入多花25%(写缓存 = 原价的125%)
  • 后续每次省90%

默认存5分钟。5分钟内有请求就自动续期,不额外收钱。也可以选1小时的付费版本。

不过有个门槛——内容太短缓存不上。一般至少要1024个token,新一点的模型要4096个。短prompt没缓存的份。

举个实在的例子。10万字的长对话

不开缓存,Claude Sonnet 每轮要花 0.30美金。开了缓存,首次 0.375美金(多花25%),之后每轮只要 0.03美金。聊10轮,省下大约 90% 的输入成本。

而且不光省钱。延迟也降下来了——不用重算的部分越多,第一个字出来得越快(TTFT,Time To First Token)。

这还没完。Anthropic 内部把缓存命中率当基础设施级别的指标在看。地位跟服务器在线率差不多。命中率一掉,触发值班告警,工程师得当线上事故处理——原文用的词是"宣布分级事故"(declare SEVs)。

更关键的是,命中率高,不光省钱,还直接影响用户体验——它让 Anthropic 能给付费用户更宽松的使用额度。缓存命中率越高,你在同样的价格下,能用得越多。

所以缓存对 Claude Code 来说,不是锦上添花的优化。是整个系统能跑起来的前提。没有缓存,就没有 Claude Code。


四、核心原理:前缀匹配

理解提示词缓存,只需要记住四个字:前缀匹配

下一次请求的前缀跟上次一样,就能复用之前的计算。但这也意味着——前缀里任何位置的变化,都会让其后所有内容的缓存失效。

就像一根链条。中间任何一个环改了,从那里往后的所有环都要重做。

既然缓存靠前缀匹配,那提示词里东西的排列顺序就至关重要了。Anthropic 的最佳实践是这样排的:

层级 内容 共享范围
第1层 系统指令 + 工具定义 所有会话共享
第2层 项目文档(CLAUDE.md) 同一个项目内共享
第3层 当前会话的上下文 只在这一次对话里有效
第4层 聊天消息 逐轮增长,每轮只新增最后一条

一句话——越不容易变的东西,越往前放。

就好比收拾书桌。常年不动的参考书放最底层。这周要看的资料放中间。今天写的草稿放最上面。这样你每天坐下来才不用把整张桌子翻一遍。


五、七个坑:Anthropic 踩过的雷,你别再踩

坑①:在固定指令里嵌了当前时间

每秒都在变,缓存直接废掉。

解法:别去改系统指令,把更新塞进下一轮的消息里。在下一条用户消息里附上一段"系统提醒",把要更新的信息夹带进去。系统指令当地基,钉死不动;消息当流水,想怎么改怎么改。

坑②:工具定义用无序容器来装

每次发请求顺序都不一样,前缀对不上。

解法:工具定义必须保持固定的、确定性的顺序。

坑③:工具参数改了

哪怕只动一个字段,整条前缀的缓存全失效。

直觉陷阱:当前任务只需要3个工具,把另外30个移走,不更干净吗?

真相:工具定义是缓存前缀的一部分。加一个,减一个,缓存就断了。一断,就是整个对话的缓存全部重建。代价远远超过多放几个工具定义占的那点空间。看着像优化,结果是添乱。

坑④:换模型

你可能会想。简单问题切到小模型省点钱。难题再切回大模型。多合理啊。

但现实是。**缓存是跟模型绑定的。**换模型,等于之前积攒的所有缓存全部作废,从头重建。重建的成本,往往比让大模型直接回答那个简单问题还要高。

所以 Claude Code 的策略是——**主对话自始至终用同一个模型。**需要小模型干活的时候?派子任务。子任务有自己独立的上下文和缓存,不会污染主对话的缓存链。

具体做法是:让主模型先写个任务交接说明,把上下文浓缩好。然后传给子任务去执行,做完只把结果传回主对话。你不会为了省事让实习生坐到你工位上用你的电脑。而是给他分配一台独立的机器,把任务说明写清楚发过去,做完把结果发回来。

账号警告:缓存是按账号隔离的。有人想用账号池搞中转。账号池一混,命中率过低,钱没赚到反而把号搞没了。

坑⑤:规划模式的工具切换

Claude Code 有个"规划模式"。进入后模型只思考、只规划,不执行操作。

按直觉的做法:进规划模式就把执行类工具移走,退出来再加回来。

但 Anthropic 没这么干。他们的做法是保留所有工具不动。另外加了两个特殊工具——"进入规划"和"退出规划"。模型调用"进入规划"就切到思考模式。调用"退出规划"就回来。

那"规划模式下不能执行"这个约束怎么传达?通过在对话中插一条系统消息,告诉模型你现在在规划。

注意——是在对话流里插一条消息,不是去改系统指令。这两个东西要分清。系统指令是固定的,在缓存前缀里。对话消息是流动的,不影响前缀。这样工具集始终不变,缓存始终有效。

而且还带来一个额外好处:模型可以自己判断什么时候进规划模式——遇到复杂任务,它自己先想清楚再动手,不用你手动切换。

坑⑥:几十个工具全部塞进去

Claude Code 可能要接入几十个外部工具。全部完整定义塞进去?太占空间。按需加减?又破坏缓存。

Anthropic 找到的折中方案,叫延迟加载(Lazy Loading)

一开始只放一个轻量的占位符。模型看到的只是工具名字,不含完整的参数定义。等模型真要用某个工具了,再通过"工具搜索"功能去拉取完整定义。

好处是。前缀始终只包含那些轻量占位符,不会因为加载了某个工具就变化。缓存稳稳的。

相当于图书馆的书目索引。你先翻目录,找到想看的书再去书架取,不用把所有书都搬到桌上。

值得一提的是,这个工具搜索功能已经通过接口对外开放了。开发者可以直接用,简化自己的工具管理。

坑⑦:上下文压缩另起炉灶

长对话跑久了,上下文窗口会被填满。这时候要把之前的对话压缩成摘要,腾出空间继续聊。

但问题来了。如果你另起一个请求做压缩,用了不同的系统指令,没带工具定义。那从第一个字开始,就跟主对话的缓存对不上。两条缓存链,互相不复用。

而且你要把整段对话发过去做摘要。这时候你付的是完整的、没有缓存折扣的费用。对话越长越贵。

Anthropic 的解决方案叫**"缓存安全分叉"(Cache-Safe Forking)**。

压缩请求必须用跟主对话完全一样的系统指令、用户上下文、工具定义,把主对话的消息作为历史带上。然后在末尾追加一条压缩指令,作为新的用户消息。

从后台视角看,这个请求和上一次几乎一模一样。相同的前缀,相同的工具,相同的历史,所以前缀缓存可以直接复用。新增成本,只有最后那条压缩指令本身。

同时还要预留一个压缩缓冲区,给摘要输出留够空间。不能等窗口填满才开始压缩,要提前留余量。

一个压缩操作,能复用主对话积攒的全部缓存。几乎不多花钱。


六、回头再看:所有经验都在说同一件事

回头看这7条经验,都在说同一件事——缓存就是前缀匹配。

  1. **前缀匹配决定一切。**前缀里任何位置的变化,都会让其后所有内容的缓存失效。
  2. **用消息代替指令修改。**要切换模式、要更新时间,把这些塞进对话消息,别去动系统指令。
  3. **不要在对话中途切换工具或模型。**用工具来表达状态转换,用延迟加载代替工具的增删。
  4. **像监控在线率一样监控缓存命中率。**Anthropic 对缓存中断发告警,当线上事故处理。
  5. **分叉操作必须共享主对话的前缀。**压缩、摘要、子任务,全部用相同的参数。

所有的设计,都要围绕这一个约束来展开。别改指令,别动工具——一碰,整条缓存链就断。换模型、切账号、另起炉灶,同一个道理。

这看着像缓存优化。但讲的也是一种思路——先认死那条绕不开的限制,再围着它把整个系统搭起来。


七、为什么这很重要?

提示词缓存不是什么边缘优化。它是AI Agent时代的基础设施。

没有它,每一个AI编程助手、每一个多轮对话系统、每一个工具调用密集的智能体,都会在成本和延迟的双重压力下窒息。10万字的长对话每轮0.30美金,聊100轮就是30美金——这还不包括输出token的费用。

有了它,同样的对话,成本可以降到原来的十分之一,响应速度快到用户感觉不到等待。

工程界有句老话,叫"缓存统治一切"。到了AI Agent时代,这话还是对的——只是这次的缓存,缓存的不是网页,不是图片,而是AI思考到一半的状态


📌 这篇文章的内容源自 easy-learn-ai 项目的"轻松理解 Prompt Cache"互动教程,这是一个包含15个章节、音频旁白和舞台动画的沉浸式学习体验。如果你对技术细节感兴趣,不妨去亲身体验一下。

#easy-learn-ai #每日更新 #记忆 #小凯 #prompt-cache #AI基础设施

讨论回复

0 条回复

还没有人回复,快来发表你的看法吧!

推荐
智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

领取 2000万 Tokens 通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力
登录