一句话定义:语义缓存(Semantic Caching)是把用户的问题先转成向量(embedding),在历史问答库里找“意思最接近”的那一条;如果相似度超过预设阈值,就直接返回旧答案,不再调用大模型。
它和普通缓存的区别在哪
普通缓存的键是字符串,必须一模一样才算命中。用户问“怎么改密码”和“密码忘了怎么办”,在它眼里是两个完全不同的请求,各算一次钱。
语义缓存像一个记性很好的前台老员工。他不背原话,只记“这件事的意图”。你换十种说法来问同一件事,他都知道你说的是同一件事。
流程大致四步:把问题编码成向量 → 在向量库里做近邻搜索 → 算相似度(常用余弦相似度)→ 高于阈值就命中,低于阈值才真正去问大模型,并把这组问答写回缓存。
和提示缓存(Prompt Caching)的区别
| 维度 | 提示缓存 | 语义缓存 |
|---|---|---|
| 匹配依据 | 请求前缀逐字节相同 | 向量相似度 |
| 部署位置 | 多在模型服务侧 | 多在应用侧 |
| 省的是什么 | 重复计算,降低首字延迟 | 整次模型调用 |
| 风险 | 基本没有“答错”问题 | 可能命中近义但不同的问题 |
一句话概括:提示缓存解决“同一段长文本反复算两遍”,语义缓存解决“同一件事被问了两百遍”。
阈值:低了会答错,高了等于没缓存
这是语义缓存最经典的难题。
阈值设低了,会把“怎么退款”和“怎么退货”当成一回事;更危险的是“如何注销账号”和“如何注销公司”这类字面很近、意图完全不同的问法,用户会收到一个驴唇不对马嘴的答案,而且他还不知道是缓存造成的。
阈值设高了,只有几乎一字不差才算命中,命中率趋近于零,等于白白多了一层向量检索的开销,不如不做。
工程上的常见做法是:按业务分别定阈值,用真实日志回放,观察“命中后用户是否追问、是否点踩”,再逐步调;对时效性强的内容(价格、库存、政策)直接绕过缓存。
对从业者和普通人的意义
做产品的人:语义缓存通常用在高重复意图的场景,比如客服 FAQ、产品说明、内部知识库问答。落地时要额外注意三件事——多轮对话要把上下文一起参与匹配,否则容易串味;带用户私有信息的答案必须按用户或租户隔离,不然会把 A 的数据返回给 B;缓存要有过期和手动清理机制。
普通用户:你换个说法再问客服机器人,它不假思索就给出了同样的答案,响应快、成本低,背后很可能就是它在工作。
具体实现方式和参数配置,以各家官方页面为准。
