LLM 语义缓存策略
为什么需要语义缓存
LLM 推理成本高、延迟大。传统缓存基于精确匹配("北京的天气" 和 "北京天气怎么样" 不命中),而语义缓存用向量相似度匹配语义相近的问题,大幅提升缓存命中率。
架构设计
用户输入
↓
[Embedding 编码] → 向量
↓
[向量检索] → 相似度 > 阈值?
├── 是 → [返回缓存结果]
└── 否 → [调用 LLM] → [存入缓存]
核心组件
Embedding 模型
缓存编码需与检索编码保持一致。推荐使用轻量模型(如 bge-small-zh),编码速度要快于 LLM 推理速度才有意义。
相似度阈值
- 高阈值(>0.92):安全但命中率低,适合事实类问答
- 中阈值(0.85-0.92):平衡方案,通用场景推荐
- 低阈值(<0.85):高命中但有语义漂移风险,建议配二次校验
缓存策略
- TTL 过期:根据数据时效性设不同 TTL(如天气 30min,常识 24h)
- LRU 淘汰:设置最大容量,淘汰最久未命中的条目
- 分级缓存:热点数据放内存 Redis,冷数据放向量数据库
降级与预热
降级:缓存不可用时自动降级为直连 LLM,不影响服务可用性。
预热:上线前将高频 QA 批量注入缓存,避免上线后空缓存导致 LLM 负载激增。
实践建议
- 缓存 key 除了用户问题,还应考虑上下文(如城市、用户角色)
- 对敏感信息(医疗、金融等)谨慎缓存,设白名单字段
- 缓存命中率目标:QA 场景 30-50%,参数固定场景可到 60%+
- 监控缓存命中率、降级次数,及时调整阈值和 TTL