什么是本地LLM的提示词缓存?
快速回答
提示词缓存会保存为提示词前缀计算出的键值(KV)缓存,这样当后续请求共享相同前缀时——固定的系统提示词、重复使用的文档,或此前的对话轮次——就无需重新计算。对于前缀重复的工作负载,它能显著缩短提示词处理时间;但如果每个请求都互不相关,就没有任何收益。
- ▸缓存的是提示词前缀的KV缓存,而不是模型的输出
- ▸最大收益场景:长而固定的系统提示词、重复使用的文档、多轮对话
- ▸各次调用之间没有共享前缀的单次请求不会受益
更新于: 2026年7月15日
Technique & Concept Explainers中级
关键要点
- ✓提示词缓存保存为提示词前缀计算出的KV缓存,让后续请求可以直接复用,而不必重新处理相同的token
- ✓共享前缀越大、重复次数越多,加速效果越明显——一段长而不变的系统提示词若被数千次请求复用,收益会非常可观
- ✓在大多数本地服务部署中,多轮对话会自动受益,因为每一轮新的对话都会把之前的全部对话作为前缀共享
- ✓缓存只对提示词处理(输入端)有帮助,对token生成(输出端)没有帮助——它缩短的是首个token出现的时间,而不是生成开始后每秒生成的token数
缓存究竟如何加快速度
处理一段提示词,意味着模型要在开始生成回复之前,为每一个输入token计算出键值(KV)表示。这一步——提示词处理——发生在生成开始之前,其成本随提示词长度增加而增加。如果没有缓存,一段2000个token的系统提示词会在每一次请求中被完整地重新处理,即使它每次都是逐字节相同的内容。
缓存会保存针对某个前缀计算出的KV表示,并将其与确切的token序列绑定。当新请求以相同的token开头时,缓存的KV值会被直接复用,只有提示词中新增的、未缓存的部分才需要处理。实际效果是:对于命中缓存的情况,首个token出现所需的时间会显著缩短,因为大部分输入不再需要重新计算。
这也是多轮对话几乎自动受益的原因:对话的第3轮会将第1轮和第2轮作为其前缀,因此支持缓存的服务部署只需要处理最新一轮,而不必重新处理整个对话历史。
如何构建提示词才能真正受益
- ▸**把共享、不变的内容放在最前面。** 在不同请求间保持一致的系统提示词、指令和参考文档,应该放在会随请求变化的内容之前——缓存只对完全匹配的前缀生效,所以第一处出现差异之前的所有内容才是可以被复用的部分。
- ▸**让请求之间的共享前缀保持逐字节一致。** 系统提示词中哪怕只有一个字符的差异(比如时间戳、随机ID)都会打破前缀匹配,从而触发完整的重新处理——把每次请求特有的可变内容放到提示词末尾,放在可复用内容之后。
- ▸**不要指望缓存能帮到互不相关的单次请求。** 如果你的工作负载主要是没有共享设置的一次性提问,那么缓存就没有可以复用的内容——这项技术的价值,取决于你有多少流量真正共享着同一个前缀。
- ▸**长时间持续的对话最能从缓存保留设置中受益。** 检查你所用的服务部署会把缓存的前缀保留多久才驱逐——如果驱逐过于激进,对于轮次之间存在间隔的对话就起不到帮助。
常见问题
提示词缓存会改变模型的输出吗?▾
不会。缓存只影响共享前缀在内部的处理方式——它产生的结果与完整重新处理在数学上完全相同,只是速度更快。这是一种性能优化,不会改变模型的行为或输出质量。
提示词缓存能提升token生成速度,还是只影响首次响应时间?▾
只影响首次响应时间(即首个token出现所需的时间)。一旦生成开始,无论是否使用了缓存,token仍然会以相同的生成速度逐个产生——缓存消除的是冗余的提示词处理工作,而不是生成步骤本身。
缓存会占用多少VRAM?▾
缓存的KV数据与模型本身一同存放在VRAM中,其大小取决于被缓存的上下文量以及并发对话的数量。同时缓存多个长对话可能会明显增加VRAM占用——在VRAM有限的硬件上,这是一个需要权衡缓存深度的实际问题。
所有本地服务工具都支持提示词缓存吗?▾
支持情况和默认行为因工具而异——有些工具会在同一会话内的多轮使用中自动缓存,有些则需要显式配置,缓存保留时间(前缀在被驱逐前保持缓存的时长)也因工具而不同。请查阅你所使用的具体服务工具的文档,了解其缓存行为及可控制的相关设置。
相关 Prompt Bites