@nateherk: https://x.com/nateherk/status/2057450555212013627
摘要
一份实用指南,解释Claude Code中的提示缓存工作原理,如何将Token成本降低90%,以及常见的破坏缓存的习惯,帮助开发者延长会话时长并降低成本。
查看缓存全文
缓存时间: 2026/05/21 21:40
Anthropic 工程师实际上如何节省令牌
本周我节省了 3 亿个令牌
一天 9100 万,一周 3 亿多。
我没有更改任何设置。这是提示缓存在后台默默工作。
但当我真正理解什么是缓存以及如何避免破坏它之后,我的会话在相同使用量下持续的时间更长。以下是在 Claude Code 中使用提示缓存的 80/20 法则,不需要深入 API 细节。
TL;DR
→ 缓存的令牌成本是普通输入的 10%。9100 万缓存按 900 万计费。
→ Claude Code 订阅 TTL 是 1 小时。API 默认是 5 分钟。子代理始终是 5 分钟。
→ 缓存存在于三层:系统、项目、对话。
→ 在会话中切换模型会破坏缓存。包括使用 “opus plan” 模式。
缓存的实际成本
每个缓存的令牌成本是普通输入令牌的 10%。
所以当我的仪表盘显示某天缓存了 9100 万,我的计费就像我只处理了 900 万。这就是长时间 Claude Code 会话感觉“免费”的原因,相比没有缓存时的成本。
仪表盘中有两个数字值得了解:
→ Cache create。将内容写入缓存的一次性成本。下一次对话就能回本。
→ Cache read。Claude 从缓存中重用的令牌(你的 CLAUDE.md、工具定义、先前的消息)。比新鲜输入便宜 10 倍。
如果你的缓存读取数字很高,你就赢了。如果很低,你就在为同一个上下文反复付费。
来自 Anthropic 的 Thariq 让我印象深刻的一句话:
“我们实际上会对提示缓存命中率进行警报,如果太低就会宣布 SEV。”
他还有一篇很棒的 X 文章:https://x.com/trq212/status/2024574133011673516?s=20
当命中率高时,会带来四件事:Claude Code 感觉更快,他们的服务成本降低,你的订阅限制感觉更宽松,长时间的编码会话仍然实用。当命中率低时,所有人都输了。
所以激励是一致的。他们希望你的命中率高,你也希望它高。唯一阻挠的是一些小的习惯,它们悄悄地重置了一切。
每轮缓存如何增长
缓存依赖于前缀匹配。不用深入细节,这基本上意味着只要在缓存点之前的内容完全相同,Claude 就可以重用缓存令牌。
一个崭新的会话实际上是这样进行的:
来自于 Claude Code 文档
1️⃣ 第一轮。还没有缓存。系统提示、你的项目上下文(CLAUDE.md、记忆、规则)以及你的第一条消息都被新鲜处理并写入缓存。
2️⃣ 第二轮。所有的第一轮现在都已缓存。Claude 只需要处理你的回复和下一条消息。便宜的轮次。
3️⃣ 第三轮。同样的情况。旧轮次保持缓存。只有新的交互是新鲜的。
缓存按三层组织:
来自 Thariq 的 X 文章
→ 系统层。基本指令、工具定义(读取、写入、bash、grep、glob)、输出风格。全局缓存。
→ 项目层。CLAUDE.md、记忆、项目规则。按项目缓存。
→ 对话。回复和消息。每轮增长。
如果系统层或项目层中的任何内容在会话中发生变化,则所有内容都必须从头重新缓存。这是昂贵的操作。想象一下你在第 16 条消息时修改了系统提示或等待了一个小时。从第 1 条消息开始的每一个令牌都必须重新处理。
1 小时与 5 分钟的困惑
这是大多数人容易被绊倒的地方。
→ Claude Code 订阅:默认 1 小时 TTL。
→ Claude API:默认 5 分钟。你可以增加到 1 小时以获得更多成本节省。
→ 任何计划下的子代理:5 分钟。始终如此。
→ Claude.ai 网页聊天:没有官方文档。可能和订阅设置相同,但我没有确认。
几个月前,当大家都在抱怨 Claude 订阅被吞噬时,人们以为 Anthropic 悄悄把 TTL 降到了 5 分钟而没有告知。结果发现他们没有。仍然是 1 小时。但是文档分散在 Claude Code 和 API 页面中,这两者有非常大的不同,这也是许多困惑的来源。
5 分钟的数字在你运行繁重的子代理工作流或直接使用 API 时才会相关。对于 95% 的 Claude Code 用户来说,只需关注 1 小时窗口。
覆盖 95% 用户的三个习惯
以下是在日常中真正有用的内容。
1️⃣ 不要暂停太久。
如果你闲置超过 1 小时,所有缓存都会失效。下一条消息会从头重建缓存。将任务移交给一个新的会话比恢复一个过时的会话更便宜。
2️⃣ 切换任务时重新开始。
/compact 或 /clear 无论如何都会破坏缓存,所以利用那一刻真正重置。
我构建了一个会话交接技能作为 /compact 的替代。它会总结我们构建的内容、未决的决策、重要的文件以及准确从哪里继续。然后我使用 /clear,粘贴总结,并像什么都没发生一样继续。
compact 命令可能也需要很长时间运行。而交接技能通常在一分钟内完成。
3️⃣ 在 Claude 聊天中使用 Projects 存放大型文档。
claude.ai 上的缓存没有详细记录,但 Projects 明显优于普通线程。如果你打算粘贴大型文档,把它们放到 Project 中,而不是直接放到对话里。
哪些操作会悄悄破坏缓存
有几件事会在没有警告的情况下重置一切。
→ 切换模型。由于前缀匹配,每个模型都有自己的缓存。下一个请求读取整个历史记录,没有任何缓存命中。
→ “Opusplan”模式。这是在计划模式中使用 Opus,执行模式中使用 Sonnet 的设置。我之前在令牌优化视频中推荐过它,原因很充分。但重要的是要理解每次计划切换都是一次模型切换,意味着每次都会重置缓存。长远来看它仍然有助于你的会话限制。只是要了解底层发生了什么。
→ 在会话中间编辑 CLAUDE.md 没关系。 编辑直到下一次重启才会生效,所以当前的缓存保持安全。
我的免费令牌仪表盘
我使用的截图来自一个令牌仪表盘。
https://github.com/nateherkai/token-dashboard
这是一个简单的 GitHub 仓库。你把链接给 Claude Code,告诉它在 localhost 上设置,它就会拉取你所有的过去会话。不是一个空白的画板。你可以从第一天开始每天看到输入、输出、缓存创建和缓存读取的数字。
一个注意事项:仪表盘跟踪的是本地设备上的令牌。如果你从台式机切换到笔记本,数字会不匹配。每台机器都有自己的数据。
总结
提示缓存是那种你可以深入钻研的东西。Thariq 的文章比我这里说得更深,如果你想要完整的画面,值得一读。
但你不需要完整的画面才能受益。你需要的只是 80/20:缓存的令牌便宜 10 倍,Claude Code 上的 TTL 是 1 小时,模型切换会破坏缓存,任务之间的干净交接胜过让会话腐烂。
相似文章
Tokenomics:Claude缓存的62.5分钟法则(8分钟阅读)
对Anthropic为Claude提供的提示缓存的成本分析得出62.5分钟的盈亏平衡规则:如果你预计在62.5分钟内再次需要缓存,请刷新它,否则让它过期以节省成本。
解释提示缓存如何在大型语言模型(LLM)中工作,以Claude为案例,详细说明Transformer的KV缓存机制以及在代理工作流中缓存静态前缀的成本效益。
解释提示缓存如何在大型语言模型(LLM)中工作,以Claude为案例,详细说明Transformer的KV缓存机制以及在代理工作流中缓存静态前缀的成本效益。
为什么感觉大型LLM提供商在故意隐藏提示缓存?
一篇文章讨论提示缓存如何大幅降低LLM API成本,指出提供商对此解释不足,并提供一个简单的规则来构建提示以获得最大缓存命中率。
提示缓存真的能为AI代理节省可观成本吗?
一个实践性讨论,质疑提示缓存是否能为生产环境中的AI代理带来有意义的成本节约,审视了现实因素如缓存命中率、路由策略和规模。
我如何在长时间智能体运行中轻松减少约90%的输入token消耗
作者分享了一个实用技巧,通过提示缓存(prompt caching)在长时间智能体运行中将输入token成本降低约90%:将不变文本(系统提示、工具定义、上下文)放在每个提示的开头,以利用LLM提供商的缓存前缀。