0%

semantic caching

简要介绍语义缓存的基本原理,这是一个更偏业务侧的Technic,通常要结合具体场景制定策略。

概念

语义缓存通常指代一种较为规则的简易记忆机制,典型工作流为

  • 存储:将问题-答案对embedding缓存到向量数据库
  • 查询:以新问题为key搞相似度检索
  • 命中:当找到匹配分数超出阈值的问题后,直接使用缓存的原始答案,不再经过LLM

细节(可以和RAG的选择对比)

  • 存储:
    • 需要满足低延迟高QPS高频读写
      • 典型选择:Redis
    • 往往需要权限/租户等业务相关字段,查的时候在filter那里加
    • TTL
    • 典型的缓存策略:只缓存有价值的问题
      • 非时效性问题,非隐私问题,etc
      • 长问题(短问题LLM消耗低,缓存性价比就偏低了)
      • 热点问题
      • LLM回答出现明显问题的问题(“对不起,我无法回答……”)
      • ……
  • 查询
    • 需要警惕是否确实可以直接以新问题为key,很多时候session是有上下文的
      • rewrite,用一个小LLM结合当前session若干历史问答改写问题
      • 也可以结合业务制定其他策略
    • embedding对否定词不敏感
      • 可能需要一个小模型/关键词匹配,在score没有特别高时执行额外判断,传统NLP应该有相当多的工具
    • 多语种mismatch
      • 用高质量embedding model,要么就统一翻译
  • 命中
    • 通常会取很高的score threshold,否则性能要大跳水
    • 通常还是要加个后处理,重点是改一下实体(这个NER搞一下好办)或者加一些额外策略。但这里一定要快,通常用轻量规则搞一下就行

欢迎关注我的其它发布渠道