开发圈常有一句话:“缓存统治一切”(Cache Rules Everything Around Me),用以形容缓存对性能优化的重要性。对于Claude Code这类需要长时间执行任务的AI代理系统来说,这句话更像是一种设计原则。
Claude Code核心工程师Thariq Shihipar最近分享了五大心法,说明他们如何通过提示词缓存(Prompt Caching)优化系统性能,同时降低成本。他甚至透露,Claude Code团队非常重视提示词缓存,不仅持续监控,一旦发现缓存命中率下降,就会将其视为紧急系统事故(SEV)处理。
为什么长对话代理特别需要缓存?
首先,像Claude Code这样的编程型代理,往往需要长时间对话、多次调用工具,并反复读取和修改整个项目。长时间下来,对话内容可能累积数万,甚至数十万个Token。
如果每一轮对话都从头运算整段系统提示词与工具定义,成本将非常可观。因此,提示词缓存成为省钱的关键,能让那些“不会改变的部分”只计算一次即可。
心法1:前缀匹配(Prefix Match)
简单来说,提示词缓存是将模型已处理过的前半段内容的运算状态预先保存起来。只要下次请求(Request)的开头内容与之前完全一致,系统就可以直接复用已计算好的状态,无需重新推理整个模型。
其背后的核心机制就是前缀匹配(Prefix Match)——即只要请求从开头到某位置完全一致,就能命中缓存;但只要前面有任何改动,后面的内容就必须重新运算。
为尽可能减少重新运算,Claude Code开发团队遵循一个原则:越不会变动的内容,越放在前面。并据此将提示词严格分层,依次为:
最优先:固定的系统提示词(System Prompt)和工具清单
次之:项目层级规范
再次之:会话状态
最后:对话内容
其中,系统提示词是指模型在整段对话开始前收到的一段隐藏指令,用于设定角色与规则。工具则指模型可调用的功能,例如搜索文件、修改代码、执行测试、进入规划模式等,其定义(Schema)也会放在提示词的前半段。
Thariq Shihipar提醒,在系统提示词中加入当前时间,或工具顺序不固定,都可能导致整个缓存失效,这是开发团队必须避免的。
心法2:用对话消息更新状态,而不是修改系统提示词
当时间变化或文件更新时,开发者可能会去修改系统提示词,但这样做会破坏缓存前缀。
因此,Claude Code团队的做法是,将更新信息放在下一轮对话中,例如添加消息标签
心法3:不要中途切换模型
Thariq Shihipar指出,缓存通常与模型绑定。如果一段对话已在某个模型中积累了大量上下文,中途切换到另一个模型,就必须重新建立整个缓存。
结果可能是,为了省钱换模型,反而花更多钱。他建议,如果确实需要使用不同模型,应通过子代理(Sub-agent)处理,即让主模型调用一个子代理,以保持主对话的缓存前缀,而不是直接切换模型。
心法4:工具清单要固定
为确保提示词缓存不失效,工具定义也不能随意更改。
Claude Code团队采取了几个策略。首先是工具清单全程固定,即不在中途新增、移除工具,也不更改工具顺序或参数,否则整段缓存将重新计算。
其次是将“模式”作为一个工具。以规划模式(Plan Mode)为例,Claude Code并未修改系统提示词或删除某些工具来切换模式,而是直接将“进入规划模式”设计成一个工具。
也就是说,当代理需要先规划再执行时,它会主动调用EnterPlanMode工具。系统随后返回一段说明,告知模型当前已进入规划状态,例如只能浏览代码、暂时不能修改文件。规划完成后,再调用ExitPlanMode工具,回到普通模式。
在这个过程中,工具清单和系统提示词均未改变,模式的切换仅发生在对话内部。这样既保留了缓存,又让代理能自主切换模式。
第三个策略是:不通过“删除工具”来控制模型,而是借助消息、状态标记、工具本身等方式进行控制,以保持前缀稳定。
不仅如此,若模型使用大量工具(如加载十几个MCP工具),将所有完整定义都放入提示词会消耗大量Token,增加成本。因此,Claude Code团队采用延迟加载(Defer Loading)策略:先提供轻量版工具定义,仅包含工具名称(Stub)等基本信息;只有当模型决定使用某个工具时,才加载完整定义。这样既不破坏缓存,又能控制Token用量。
心法5:压缩上下文时,也要维持前缀一致
当对话超出模型的上下文窗口时,需进行摘要(Compaction)。但若为摘要而另开请求,或使用不同的系统提示词或工具设置,原有的缓存就无法复用。
因此,Claude Code团队采用“缓存安全分叉”(Cache-Safe Forking)方法,在执行摘要等额外任务时,仍使用与原对话完全一致的前缀,仅在最后追加摘要指令。这样可最大程度复用既有缓存,避免成本激增。
提示词缓存成为运营指标
Claude Code团队强调,提示词缓存不只是技术细节,更是直接影响成本、响应速度,甚至订阅方案设计的关键因素。
Thariq Shihipar坦言,缓存命中率的微小波动,都可能对整体运营带来重大影响。因此,他们将缓存命中率纳入监控指标,并在异常时立即处理。这也意味着,对开发AI代理产品的企业而言,提示词缓存不再是优化技巧,而是架构设计中不可忽视的一环。