Prompt 缓存,一次讲明白
每当一个 AI Agent 往前走一步它其实都在交一笔税。它会重新读取所有内容。系统提示词。 工具定义。 项目上下文。 三轮前已经加载过的内容。每一轮都重新读一遍。这就是context tax。对长时间运行的 Agent 工作流来说它往往是整个 AI 基础设施里最贵的一项开销。算一下就很直观一个 20,000 token 的 system prompt如果跑 50 轮就等于 100 万 token 的重复计算。你为它付了钱但它没有创造任何新价值。解决办法就是prompt caching。但想真正用好它你得先知道底层到底发生了什么。先分清什么会变什么不会变优化 prompt caching 之前先要看懂一个 Agent 的上下文结构。每次请求里其实都有两部分。第一部分是static prefix。它包括系统指令、工具定义、项目上下文、行为规范。这些内容在同一个 session 里基本不变。第二部分是dynamic tail。它包括用户消息、工具输出、终端观察结果。这部分每次请求都不同并且会随着对话推进不断增长。这个区别非常关键。真正被反复浪费计算的是 static prefix。 真正需要重新计算的只有 dynamic tail。Prompt caching 的作用就是把 static prefix 的数学状态缓存下来。后续请求如果前缀一样就不用再重新计算直接从缓存读取。你只需要为这部分前缀处理付一次钱。后面每一轮都相当于从内存里读。为什么它有效要理解 prompt caching得先知道模型读 prompt 时做了什么。一次 LLM 推理大致有两个阶段。分享一个正版GPT5.5 目前 0.2 倍率, https://api.aidazhi.com/注册后把用户名发到私信里面即可帮领 5 美元测试额度。阶段1Prefill模型会处理完整输入 prompt。这是最慢、最贵的部分。因为它要对上下文里的每个 token 做大量矩阵计算读取所有内容并建立内部表示。这一步是 compute-bound也就是主要受计算量限制。阶段2Decode模型开始一个 token 一个 token 地生成输出。这一步更偏 memory-bound。因为模型主要是在读取之前算好的状态而不是反复做重计算。在 prefill 阶段Transformer 会为每个 token 生成三个向量Query、Key、Value。注意关键点Key 和 Value 只依赖它们之前的 token。也就是说只要某个前缀内容不变它对应的 Key-Value 张量就不需要重新算。没有缓存时请求结束后这些 Key-Value 张量会被扔掉。下一次请求来了又要把同样的 20,000 token 从头算一遍。KV caching 就是把这些张量存起来。基础设施会根据输入文本的加密哈希来索引它们。下一次请求如果前缀相同哈希匹配就能直接取回张量跳过重复计算。这会把重复前缀带来的计算成本大幅压下去。对一个 20,000 token 前缀、重复 50 轮的工作流来说节省非常可观。经济账怎么算Prompt caching 真正重要是因为它直接改变成本结构。以 Anthropic 的定价逻辑为例有三点要记住Cache read 大约是基础输入价格的 10%相当于缓存读取 token 打 1 折。 Cache write 比基础输入价格贵 25%因为要存储 KV 张量。 1 小时扩展缓存大约是基础价格的 2 倍。所以缓存不是永远自动划算。它成立的前提是cache hit rate 要足够高。这也是 Claude Code 的重点。Claude Code30分钟会话怎么省钱Claude Code 的设计目标很清楚让缓存一直保持热的。看一个典型 30 分钟编码 session。第0分钟Session 开始Claude Code 会加载 system prompt、工具定义还会读取项目根目录里的CLAUDE.md了解代码库和约定。这部分经常超过 20,000 token。这是整个 session 最贵的一刻因为所有 token 都是新的。但好消息是这笔钱只付一次。第1到5分钟第一次指令你输入“看一下 auth 模块给我一些改进建议。”Claude Code 会派出 Explore Subagent。它会浏览代码库、打开文件、执行 grep、理解相关代码。这些新内容会被追加到 dynamic tail。但那 20,000 token 的静态基础上下文已经进缓存了。后续每轮都可以按缓存读取价格来算。第6到15分钟深入工作Plan Subagent 拿到 Explore Subagent 的发现。Claude Code 不会把原始结果全量塞过去因为那会让 dynamic tail 暴涨。它会传递简洁总结让后缀保持可控。Planner 生成实施计划你审核后批准然后 Claude Code 开始修改代码。这个循环里的每一轮都会从缓存读取那 20,000 token 的前缀。而每一次 cache hit都会刷新 TTL让缓存继续保持热状态。第16到25分钟迭代修改你要求调整。Claude Code 修改方案。更多工具调用更多终端输出。dynamic tail 在增长但它代表的是这个 session 里真正新增的内容。此时总处理 token 可能已经达到几十万。但基础的 20,000 token一直是在缓存里反复读取。第28分钟查看成本如果没有缓存这种 session 很容易超过 200 万 token。按 Sonnet 4.5 价格大概会到 6 美元左右。有缓存后大量 token 都以低价 cache read 计费只有新的 dynamic tail 需要新计算。实际中单个任务能看到 80% 以上成本下降。如果再乘以每天所有用户、所有 session这就是巨大的基础设施成本差距。最容易踩坑的规则Prompt caching 最反直觉的地方是1 2 3。但2 1是 cache miss。为什么因为缓存匹配靠 prompt 的哈希。只要顺序变了哪怕内容一样哈希也会变。哈希一变缓存就对不上整个前缀要重新计算。所以要记住三条规则。第一不要在 session 中途增删工具。工具定义属于缓存前缀。你改了工具后面的缓存基本就废了。第二不要中途切换模型。缓存是和模型绑定的。你换成更便宜的模型也要重建整段缓存。第三不要通过修改 prefix 来改变状态。Claude Code 的做法是把状态提醒加到下一条用户消息里而不是改系统前缀。这样 prefix 不变缓存还能继续命中。你自己做 Agent 时怎么用如果你在做自己的 Agent结构可以这样安排最顶部放 system instructions 和规则。中途不要改。 提前加载所有需要用到的 tools不要临时增删。 然后放检索到的上下文和文档在 session 内尽量保持稳定。 底部放对话历史和工具输出。开启 auto-caching 后缓存断点会随着对话推进自动前移。Anthropic 已经在 API 里加入 auto-caching所以你也可以为自己的 Agent 使用类似方式。没有 auto-caching 时你需要自己记住 token 边界。边界错了就吃不到缓存。如果需要为了上下文限制做压缩也要用 cache-safe forking。也就是保持相同 system prompt、tools 和 conversation然后把 compaction 作为一条新消息追加进去。这样压缩请求看起来几乎和上一轮一样缓存前缀还能继续复用。真正按新 token 计费的只有那条压缩指令。怎么判断缓存有没有生效看 API 响应里的三个字段cache_creation_input_tokens写入缓存的 token。cache_read_input_tokens从缓存读取的 token。input_tokens正常处理的输入 token。你的缓存效率可以看 read tokens 和 creation tokens 的比例。这个指标应该像 uptime 一样持续监控。因为它直接影响成本。关键结论Prompt caching 不是一个“打开就完事”的功能。它是一种架构纪律。Claude Code 是一个很好的例子通过让前缀稳定、工具稳定、上下文结构稳定它能把 cache hit rate 做到 92%成本降低 81%。如果你在做 Agent这就是蓝图。Context tax 一定存在。区别只在于你是一直为它付钱还是从架构上把它消掉。最后精通 React 面试从零到中高级(针对面试回答)CSS终极指南Vue 设计模式实战指南20个前端开发者必备的响应式布局深入React:从基础到最佳实践完整攻略python 技巧精讲React Hook 深入浅出CSS技巧与案例详解vue2与vue3技巧合集
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2633501.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!