你有没有想过,像 Claude Code 这样的 AI 编程助手,每次跟你对话时,到底要花多少钱?
答案可能会吓你一跳。一个普通的编程任务,AI 需要来回对话几十轮,每轮都要处理几万甚至几十万个 token。如果每次都"从头算起",光 API 费用就能让钱包哭泣。
但 Anthropic 的工程师们找到了一个绝妙的解决方案——Prompt Caching(提示缓存)。最近,Anthropic 工程师 Thariq 在推特上分享了一条炸裂的消息:
"Prompt Caching 是 Claude Code 能够存在的根本原因。它让我们可以复用之前对话轮次的计算结果,大幅降低延迟和成本。"
更夸张的是,Claude Code 团队把缓存命中率当作核心运维指标来监控——如果命中率掉了,他们会当作生产事故(SEV)来处理。
这到底是什么黑科技?今天我们来好好聊聊。
一句话解释:什么是 Prompt Caching?
想象你去一家餐厅点餐。每次你都要把完整的菜单读一遍,然后告诉服务员你要什么。Prompt Caching 就像是服务员记住了你之前读过的菜单内容——下次你只需要说"跟上次一样,但把甜点换成提拉米苏"就行了。
技术上说,Prompt Caching 通过"前缀匹配"的方式工作:API 会缓存从请求开头到每个缓存断点之间的所有内容。当下一次请求的前缀跟之前一样时,系统直接复用已有的计算结果,不需要重新处理。
这带来了两个巨大的好处:
- 成本直降 90%:缓存读取只需要正常输入价格的 10%
- 速度飞快:跳过了大量重复计算,延迟大幅降低
为什么对 AI 编程工具特别重要?
Claude Code 这类 AI 编程助手有一个特点:对话特别长。
一个完整的编程任务可能涉及几十轮对话,每轮都要带上完整的系统提示词、工具定义、项目上下文和历史对话。根据实测数据,一个任务跑下来可能要调用 92 次大模型,消耗约 200 万个输入 token。
如果不用缓存,按 Claude Sonnet 的价格(6。但用了 Prompt Caching 之后呢?
- 缓存命中率达到 92%
- 实际成本只需要 $1.15 左右
- 省下了约 81% 的费用
这不是小数目。对于每天处理成千上万次编程任务的平台来说,Prompt Caching 直接决定了商业模式能不能跑通。
Claude Code 的五大缓存设计秘诀
Thariq 在帖子中分享了多条宝贵的工程经验。这些经验不仅对 Anthropic 内部有用,对所有基于大模型构建产品的开发者都极有参考价值。
秘诀一:内容顺序决定一切
Prompt Caching 是基于前缀匹配的,这意味着你把什么东西放在前面,直接影响缓存效果。
Claude Code 的请求结构遵循严格的层级顺序:
- 工具定义(tools)——最稳定,几乎不变
- 系统提示词(system)——偶尔更新
- 项目上下文——每个项目不同
- 对话历史(messages)——每轮都在增长
把最稳定的内容放在最前面,变化最频繁的放在最后面。这样,即使对话历史在不断增长,前面的工具定义和系统提示词依然可以命中缓存。
秘诀二:千万别在对话中途换工具
这条经验价值千金。
Thariq 明确说了:"在对话中途更改工具集,是人们破坏缓存的最常见方式。"
因为工具定义是缓存前缀的一部分。一旦你添加或删除一个工具,整个对话的缓存全部失效。这就像你在一本已经读了一半的书里突然插入了一页新纸——后面所有的页码都乱了。
Claude Code 的解决方案非常巧妙:根本不切换工具集。所有工具始终保留在请求中,Plan 模式不是通过"拿掉编辑工具"来实现的,而是通过 EnterPlanMode 和 ExitPlanMode 这两个工具来控制。模型收到一条系统消息说明当前处于什么模式,但工具列表保持不变。
秘诀三:用"懒加载"管理大量 MCP 工具
Claude Code 支持用户安装各种 MCP(Model Context Protocol)工具插件。工具一多,工具定义本身就会占用大量 token,而且经常变化。
怎么办?Claude Code 发明了一种"延迟加载"机制:
- 只发送轻量级的工具存根(stub),包含工具名称和一个 defer_loading: true 标记
- 模型可以通过一个叫 ToolSearch 的工具来"发现"需要的工具
- 只有模型真正选择使用某个工具时,才加载完整的工具定义
这样,缓存前缀保持稳定,不会因为用户装了个新插件就全部失效。
秘诀四:不要在对话中途更新系统提示词
有时候系统提示词里的信息过时了,你可能很想直接更新它。但这样做的代价是:整个缓存失效。
Claude Code 的做法是:保持系统提示词不变,把更新的信息作为下一轮对话中的一条系统消息插入。这样,系统提示词的缓存依然有效,新信息则作为对话历史的一部分被处理。
秘诀五:子代理共享父级缓存前缀
Claude Code 的架构不是单一模型在干活。它使用了多层代理:
- 主代理:18 个工具,2 万+ token 的系统提示词
- Explore 子代理:并行搜索代码库的不同区域
- Plan 子代理:设计实现策略
- 提取子代理:处理特定任务
关键在于,子代理在执行任务时,会尽量共享父代理的缓存前缀。这意味着主代理已经缓存的系统提示词和工具定义,子代理可以直接复用,不需要重新处理。
从实测数据来看,不同阶段的缓存复用率差异明显:
- 预热阶段:0.22%(冷启动,正常)
- 探索阶段:92.06%
- 规划阶段:93.23%
- 执行阶段:97.83%
预热阶段的几次调用是故意为之——它们把工具定义和子代理提示词提前加载到缓存中,为后续的高效执行铺路。
普通开发者怎么用好 Prompt Caching?
如果你在用 Claude API 构建自己的应用,这里是几条实用建议:
最简单的方式:自动缓存
只需在请求中加一个字段:
"cache_control": {"type": "ephemeral"}
系统会自动把最后一个可缓存的内容块作为断点,随着对话增长自动管理缓存。
进阶用法:手动设置断点
最多可以设置 4 个缓存断点,适合以下场景:
- 工具定义(很少变)单独缓存
- 系统指令(偶尔变)单独缓存
- RAG 文档(每天变)单独缓存
- 对话历史(每轮变)自动管理
注意最低缓存门槛
不同模型有最低 token 数要求。Claude Sonnet 系列最低 1024 token,Claude Opus 最低 4096 token。太短的提示词无法被缓存。
关于缓存定价
- 缓存写入:基础输入价格的 1.25 倍(5 分钟有效)
- 缓存读取:基础输入价格的 0.1 倍
- 1 小时缓存:写入价格为基础价格的 2 倍
举个例子,用 Claude Sonnet 4.6($3/百万 token):
- 正常输入:$3
- 缓存写入:$3.75
- 缓存读取:$0.30
只要缓存命中率超过 50%,你就已经在省钱了。
这意味着什么?
Prompt Caching 不只是一个"省钱小技巧"。从 Claude Code 的实践来看,它是整个产品架构的基石。
Thariq 的原话是:"我们整个工程体系都围绕 Prompt Caching 来构建。"缓存命中率高了,成本降了,就能给订阅用户提供更宽松的使用额度。这是一个正向循环。
对于正在构建 AI 应用的开发者来说,这个信号很明确:缓存不是可选的优化项,而是必须从第一天就考虑的核心架构决策。把静态内容放前面,动态内容放后面,不要在对话中途改变工具集,善用子代理共享缓存——这些原则看似简单,但做到了就能省下 80% 以上的成本。
在 AI 应用的竞争中,谁能把基础设施成本压到最低,谁就能在价格和用户体验上赢得优势。Prompt Caching,就是那个"小杠杆撬动大支点"的关键技术。
Anthropic 官方 Prompt Caching 文档:platform.claude.com/docs/en/bui…
Thariq 原帖:x.com/trq212/stat…
往期推荐:
- claude code skills
- AI时代的产品经理
- AI编程效率提升
- Claude code全系列从小白到专家
- 技术趋势与行业观察
- AI大模型热点追踪
- clawdbot实战与玩法
- 飞书社群开源知识库:my.feishu.cn/wiki/PFJswU…
今天的文章就到这里啦,如果觉得不错,可以点个赞、在看、转发,三连支持我~
扫描下方图片中我的微信二维码备注"进群",拉你进社群一起交流学习!