语义缓存、Prompt Cache 和结果缓存有什么区别?
简化版
结果缓存缓存完整问答,语义缓存用向量相似度复用相近问题答案,Prompt Cache 复用重复前缀的模型计算或供应商计费优惠。三者解决的成本位置不同,也各有一致性、命中率和错误复用风险。
详细版
- 结果缓存适合同一输入稳定返回的场景,例如分类、模板化问答。
- 语义缓存适合相似问题高频出现,但要控制相似阈值和答案过期。
- Prompt Cache 主要复用长系统提示、工具说明、知识库前缀等重复上下文。
- 缓存命中会降低延迟和成本,但可能复用过期或不适配答案。
- 高风险业务要缓存证据和版本,不能只缓存自然语言答案。
完整版教学
记忆钩子:缓存不是“少调模型”这么简单,而是在质量风险可控时复用确定性或近似确定性的计算。
一、这题真正考什么
记忆钩子:缓存不是“少调模型”这么简单,而是在质量风险可控时复用确定性或近似确定性的计算。
语义结果缓存复用完整答案,Prompt/Prefix Cache 复用相同前缀的计算,两者的正确性边界不同。结果缓存必须把权限、知识版本和关键参数纳入键;前缀缓存则要求 token 前缀精确一致。
二、核心原理和工程边界
LLM 成本通常来自输入 token、输出 token 和生成延迟。结果缓存直接绕过模型,语义缓存用 embedding 判断“这个问题是不是足够像以前的问题”,Prompt Cache 则复用相同前缀的模型内部计算或享受服务商缓存计费。不同缓存层可以叠加,但必须有版本和失效策略。
三、带数字的工程算例
一个问答系统每天 20 万请求,30% 是政策类重复问题。若平均每次 2500 input token、500 output token,结果缓存命中 20%、语义缓存命中 10%,理论上可少调用 6 万次模型,但错误复用率必须被压到可接受范围。
缓存收益 = 命中次数 * 单次模型成本 - 缓存维护成本 - 错误复用成本
语义命中:cosine(query_embedding, cached_query_embedding) >= threshold
Prompt Cache 收益依赖重复前缀长度和供应商/推理框架支持
四、典型链路怎么跑
可以把这类问题拆成下面的链路来理解:
请求进入
|
精确结果缓存查询
| miss
语义缓存相似度查询
| miss
构造 prompt 并利用前缀缓存
|
调用模型
|
写入缓存并记录版本
五、方案对比和选择标准
| 缓存类型 | 命中依据 | 主要风险 |
|---|---|---|
| 结果缓存 | 完全相同 key | 数据过期、用户权限 |
| 语义缓存 | 向量相似度 | 相似但答案不同 |
| Prompt Cache | 重复上下文前缀 | 前缀变化导致失效 |
| 工具结果缓存 | 外部 API 参数 | 权威数据更新滞后 |
六、上线后最容易出问题的地方
-
语义缓存阈值过低会把不同问题当成同一个,阈值过高又几乎没有收益。
-
包含用户权限或实时数据的答案缓存,必须把租户、角色和数据版本纳入 key。
-
任何影响答案的模型、Prompt、索引或权限版本变化都要触发失效,不能只依靠 TTL 等待过期。
七、常见误区与追问
- 误区:语义相似就一定能复用答案。 相似问题可能在用户权限、时间、地域和实体上不同,超过阈值仍需业务约束校验。
- 误区:缓存只需要按问题文本做 key。 还要包含租户、身份范围、模型与 Prompt 版本、知识快照、语言和关键采样配置。
- 误区:Prompt Cache 和结果缓存是一回事。 前者复用前缀 KV/计算并继续生成,后者直接返回旧答案,陈旧与权限风险更高。
- 追问:语义缓存如何设置阈值? 在标注的可复用/不可复用问题对上画 precision-recall,优先保证错误命中率低,并按场景分阈值。
- 追问:缓存命中后还要不要返回引用? 要;引用应绑定缓存时的知识版本,并在文档失效或权限变化后同步使缓存失效。
- 追问:多租户系统如何避免缓存串数据? 租户和权限摘要必须进入命名空间与键,存储层再做隔离,禁止只依赖 Prompt 中的租户说明。
八、加强记忆
按“结果、语义、前缀、工具”四层记。回答时把命中依据、节省对象、失效策略和错误复用风险一起讲清楚。