先记住这个答案
当召回无关事实过多导致跑偏,先记录回答中实际引用的记忆,逐条计算与查询的相似度。若条数本身过大,先收紧top-K;若低相似度噪声占多数,可提高向量检索阈值;若相似度均较高但语义不匹配,则需要重排引入时间衰减或MMR分散性。整体收敛顺序建议:先限制条数上限快速止血,再调阈值过滤低质候选,最后通过重排优化排序,收敛到精准事实集。
- 先诊断相似度分布再动手调参
- 限制条数是最快的止血手段
- 重排更适合解决语义混淆
噪声为何扎堆召回
向量检索只按语义距离取最近邻,用户查询若含模糊词如“最近”“相关”,会同时命中不同主题记忆。且缺少时间衰减时,陈旧的偏好可能与当前意图同向量空间相近,造成高相似但无关的召回。
召回过多不代表精确率一定低,但每个多余片段都会摊薄LLM注意力。诊断第一步是记录最终回答中引用了哪些记忆,反向检索它们的原始相似度与排序位置,若大量低相关片段进入上下文,问题就出在召回源头。
客服机器人旧地址跑偏
假设场景:某Agent服务用户查询“周围有维修点吗?”,知识库中存有用户当前城市、三个月前搬家记录和订阅偏好。系统配置top-10、相似度阈值0.70,召回中搬家记录相似度0.81、购买记录0.75,两者均进入上下文,导致回答推荐了旧城市维修点。
处理(假设):先把top-K从10降到5,假设购买记忆排序第6位,因此被排除;搬家记忆仍在前5,未能排除。再调阈值至0.80,购买记忆因相似度0.75低于阈值已不在候选,但对本场景无影响(因已在第一步排除)。然后引入时间衰减权重,将三天内记忆加权,重排后取前3条,搬家记忆因时间较早而权重降低,当前城市记忆权重升高,预期回答推荐当前城市维修点。该流程说明精准召回需要逐级收紧。
失效条件与代价
当查询本身跨时段、跨主题时,单靠提高阈值会把真正相关的历史事实大量隔离,例如用户问“我以前喜欢什么”,此类元认知问题通常需要保留更多历史事实,不宜简单用固定阈值截断,此时应改用重排按最近活跃排序。
另外,阈值与条数是静态全局参数,用户差异大时易误伤。若记忆库中还含有事实更新冲突,比如新旧地址并存,仅靠检索参数调整难以解决,必须依赖更新机制(如显式替换)。此时需要检查写入路径,而非反复调参。
容易答错的地方
- 只调阈值就以为解决
- 把相似度阈值从0.7提到0.9,确实能过滤低相似噪声,但若噪声本身与查询语义接近(如新旧地址同是地点),则效果有限。正确做法是先看引用片段相似度分布,再考虑重排或更新机制。
- 无限增加top-K追求全面
- 有人觉得召回越多信息越全,但top-K过大容易让LLM注意力分散,并增加被无关事实带偏的风险。通常长上下文里有效事实位数有限,应该用更小的条数与重排组合,而不是盲目扩大小窗口。
面试官还会怎么问?
如何区分召回噪声与记忆本身过时?
若被召回事实与查询相似度高但当前无效,例如用户已搬家,说明是更新机制缺失,需检查事实写入是否执行替换。若相似度低却进上下文,则是检索参数问题。可用时间戳和显式冲突标记来辅助判断。
重排比阈值更重吗?什么时候必须用重排?
当候选均高于阈值但排序靠前的多条语义相近,如不同时期同样偏好,需要用时间衰减或动态多样性重排。如果记忆库主题对比鲜明,则阈值即可。重排成本高,通常只在top-K且语义混叠时启用。
条数上限应该按什么定?
不应固定不变,而应根据具体任务复杂度调整:简单问答可以用较少条数,复杂规划可适当增加。先通过实验观察噪声率和回答质量,再逐步微调参数。
参考资料
示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。