编码代理的提示缓存:能省多少,何时失效

编码代理每次请求都重发完整上下文,提示缓存让重复内容不必每次按原价计费。但它也很脆弱:开头附近只改一个字节,下一轮就可能重新支付全部成本。

代理会话中的每一步都是新的 API 请求,包括你发出的每条消息,以及代理送回的每批工具结果。模型不会在请求之间保留记忆,因此代理重发全部内容:系统提示、工具定义、项目指令、整段对话,最后才是新内容。大部分都与上次请求相同,提供方通过提示缓存避免重复处理。

Claude Code 会替你管理缓存;直接使用 API 时,一个顶层 cache_control 字段即可开启自动缓存。Codex CLI 使用的 OpenAI 模型也遵循前缀规则,但价格和有效期不同。下文的数字都是 Claude 的。

固定顺序中的精确前缀

缓存把每次请求的开头,也就是前缀,与近期处理过的内容比较。匹配必须完全一致:改动一个字符,它之后的所有内容都会失效。缓存不是按文件或章节分别建立的。

前缀按固定顺序读取:工具定义、系统提示,再到消息。某一层改变,会使该层及其后的内容失效。修改一条消息,工具和系统提示仍可缓存;修改工具定义,后面的缓存全部失效。

Claude Code 把很少变化的内容放在前面:自身指令和工具定义,然后是你的项目上下文(CLAUDE.md、记忆、规则),最后是对话。普通一轮中,上次请求的全部内容都能构成前缀,只有最新往返是新内容。

缓存写入和读取各花多少

缓存改变的是输入价格,不是回答。以 2026 年 9 月为准,Anthropic 按各模型的基本输入价格计算:有效期五分钟的缓存写入为 1.25 倍,一小时为 2 倍;读取为十分之一,但 Claude Fable 5.1 是 0.025 倍、Claude Opus 5.5 是 0.05 倍。最后一个缓存点之后的内容按普通输入计费。

模型输入输出缓存读取缓存写入 5 分钟缓存写入 1 小时上下文
Claude Haiku 4.51.005.000.101.252.00200,000
Claude Sonnet 52.0010.000.202.504.001,000,000
Claude Sonnet 4.63.0015.000.303.756.001,000,000
Claude Opus 4.65.0025.000.506.2510.001,000,000
Claude Opus 4.75.0025.000.506.2510.001,000,000
Claude Opus 4.85.0025.000.506.2510.001,000,000
Claude Opus 55.0025.000.506.2510.001,000,000
Claude Opus 5.54.0020.000.205.008.001,000,000
Claude Fable 510.0050.001.0012.5020.001,000,000
Claude Fable 5.110.0050.000.2512.5020.001,000,000
Anthropic Claude API 的公开标价,单位为每百万 token 的美元,核对日期:2026年9月23日。

以 2026 年 9 月 Claude Sonnet 5 每百万输入 token 2 美元的标价,计算一段 100,000 token 的上下文。从缓存读取,每次请求花 0.02 美元;不使用缓存为 0.20 美元;未命中后重新写入,五分钟有效期为 0.25 美元,一小时为 0.40 美元。一次未命中比完全不用缓存还贵,因为写入价格高于普通输入。

按五分钟价格计算,多数模型重写一次相当于读取 12.5 次;Opus 5.5 是 25 次,Fable 5.1 是 50 次。读取越便宜,差距越大。五分钟缓存只要读取一次就能回本;一小时缓存需要读取两次。

五分钟还是一小时

有效期,也称 TTL,是缓存前缀在无人使用时能保留多久;每次读取都会免费重置计时器。计时从请求开始时算,不是从回答结束时算:如果回答流式输出持续四分钟,下一次请求只有约一分钟可复用五分钟缓存。

以 2026 年 9 月为准,Claude Code 在订阅套餐所含用量内,为主对话提供一小时缓存;使用 API 密钥、云服务提供商,或订阅转而消耗用量积分时,为五分钟。不论哪种方式,子代理默认都是五分钟。

要为主对话选择,可在设置中使用 promptCacheTtl,或把 CLAUDE_CODE_PROMPT_CACHE_TTL 环境变量设为 5m 或 1h(需要 Claude Code v2.1.242 或更新版本)。请求间隔在五至六十分钟之间时,一小时通常划算,例如开会、审查,或等待长时间构建。若请求总在五分钟内连续发出,一小时只会提高每次写入的成本。

claude -p "hello" --output-format json

查看写入采用的有效期:usage.cache_creation 中,一小时写入列在 ephemeral_1h_input_tokens,五分钟列在 ephemeral_5m_input_tokens。

哪些变化会悄悄破坏缓存

缓存未命中不会报错,只是该轮更慢,用量中本应是读取的地方出现大量写入。编码代理中的常见原因有:

  • 切换模型。每个模型有自己的缓存,任务中途使用 /model 会以未缓存方式重读整段历史。指定另一模型的技能,以及在 Opus 与 Sonnet 间切换的 opusplan 规划模式,也一样。
  • 改变推理强度。多数模型的每个强度级别有独立缓存。以 2026 年 9 月为准,使用 API 密钥或 Claude 订阅时,Opus 5.5 和 Fable 5.1 可保留缓存。
  • 改变工具集合。工具定义排在最前面,增删一个都会使后面的内容失效。Claude Code 默认通过工具搜索按需加载 MCP 工具,使服务器变化留在前缀之外。若改为预先加载,例如经由自定义 ANTHROPIC_BASE_URL 网关,MCP 服务器自行崩溃或重连也会破坏缓存。
  • 提示开头的任何变化。系统提示中的时间戳会让其后内容每次请求都重写,永远无法从缓存读取。Claude Code 升级通常也会改变系统提示,所以升级后的首次会话从冷缓存开始。
  • 暂停超过有效期:API 密钥默认五分钟,订阅默认一小时。

为什么休息后的第一轮更贵

未命中的成本会在下一次请求中支付一次:整个前缀重新处理,并按写入价格放回缓存;之后的请求又可从缓存读取。因此,即使休息后第一条消息只有一行,也会更慢、更贵。

压缩按设计会造成一次未命中,但缓存仍有效时成本较低,因为摘要请求能从缓存读取历史。休息很久后,它要按未缓存输入重新读取整段历史,所以刚回到会话就压缩尤其贵。

相应的习惯是:开始时选定模型和推理强度,离开前完成当前任务;主题变化时用 /clear,不要恢复冷却已久的会话。若要丢掉一条走错的路线,/rewind 比压缩合适:它截回已经缓存的前缀。Pro 和 Max 套餐下,Claude Code 还可在长时间离开后,提议从摘要恢复大型会话。

如何看缓存命中率

API 每次响应报告三个输入计数:cache_read_input_tokens 是从缓存读取的量;cache_creation_input_tokens 是写入量;input_tokens 只统计最后一个缓存点之后的内容,因此在缓存良好的会话中看起来很小。总输入是三者之和。

命中率是缓存读取量除以总输入。长期保持缓存有效的会话,每次请求大部分输入都应为读取。短会话中低命中率正常,因为首次写入占总输入很大比例;长会话每轮都大量写入,则应检查上面列出的原因。

/usage

Claude Code v2.1.251 起,Prompt cache (main) 一行显示从缓存读取的输入比例、未命中次数,以及缓存是否仍有效。

从 v2.1.260 起,如果能判断原因,该行也会指出上次未命中的可能原因,例如工具定义改变。它只覆盖主对话:子代理有自己的提示和工具,首次请求无法读取父会话的缓存。API 用户可在 Console 的 Usage 页面查看缓存读取比例图表;截至 2026 年 9 月仍处于 beta 的缓存诊断功能,还会报告连续两次请求从哪里开始出现差异。

订阅与 API:谁承担未命中成本

使用 API 密钥时,未命中会按表中价格花钱,也会消耗速率上限余量。对多数 Claude 模型,缓存读取不计入每分钟输入 token 上限,写入和未缓存输入则计入。

Pro 或 Max 套餐没有逐 token 账单,/usage 中的美元金额是给 API 用户参考的估算。未命中改为消耗套餐上限。Claude Code 文档将缓存未命中列为长会话用量高于直觉的原因之一。Pro、Max、Team 和 Enterprise 套餐中,若未命中达到近期用量的十分之一,/usage 明细会给出提示。

缓存 token 仍然是 token

即使价格只有十分之一,每次请求仍会读取整段上下文。Claude Code 文档也指出,一段开了一整天的会话,即使只问一行,仍会为整段对话消耗用量。因此要同时做到两点:保持提示前端稳定以便缓存,并缩小上下文,让每次读取和未命中的成本都更低。

若不想手动维持较小上下文,capsul 可驱动你已经登录的代理 CLI,在你设定的 token 预算内发送任务所需内容。达到预算就停止,并告知未纳入的内容。基准测试页逐模型公布测量效果,同时列出答案检查结果。

常见问题

Claude Code 会自动使用提示缓存吗?

会。除非用 DISABLE_PROMPT_CACHING 环境变量将其关闭,否则 Claude Code 会自动管理提示缓存,并把较少变化的内容放在请求前面。以 2026 年 9 月为准,订阅套餐所含用量中的主对话使用一小时缓存;使用 API 密钥或云服务提供商时为五分钟。

Claude 的提示缓存有效期是 5 分钟还是 1 小时?

两种都有。API 默认五分钟;每次读取都会免费重置计时器。一小时有效期让每次写入从基本输入价格的 1.25 倍升到 2 倍。以 2026 年 9 月为准,Claude Code 在订阅主对话中默认用一小时,使用 API 密钥时用五分钟,除非你设置 promptCacheTtl。请求间隔超过五分钟时,一小时有效期才可能划算。

Claude 缓存读取 token 要多少钱?

以 2026 年 9 月为准,缓存读取通常是模型基本输入价格的十分之一,但 Claude Fable 5.1 是 0.025 倍,Claude Opus 5.5 是 0.05 倍。Claude Sonnet 5 每百万缓存读取 token 为 0.20 美元,未缓存输入为 2 美元。缓存写入比普通输入贵,因此只有后来发生读取,缓存才会省钱。

为什么我的提示缓存命中率低?

通常是提示开头的内容不断变化,或两次请求间隔超过缓存有效期。编码代理中常见原因包括会话中途切换模型或推理强度、工具定义变化、系统提示带时间戳,以及 API 密钥模式下暂停超过五分钟。短会话的命中率也天然偏低,因为首次写入占总输入比例很大。Claude Code 的 /usage 会统计未命中次数,v2.1.260 起还会尽可能指出最近一次的原因。

编辑 CLAUDE.md 会破坏提示缓存吗?

在 Claude Code 会话中途不会。项目根目录和用户级 CLAUDE.md 只在会话开始时读取一次,因此编辑既不会立即使缓存失效,也不会在下次 /clear、/compact 或重启前生效。子目录中的嵌套 CLAUDE.md 会在 Claude 首次读取该目录中的文件时才加载。

$ npm i -g @penra/capsul

← 全部指南