Prompt Harness
提示词和缓存的微妙关系
KV Cache 的规则极其简单:前缀一模一样就命中,差一个字就全部重算。所以,往 System Prompt 里插入任何动态内容,都可能让缓存永远打不中。
指纹变了 = 缓存作废
每次请求,系统会对 System Prompt 算一个指纹(hash)
System: 你是助手。当前时间: 14:35:22
→
a3f7c2
MISS
System: 你是助手。当前时间: 14:35:23
→
b8e1d9
MISS
System: 你是助手。当前时间: 14:35:24
→
c4a2f6
MISS
每一秒时间不同 → 指纹不同 → 缓存永远命不中 → 每次都要从头算 → 成本翻倍。
这不只是时间戳的问题:任何动态内容插在 System Prompt 里都有同样效果。
Skill 的注入方式也影响缓存
把 Skill 插进 System
[System]
你是 AI 助手...
[当前 Skill: 内容创作]
触发词:帮我写...
步骤:1. 确认需求...
---
[User] 帮我写篇文章
切换 Skill 时 System 变了 → 缓存失效
~20%
Skill 作为独立消息追加
[System]
你是 AI 助手...
---
[Assistant/Skill 消息]
当前 Skill: 内容创作
步骤:1. 确认需求...
---
[User] 帮我写篇文章
System 永远不变 → 前缀缓存始终命中
~90%
模拟:10 次请求的缓存表现
缓存命中模拟器
假设 10 次请求中有 3 次切换了不同的 Skill。观察两种注入方式的缓存差异:
命中率:—
回顾课程 8-3:我们之前讲过动态时间戳是最贵的反模式。这一课的结论更广:不只是时间戳,所有动态注入到 System Prompt 的内容,都是缓存杀手。Skill、用户 ID、Session 标记…任何变化的东西,都不该出现在前缀里。
KV Cache 的规则很简单:前缀一样就命中。所以,别动前缀。把所有可能变化的内容(Skill、上下文、时间)放到 System Prompt 之后,让前缀永远稳定。