Claude Code 工程师自曝:Prompt Caching 即一切

本文由 AI 自动摘录整理,原始链接:深度丨Claude Code工程师自曝:Prompt Caching即一切

推荐指数:8/10(推荐读原文)

背景

Anthropic Claude Code 团队发表技术博客,公开了 prompt caching(提示词缓存)在 Claude Code 中的核心地位。文章坦承 Claude Code 能支撑数百万开发者的长会话编程体验,秘诀不是模型能力,而是围绕缓存命中率做的极致设计。这不是一篇产品宣传,而是工程团队分享的实战经验,包含大量具体的架构决策和踩坑教训。

核心观点

  • 提示词顺序即成本顺序:Prompt caching 基于纯前缀匹配,越稳定的内容越靠前、越动态的越靠后。静态系统指令 + 工具定义在最前,CLAUDE.md 其次,会话上下文次之,对话消息放末尾
  • 永远不要改系统提示词:更新系统提示词会在第一个字节就分裂缓存前缀,前面积累的缓存红利全部归零。正确做法是把变更信息塞进消息流(通过 <system-reminder> 标签),前缀毫发无损
  • 换小模型反而更贵:缓存跟着模型走,切换模型等于全价重喂整个对话历史。正确做法是用主模型整理交接摘要(hand-off message),然后派子 Agent 去执行
  • 不要中途增减工具:工具定义属于系统前缀,增减工具会让缓存全部报废。Plan Mode 的实现是不增删工具、而是用工具状态切换
  • 工具太多用延迟加载:不是删工具而是用 defer_loading 占位符,工具名和数量固定在前缀里,完整 schema 只在调用时才加载

补充要点

  • 缓存命中率被当作服务器 uptime 级别的基础设施指标,掉几个百分点就会触发 SEV 级别告警
  • 对话太长需要压缩总结时,不要新开请求,要用"cache-safe forking"——保留完全相同的前缀,追加一条总结指令
  • Anthropic 已把 cache-safe compaction 逻辑直接封装进 API,后人不必再踩坑
  • defer_loading 的设计哲学:用户看到精简工具集,但底层前缀完全静态、永远命中
  • 整个产品的设计路径是反常规的:先确保缓存能命中,再围绕这个硬约束设计功能和交互
  • 核心教训:大多数团队先选模型再堆功能最后才优化缓存,Claude Code 从第一天起就反着来