提示词缓存是什么
提示词缓存把稳定不变的前缀(系统提示、固定的示例、公共知识片段)交给服务端缓存,重复请求直接命中,从而降低输入侧成本与首字延迟。命中条件是前缀字节级一致,因此模板拼接顺序、空白字符、标点都不能变;模板里一旦混入时间戳或随机 id,缓存就永远不命中。它的收益随前缀长度与调用频次上升,短提示词或低频调用基本没有收益。
基本信息
| 缓存对象 | 稳定前缀:系统提示、固定示例、公共知识段 |
|---|---|
| 命中条件 | 前缀字节级完全一致 |
| 常见失效原因 | 动态时间戳、随机 id、字段顺序变化 |
| 观测方式 | 服务端返回的缓存命中统计字段 |
| 收益 | 输入成本下降、首字延迟下降 |
| 前提 | 同一前缀被足够高频地复用 |
典型使用场景
- 系统提示很长且固定,例如角色设定与输出规范
- 少样本示例在同一业务里反复使用
- 公共知识前缀(术语表、规则表)每次请求都要带上
- 批量离线任务:同一模板跑成千上万次
- 高并发在线场景,用缓存压低首字延迟
稳定前缀的拼接顺序
稳定前缀的拼接顺序
messages = [
{"role": "system", "content": CACHED_SYSTEM_PROMPT}, # 固定不变,放最前
{"role": "system", "content": CACHED_KB_PREFIX}, # 高复用片段
{"role": "user", "content": question}, # 变化部分放最后
]
# 变化的内容必须后置:前缀里出现任何动态字段都会导致不命中缓存前提读法
| 前提 | 说明 | 不满足时的表现 |
|---|---|---|
| 前缀稳定 | 顺序与空白字符完全一致 | 命中率接近零,收益消失 |
| 无动态字段 | 时间戳、随机 id 不进前缀 | 缓存永远不命中,成本无下降 |
| 调用频次足够 | 同一前缀被反复使用 | 改造没有收益,白白增加复杂度 |
| 不牺牲可读性 | 变量不该硬塞进前缀 | 提示词难维护,改动风险上升 |
时间戳、随机 id 这类易变字段不要放进缓存前缀;命中率要看服务端返回的统计字段,而不是凭感觉判断。
调整系统提示后命中率会先归零再回升:这是前缀变化的正常现象,发布时不要当成故障处理。