30 秒快速回答

语义缓存(Semantic Caching):用向量相似度判断”新问题与历史问题是否语义等价”,命中则直接返回缓存的 LLM 答案,省下一次昂贵的模型调用。在 2026 年的主流 RAG 评测中,语义缓存能让重复类查询的检索延迟降低 30%-50%,API 成本同步下降。核心价值一句话:让 AI 应用”记住答过的问题”,越用越快、越用越省。

一、为什么需要语义缓存?

客服问答、文档助手、定时报表这类 AI 应用里,大量请求本质上是”同一问题的不同说法”:”怎么退款”和”退钱流程是什么”语义相同,但字符串完全不同。传统缓存对此无能为力:

缓存类型 匹配方式 能否处理同义改写 命中后省掉什么
普通 KV 缓存(Redis) 精确字符串匹配 否,一字不差才命中 LLM 调用
Prompt Caching(提示词缓存) 前缀 Token 级匹配 否,只省重复前缀 部分输入 Token 费用
语义缓存 向量相似度匹配 是,语义等价即可命中 完整 LLM 调用

三者并不冲突:Prompt Caching 在 API 层省”前缀费”,语义缓存在应用层省”整次调用”。

二、语义缓存的工作原理

核心流程只有四步:

  1. 用户问题 → Embedding 模型转成向量
  2. 与缓存库中历史问题向量做相似度比对(通常用余弦相似度)
  3. 最高相似度 ≥ 阈值(常见 0.85~0.95)→ 直接返回缓存答案,不调 LLM
  4. 未命中 → 正常调用 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) 可控性最强,可做多路召回 大规模、高定制

四个避坑要点:

  1. 阈值要按场景调:0.9 以上偏保守、命中率低;0.8 以下易误命中(相似但不相等的问题拿到旧答案)。建议先用 0.85 起步,观察线上”误命中率”再微调。
  2. 只缓存确定性答案:涉及实时数据、个性化内容、金额/库存的查询不要开缓存,避免过期答案污染体验。
  3. 设置过期与容量上限:缓存库无限增长会拖慢检索,按业务设置 TTL 或 LRU 淘汰。
  4. 敏感数据不入缓存:含个人隐私的问答要跳过缓存,防止数据在缓存层二次暴露。

总结

  • 语义缓存用向量相似度识别”同义问题”,命中即免调 LLM,是 RAG 应用提速降本性价比最高的优化之一;
  • 它与 Prompt Caching 互补:前者省整次调用,后者省前缀费用;
  • 落地关键在阈值调优 + 缓存边界:只缓存确定性、非敏感、可过期的答案。

延伸阅读:本站《什么是 RAG?一文搞懂检索增强生成》(guide-16)、《Prompt Caching:将 LLM API 成本降低 90%》(guide-71)、《什么是混合检索与重排序?》(guide-81)、《什么是 Agentic RAG?》(guide-80)。