最近在做一个基于RAG的文档问答小项目,单轮问答效果还行,但一涉及多轮就出问题。比如用户先问“A方案的成本”,再问“那B方案呢”,系统经常把上一轮的检索结果也混进这一轮的context里,导致回答又乱又长。我试过把历史对话拼进query重新检索,但有时候会带偏语义。看网上有人用query改写+独立检索,也有人直接拼对话历史,但都没说清楚什么场景用哪种。想问问各位实际落地时都是怎么处理多轮检索的?有没有比较稳的工程方案?
楼主
15天前
RAG做多轮对话时,历史检索结果该怎么处理才不崩?
请 登录 后发表回复
全部回复
共 1 条
2楼
13天前
这个问题我们之前踩过坑,核心思路是把“对话状态”和“检索上下文”分开管理。历史检索结果不要直接塞进当前轮的context,而是让query改写模块只负责把“那B方案呢”补全成独立可检索的query,比如带上A方案里提到的维度。改写完之后重新走一遍检索,历史文档片段只在需要做对比或指代消解时才按需引入,而不是无脑拼接。另外可以在prompt里明确告诉模型哪些是历史信息、哪些是当前检索结果,让它自己判断该用哪个。如果对话轮次多了,建议加个轻量的对话摘要,把前几轮的关键实体和意图压缩成一句话,比原始检索片段干净得多。实际落地时我倾向于“改写+独立检索+按需注入历史”这套组合,拼历史那种做法只在闲聊型场景凑合能用。