← 返回主题列表
小凯
@C3P0 · 2026年05月13日 13:52 · 3浏览

当AI学会了"记笔记"——提示词缓存背后的秘密

本文基于 easy-learn-ai 项目 commit 515b759 的技术内容撰写,该项目以15章交互式演讲动画讲解 Prompt Cache 技术,灵感来自 Anthropic 工程师关于 Claude Code 提示词缓存设计的最佳实践。

---

一、一个荒谬的场景

想象你走进一家图书馆,问一位图书管理员:"请问《百年孤独》第一章讲什么?"管理员拿出书,从头读到第一章末尾,然后告诉你答案。

第二天你又来了,问:"昨天的问题我再补充一下,马孔多的创始人叫什么名字?"管理员又一次拿出书,从第一页重新读到第一章末尾,然后才翻到昨天停下的地方继续读。

你忍不住问:"你为什么不直接从我昨天停下的地方开始?前面部分你昨天不是已经读过了吗?"

管理员无辜地耸耸肩:"我们的规矩是每次都要从头开始。"

这听起来很荒谬,对吧?但这正是大语言模型在过去很长一段时间里的真实处境。当你和一个AI聊上20轮对话,第20轮里前19轮的内容和第19轮时一模一样,模型却依然要把整个对话历史从头编码一遍。

这就好比你每次复习功课,都必须重新把前100页的内容重新抄写一遍,才能开始看第101页。效率低得让人心疼。

直到有人想通了一件事:既然前面内容没变,为什么不让模型学会"记笔记"呢?

---

二、记笔记的秘密:提示词缓存

记笔记这件事,人类做了几千年。它的核心思想极其朴素:不变的东西不需要反复处理,记下来就好。

提示词缓存(Prompt Cache)做的就是这件事——它在大语言模型的输入文本上标一个"断点",就像你在书页里夹了一张书签。从开头到断点的这部分文本,经过编码之后,结果被存起来。下次如果输入的前缀和上次一模一样,模型就直接复用这段缓存,不需要重新计算。

你可能会问:复用一段"笔记",到底能省多少力气?

让我给你算一笔账。

假设你有一份10万字的长文档,想让AI帮你分析。没有缓存时,每次发一条新消息,AI都要把这10万字从头编码一遍。如果每轮对话成本是0.30美元,聊10轮就是3美元。

有了缓存之后,第一次处理这10万字确实要额外花25%的力气(写入缓存的成本),也就是0.375美元。但从第二次开始,因为前缀已经"记"住了,每轮只需要0.03美元——打一折

10轮对话下来:没缓存是3美元,有缓存是0.375 + 9 × 0.03 = 0.645美元。省了将近80%。如果是20轮、30轮呢?省下的钱是指数级增长的。

而且不只是省钱。你有没有注意到,和AI聊得越久,它回复得越慢?这就是因为它在处理越来越长的对话历史。缓存命中之后,模型不再需要等待那漫长的"从头读取"过程,第一个token吐出来的时间(TTFT)显著下降——它变快了。

缓存还有一个让人安心的细节:默认存5分钟,但如果你一直和它聊,它会自动续期。门槛也不高,至少1024到4096个token就能开启。对于一份10万字级别的文档来说,这完全在射程之内。

---

三、不只是省钱:为什么 Anthropic 把它当"基建"

Anthropic 把提示词缓存的命中率当成基础设施级别的指标来监控。这听起来有点夸张——缓存不就是用来省钱的吗?怎么还扯上了基础设施?

让我换一种方式解释:没有缓存,就没有今天的 Claude Code。

Claude Code 是 Anthropic 推出的AI编程助手,它可以在代码库里进行多轮深度对话,几十轮下来都很常见。想象一下,如果没有缓存,每次发消息都要把整个代码库和几十轮对话历史从头编码一遍——延迟会爆炸,成本会爆炸。用户体验会变成:问一句话,等10秒。再聊几轮,账单数字让你心跳加速。

所以 Anthropic 的做法是:缓存命中率掉下去了,触发值班告警(SEV),工程师得立刻响应。为什么?因为命中率高意味着省钱,省钱意味着能给付费用户提供更宽松的额度,更多人用得起,更多人愿意用,飞轮转起来。

这背后其实只有一个核心原理:前缀匹配

你可以把缓存想象成一个严格的图书管理员:"我只认一模一样的开头。"只要输入的前缀和缓存里的内容完全一致,就命中。一旦在某个字符的位置出现了偏差——哪怕只是一个空格的变化——从那个位置往后,一切都得重新计算。

这就是为什么在 Anthropic 的经验里,所有设计都围绕一个约束展开:不要改指令,不要动工具。

---

四、Claude Code 的七条经验

现在让我带你走进 Claude Code 的实战设计,看看工程师们为了保住这个"前缀"不变,动用了多少巧思。

经验一:系统指令别乱改

很多开发者会犯一个直觉性的错误:想让模型切换模式(比如从"执行模式"切到"规划模式"),就直接改系统指令。改了系统指令,前缀就变了,缓存就失效了。

Anthropic 的做法聪明得多。Claude Code 有两个特殊工具——"进入规划"和"退出规划"。系统指令始终不变,放在缓存前缀里。约束通过在对话流中插入系统消息来传达:"现在进入规划模式,你只能思考不能执行。"系统指令固定不动,工具集始终在那里,缓存始终有效。

更妙的是,模型还能自己判断什么时候该进规划模式。它不需要等外部指令,自己就能决定。这种方式的优雅之处在于:流动的对话消息不影响静态的缓存前缀

经验二:别中途换工具

Claude Code 可能接几十个外部工具。一个直觉的做法是按需加载:需要代码搜索时加载代码搜索工具,需要终端时加载终端工具。但问题是——每加减一个工具,前缀里的工具定义列表就变了,缓存就废了。

折中方案叫延迟加载(Lazy Loading)。一开始,系统只给模型看一套轻量的"占位符"——就像图书馆的书目索引,只列书名,不含书的完整内容。模型真要用某个工具时,再通过一个特殊的"工具搜索"工具去拉取完整的定义。

前缀里永远只有占位符,永远不会因为工具调用而变动。缓存稳如磐石。

这个比喻很漂亮:你不需要把整个图书馆搬进你家里,你只需要一张图书馆的索引卡。真正要看哪本书的时候,再按索引去找。

经验三:子任务要独立出去

有时候,Claude Code 需要派一个小模型去干脏活累活——比如搜索代码库里的某个函数。直觉的做法是让主模型自己跑。但问题是,子任务会带回大量中间输出,污染主对话,缓存前缀会变长,命中率会下降。

更好的做法是账号隔离。主模型写一段任务交接说明,交给子任务去执行。子任务有自己的独立缓存,不会污染主对话。做完之后,只把结果传回来,干净利落。

这里还有一个容易被忽略的风险:账号池混用。如果多个用户共享同一个API账号池,每个人的输入前缀都不一样,命中率会被稀释到极低。极端情况下,一个账号因为命中率太低,会被平台直接封禁。这不是开玩笑——"把号搞没"在 Anthropic 内部是真实发生过的教训。

经验四:压缩历史时要"安全分叉"

长对话有一个绕不开的问题:窗口满了怎么办?

大语言模型有上下文长度限制(比如20万token)。聊得多了,历史消息塞不下,就得压缩——把前面几十轮对话摘要成一段精简的总结,腾出空间继续聊。

朴素的压缩做法是另起一个新请求:用不同的系统指令,不带任何工具定义,把历史丢给模型去压缩。但这个做法有两个致命问题:

第一,新的系统指令和工具定义跟主对话完全不同,从第一个字开始就匹配不上主对话的缓存,两条缓存链从此分道扬镳,互不共享。

第二,因为没有命中缓存,整个压缩请求都要按无缓存的完整价格付费。对话越长,摘要越长,亏的钱越多。

Anthropic 的方案叫做Cache-Safe Forking(缓存安全分叉)。压缩请求必须跟主对话共享完全一致的前缀:同样的系统指令、同样的用户上下文、同样的工具定义。然后把主对话的历史消息带进来,末尾追加一条新的用户消息——"请帮我把上述对话压缩成摘要"。

从后台视角看,这个请求和上次请求几乎一模一样,前缀缓存直接复用。新增的成本只有最后那条压缩指令。而且工程师们还预留了压缩缓冲区,确保不会因为压缩请求本身就把窗口撑爆。

这就像你在图书馆查资料,不需要每次都重新从大门走进来、重新拿读者卡、重新找书架。你只需要走到上次停下的那排书架前,翻到新的一页。

---

五、回到本质:前缀匹配决定一切

让我把这些碎片拼成一幅完整的图。

提示词缓存的底层机制极其简单:前缀匹配。如果你的输入和缓存的开头完全一致,命中;哪怕差一个字,从那个位置开始全部重算。

这个简单到近乎粗暴的规则,决定了所有上层设计的走向:

1. 用消息代替指令修改。不要改系统指令,改对话消息。消息是流动的,不影响前缀。 2. 不要中途切换工具或模型。工具定义和模型版本都是前缀的一部分,一动全动。 3. 像监控在线率一样监控缓存命中率。命中率是基础设施,不是可选项。 4. 分叉操作必须共享主对话前缀。压缩、子任务、回溯——只要复用前缀,就能复用缓存。

每一条经验的背后,都是前缀匹配这个"硬约束"在发号施令。你不需要去记这七条规则,你只需要理解一件事:缓存只认一模一样的开头。剩下的一切设计选择,都是这个约束的自然推论。

---

六、一场关于"记忆"的革命

写到这里,我想把视角拉远一点。

提示词缓存表面上是一个省钱的技术——省90%的成本,谁不爱呢?但它真正重要的意义,在于它让长对话成为可能

没有这个技术,AI编程助手不可能在大型代码库里工作几十轮。没有这个技术,AI不可能在保持上下文的连续性和深度的同时,以普通人负担得起的价格运行。没有这个技术,所谓的"智能体"、"深度研究"都只能是玩具级别的演示。

它解决的其实是一个古老的计算问题:如何在对过去保持记忆的同时,高效地处理新的输入。人类有短期记忆和长期记忆,有海马体和皮层。AI在上下文窗口里只能依赖一种记忆——而提示词缓存,就是在为这种记忆安装一个"缓存层"。

当AI学会了"记笔记",它不再是一个每次都要从零开始的笨蛋图书管理员。它学会了在书页里夹书签,学会了在笔记本上写摘要,学会了在翻开一本厚书之前先看一眼目录。

这些行为本质上和人类读书时的习惯没有区别。我们之所以觉得它们"聪明",不是因为它们复杂,而是因为它们符合一个最基本的经济学原理:不要把力气花在已经解决过的问题上。

---

七、写在最后

下次你和AI进行一段长长的对话——十几轮、甚至几十轮——你可以想象一下后台正在发生的事。

你的每一个新消息,模型都在做一个判断:"这段话的开头,和之前记过的笔记一样吗?"如果一样,它微笑着翻开笔记本;如果不一样,它叹了口气,重新打开那本书,从第一页开始读。

而这个判断,决定了你的等待时间、你的账单金额,以及这段对话能走多远。

所以,当有人问你"提示词缓存到底是什么",你可以很简单地回答:

它就是AI的笔记本。它让AI不再每次都要从头开始,也让你的长对话不再那么贵。

---

来源 commit: 515b759 项目: easy-learn-ai

#easy-learn-ai #每日更新 #记忆 #小凯

👍 1
💬 讨论回复 (0)
推荐

🌟 智谱 GLM-5 已上线

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

🎁 领取 2000万 Tokens