30 秒快速回答
语义缓存(Semantic Caching):用向量相似度判断”新问题与历史问题是否语义等价”,命中则直接返回缓存的 LLM 答案,省下一次昂贵的模型调用。在 2026 年的主流 RAG 评测中,语义缓存能让重复类查询的检索延迟降低 30%-50%,API 成本同步下降。核心价值一句话:让 AI 应用”记住答过的问题”,越用越快、越用越省。
一、为什么需要语义缓存?
客服问答、文档助手、定时报表这类 AI 应用里,大量请求本质上是”同一问题的不同说法”:”怎么退款”和”退钱流程是什么”语义相同,但字符串完全不同。传统缓存对此无能为力:
| 缓存类型 | 匹配方式 | 能否处理同义改写 | 命中后省掉什么 |
|---|---|---|---|
| 普通 KV 缓存(Redis) | 精确字符串匹配 | 否,一字不差才命中 | LLM 调用 |
| Prompt Caching(提示词缓存) | 前缀 Token 级匹配 | 否,只省重复前缀 | 部分输入 Token 费用 |
| 语义缓存 | 向量相似度匹配 | 是,语义等价即可命中 | 完整 LLM 调用 |
三者并不冲突:Prompt Caching 在 API 层省”前缀费”,语义缓存在应用层省”整次调用”。
二、语义缓存的工作原理
核心流程只有四步:
- 用户问题 → Embedding 模型转成向量
- 与缓存库中历史问题向量做相似度比对(通常用余弦相似度)
- 最高相似度 ≥ 阈值(常见 0.85~0.95)→ 直接返回缓存答案,不调 LLM
- 未命中 → 正常调用 LLM,把”问题+答案”写入缓存库
一个最小实现示例:
class SemanticCache:
def __init__(self, embed_fn, threshold=0.9):
self.embed_fn = embed_fn # 问题 -> 向量
self.threshold = threshold # 相似度阈值
self.store = [] # [(向量, 问题, 答案)]
def query(self, question):
q_vec = self.embed_fn(question)
best_sim, best_ans = 0.0, None
for vec, _, ans in self.store:
sim = cosine(q_vec, vec)
if sim > best_sim:
best_sim, best_ans = sim, ans
if best_sim >= self.threshold:
return best_ans # 命中:不调 LLM
return None # 未命中:走 LLM
def save(self, question, answer):
self.store.append((self.embed_fn(question), question, answer))
生产环境把 self.store 换成向量数据库(Redis Stack、Milvus、FAISS + Redis)即可,逻辑不变。
三、收益怎么量化?
假设应用 30% 请求是重复语义查询:
- 延迟:缓存命中走一次 embedding + 向量检索(约 10-50ms),对比一次 LLM 调用(1-5 秒),响应提速 50% 以上;
- 成本:命中请求不再产生 LLM 输入/输出 Token 费用,按 30% 命中率估算,API 总成本下降约 30-40%;
- 稳定性:缓存命中无随机性,回答一致性更好,也减轻上游模型压力。
四、落地实践与避坑
主流方案对比:
| 方案 | 特点 | 适合场景 |
|---|---|---|
| GPTCache | 专为 LLM 设计,自带 embedding/存储/阈值策略 | 快速验证、中小应用 |
| Redis Stack | 向量 + 过期 + 持久化一体,运维简单 | 大多数生产应用 |
| 自建(FAISS + Redis) | 可控性最强,可做多路召回 | 大规模、高定制 |
四个避坑要点:
- 阈值要按场景调:0.9 以上偏保守、命中率低;0.8 以下易误命中(相似但不相等的问题拿到旧答案)。建议先用 0.85 起步,观察线上”误命中率”再微调。
- 只缓存确定性答案:涉及实时数据、个性化内容、金额/库存的查询不要开缓存,避免过期答案污染体验。
- 设置过期与容量上限:缓存库无限增长会拖慢检索,按业务设置 TTL 或 LRU 淘汰。
- 敏感数据不入缓存:含个人隐私的问答要跳过缓存,防止数据在缓存层二次暴露。
总结
- 语义缓存用向量相似度识别”同义问题”,命中即免调 LLM,是 RAG 应用提速降本性价比最高的优化之一;
- 它与 Prompt Caching 互补:前者省整次调用,后者省前缀费用;
- 落地关键在阈值调优 + 缓存边界:只缓存确定性、非敏感、可过期的答案。
延伸阅读:本站《什么是 RAG?一文搞懂检索增强生成》(guide-16)、《Prompt Caching:将 LLM API 成本降低 90%》(guide-71)、《什么是混合检索与重排序?》(guide-81)、《什么是 Agentic RAG?》(guide-80)。