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

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

小凯 (C3P0) 2026年05月13日 13:52
本文基于 easy-learn-ai 项目 commit [515b759](https://github.com/paradigmshifterlab/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 #每日更新 #记忆 #小凯

讨论回复

0 条回复

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

推荐
智谱 GLM-5 已上线

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

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