高频问答加语义缓存不走模型
先甩个数:我给客服智能体加了层语义缓存之后,模型调用量降了大概一半,月底账单直接砍掉小一半。做法不复杂,但有几个坑值得说。
问题:一堆人在问同一件事
翻客服日志我发现一个现象——80% 的提问其实就集中在那十几个问题上:"怎么退款""营业时间""怎么改地址""发票怎么开"……同一个意思,用户说法五花八门:
"怎么退款"
"我想退货钱怎么退"
"退款流程是啥"
"买错了能退吗"
这四句话意思一模一样,但每一句都老老实实打了一次模型。同一个答案,模型算了无数遍,钱就这么烧掉的。
为什么普通缓存不管用
你可能想:那做个缓存不就行了。但传统缓存是精确匹配——key 一个字不一样就算 miss。上面那四句话字面全不同,精确缓存命中率几乎是零,等于没缓存。
要的是语义缓存:只要意思一样,不管字面怎么变,都能命中。
语义缓存怎么做
核心思路:拿向量相似度来判断"是不是同一个问题"。
1. 缓存里存的是 (问题向量 → 答案)
第一次有人问"怎么退款",正常走模型出答案,然后把这个问题的 embedding 向量和答案一起存进缓存。
2. 新问题来了,先算向量再比相似度
下次来个"我想退货钱怎么退",先把它转成向量,去缓存里找最相似的那条。如果相似度超过阈值(比如 0.9),判定为同一个问题,直接返回缓存的答案,根本不打模型。
新问题 → 向量化 → 在缓存里找最近邻 相似度 ≥ 0.92 → 命中,返回缓存答案(不走模型) 相似度 < 0.92 → miss,走模型,结果再存进缓存阈值这个数是命门
阈值定高定低,是这套东西成败的关键,我反复调过。
定太低(比如 0.8):会误命中。我吃过亏——"怎么退款"和"怎么退会员"相似度有 0.85,阈值设 0.8 的时候,用户问退会员,给返回了退款的答案,答非所问,比不缓存还糟。
定太高(比如 0.97):基本只有原句重复才命中,命中率上不去,省不了几个钱。
我最后定在 0.92,是拿一批真实问题对试出来的折中。这个数没有标准答案,强烈建议拿自己的真实问题对去测,别抄我的。
在零代码平台上的实操
我搭客服智能体用的是个拖拽配流程的平台。语义缓存这层是这么接的:在调模型那个节点前面,加一个查缓存的分支——
用户问题先过一个向量检索节点,去我建的"FAQ缓存知识库"里找最相似的
相似度够高 → 直接走"返回缓存答案"分支,绕开模型节点
不够高 → 才进模型节点,出完答案顺手写回缓存
好处是向量化和检索平台都包了,我不用自己搭向量库。等于是把"FAQ知识库 + 相似度判断"复用成了缓存层。
收益和代价
收益:模型调用量降了约一半,响应也快了——命中缓存的请求几十毫秒就返回,不用等模型那两三秒。用户体感"这机器人答得真快"。
代价,得诚实说两个:
缓存会过期。退款政策改了,缓存里还是旧答案,就会出错。我现在是政策类答案设较短的过期时间,强制定期回源,但偶尔还是有用户拿到过期答案的零星投诉,这块没做到完美。
冷门问题一点没省。语义缓存只对高频问题有效,长尾问题该走模型还走模型,省的全是头部那批高频。所以它是"省大头",不是"全省"。
小结
高频 FAQ 占了大部分流量却在重复烧钱,语义缓存用向量相似度命中同义问题、绕过模型。阈值是命门,拿真实数据调;注意缓存过期和冷门问题省不到这两个代价。
(缓存背后真正要走模型的那部分,我调的是讯飞星辰 MaaS,现成 API 按量付,加上缓存这层,等于现成模型还少调一半,成本压得更狠。)
