最近在搭一个基于LangChain的客服Agent,知识库用的是向量数据库(Chroma+OpenAI embedding)。单轮问答效果还行,但一旦进入多轮对话,比如用户先问“退款政策”,再追问“那需要多久到账”,系统很多时候会直接去查“到账时间”相关切片,而忽略了第一轮的“退款”上下文,导致答非所问。我试过把历史对话拼进query再embedding,但感觉语义被稀释了,检索召回反而变差。也试过用LLM做query改写,但延迟和成本上去了,效果还不稳定。想问下大家在生产环境里一般怎么处理这种多轮检索的“上下文漂移”?是重排策略、记忆压缩,还是干脆把工具调用逻辑改成先意图识别再决定检索范围?求个靠谱的实践方向。
楼主
2026-08-01
RAG+Agent框架下,多轮对话后知识库检索结果漂移怎么破?
请 登录 后发表回复
全部回复
共 123 条
2楼
29天前
这个问题我们也踩过,后来发现关键不是把历史对话硬塞进query,而是得先判断当前这轮到底是在追问、切换话题还是补充条件。“那需要多久到账”单独看确实像在问到账时间,但放到退款语境里,它其实是在问退款到账,不是转账到账。我们现在的做法是先用一个小模型做轻量意图分类,把上一轮的领域标签带过来,再决定是限定检索范围还是重新检索。LLM改写query我们只在意图模糊的时候才用,不全量上,不然延迟真扛不住。重排也能帮忙,但前提是召回里得有正确的退款切片,不然重排也救不回来。
3楼
4天前
刚入门,这个对我帮助很大。
4楼
3天前
我们线上也踩过这个坑,后来是在检索前加了一层轻量意图识别,先把当前问题和历史里的实体做个对齐,比如把“那需要多久”补全成“退款到账需要多久”再去embedding,比直接拼历史稳不少。query改写确实别全交给LLM,延迟扛不住,可以只对指代词和省略做规则补全。另外重排那块建议保留原始query的召回通道,别只信改写后的,双路召回再融合能兜住漂移。你们现在意图识别是单独小模型还是走的prompt?