用向量相似度做问答缓存,阈值 0.9,甲用户问退款到哪了,乙用户问退款多久到账,命中同一条缓存,乙收到了甲的订单号。
一开始怀疑是「答案里含个性化字段却被整体缓存」,查了一圈,方向不对。
真正麻烦的地方在于,几个原因的现象几乎一样。缓存 key 没带用户维度。少数情况下是相似度阈值对短问句过于宽松。
不容易想到的是,没有区分事实型与个人型问题。
动手时先查缓存 key 的构造方式
python -c "print('key = tenant:user:hash(q)')"
key 里加入租户与用户标识
python patch_cache.py --key 'tenant:user:q'
个人数据类问题直接跳过缓存
python guard.py --skip personal
等前面都确认过,再用跨用户回归集验证误命中
python eval_cache.py --cases cross_user.jsonl
别只看报错消失,验证要多做一步。回归集里跨用户误命中为零,整体命中率仍保持在 40% 以上。
补一句。语义相似只说明问题像,不代表答案可以复用,带个人数据的答案必须隔离。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
