Prompt Caching CC 背后的省钱神器,让 AI 编程成本暴降 90%

0 阅读3分钟

你有没有想过,像 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 的价格(3/百万token),光输入就要3/百万 token),光输入就要 6。但用了 Prompt Caching 之后呢?

  • 缓存命中率达到 92%
  • 实际成本只需要 $1.15 左右
  • 省下了约 81% 的费用

这不是小数目。对于每天处理成千上万次编程任务的平台来说,Prompt Caching 直接决定了商业模式能不能跑通。

Claude Code 的五大缓存设计秘诀

Thariq 在帖子中分享了多条宝贵的工程经验。这些经验不仅对 Anthropic 内部有用,对所有基于大模型构建产品的开发者都极有参考价值。

秘诀一:内容顺序决定一切

Prompt Caching 是基于前缀匹配的,这意味着你把什么东西放在前面,直接影响缓存效果。

Claude Code 的请求结构遵循严格的层级顺序:

  1. 工具定义(tools)——最稳定,几乎不变
  2. 系统提示词(system)——偶尔更新
  3. 项目上下文——每个项目不同
  4. 对话历史(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…


往期推荐:

今天的文章就到这里啦,如果觉得不错,可以点个赞、在看、转发,三连支持我~

扫描下方图片中我的微信二维码备注"进群",拉你进社群一起交流学习!