第十七章 把动态变量挪到提示词末尾
双人漫谈:ClaudeCode

第十七章 把动态变量挪到提示词末尾

6分钟 77 1个月前
主播
节目简介
来源:小宇宙
本章立足于前两章建立的缓存架构与检测能力,从“进攻”的角度展示了 Claude Code 如何通过 7 个以上的命名优化模式,从源头消除或减少缓存中断(Cache Break),从而实现极致的成本节约。
以下是该章节的核心内容总结:
1. 七大核心缓存优化模式
这些模式遵循共同的框架:识别变化源 → 理解变化本质 → 将动态变为静态。
* 模式一:日期记忆化 (getSessionStartDate)
* 问题:系统提示词包含当前日期,午夜跨天时一个字符的变化会击穿约 11,000 tokens 的缓存。
* 优化:在会话首次调用时捕获日期并进行记忆化(Memoize),此后无论实际日期如何变化,该会话内日期始终保持一致。
* 模式二:月度粒度 (getLocalMonthYear)
* 优化:在工具提示词中,将时间精度从“日”降低到“月”(如 "April 2026"),将缓存失效频率从每日降低到每月。
* 模式三:Agent 列表附件化
* 问题:动态的 Agent 列表嵌入在工具描述中,其变化会导致整个工具 Schema 缓存失效,贡献了 10.2% 的全量缓存创建成本。
* 优化:将动态列表移至消息附件(Attachment)。由于附件位于消息尾部,其变化不会影响前缀缓存。
* 模式四:技能列表预算 (1% Context Window)
* 优化:将技能列表体积硬性限制在上下文窗口的 1%。通过预算裁剪减少列表抖动,实现“预算即稳定”。
* 模式五:$TMPDIR 占位符
* 问题:不同用户的临时目录路径包含唯一的 UID,阻碍了跨用户的全局缓存命中。
* 优化:将绝对路径替换为 $TMPDIR 占位符,使提示词在所有用户之间逐字节一致。
* 模式六:条件段落省略
* 原则:“宁可不说,不要说了又删”。确保系统提示词前缀在会话生命周期内保持“单调稳定”,避免因功能开关翻转导致内容抖动。
* 模式七:工具 Schema 缓存 (getToolSchemaCache)
* 优化:使用会话级 Map 缓存序列化后的 Schema。一旦首次渲染,后续请求直接复用,有效隔离了远程配置(GrowthBook)翻转和动态内容的影响。
2. 优化模式的四个共性原则
本章提炼了构建缓存友好型 Agent 的通用哲学:
1. 将动态内容推向请求尾部:越靠前的内容变化破坏性越大。
2. 降低变化频率:当必须出现在前缀时,用更粗的粒度(如月度)代替细粒度。
3. 消除用户维度的差异:利用占位符实现跨用户的全局缓存共享。
4. 先测量,再优化:所有模式都源自对遥测数据的归因分析。
3. 给开发者的实操建议
* 审计提示词:识别并处理其中的动态变量(日期、用户名等)。
* 锁定工具 Schema:确保工具定义在会话内保持不变。
* 监控关键指标:cache_read_input_tokens 是判断缓存是否正常的唯一指标。
* 理解前缀顺序:在构建请求时,始终将最稳定的内容放在最前面。
总结而言:强调缓存稳定性是一等公民。它展示了如何通过精细的工程设计(甚至是一个路径占位符或日期格式的改变),在复杂的分布式环境中维持字节级的匹配一致性,从而最大限度地压榨缓存的经济价值。

加入我们的 Discord

与播客爱好者一起交流

立即加入

扫描微信二维码

添加微信好友,获取更多播客资讯

微信二维码

播放列表

自动播放下一个

播放列表还是空的

去找些喜欢的节目添加进来吧