最近在做一个基于RAG的客服问答Agent,遇到个头疼的问题。我的流程是:用户提问→检索Top5文档→LLM生成初步回答。但问题是,当用户问“A产品和B产品有什么区别”时,检索出来的片段往往只覆盖其中一个产品,或者两个产品的描述混在一起。Agent调用了两次检索工具,但返回的上下文太杂,LLM最后生成的结构化对比表格经常漏项或者重复。
楼主
25天前
RAG里Agent工具调用后结果太乱,怎么设计refine流程?
请 登录 后发表回复
全部回复
共 82 条
2楼
3天前
我之前做类似场景也踩过这个坑,后来是把检索结果按实体粒度拆开,先让agent分别抽A和B的关键信息,再单独喂给LLM做对比,表格就干净多了。你那个多轮检索的上下文,要不要试试在refine时加个“只保留与问题实体直接相关”的硬过滤规则?漏项的问题可能还是召回阶段没对齐,可以检查下query改写是不是把对比意图丢了。
3楼
1天前
我之前搞知识库问答也撞上过这个坑,特别能理解你说的漏项问题。后来我换了个思路,不再让Agent自己乱调工具,而是把检索结果先按实体或者主题做个预聚类,比如把提到A产品的段落和提到B产品的段落分开,再分别让LLM总结,最后才让LLM基于这两个总结去对比。这样虽然多了一步,但上下文干净多了,表格基本不会漏。另外你提到“混在一起”的情况,我怀疑是Top5的片段本身重叠度太高,可以考虑用MMR或者按句子级去重,减少冗余信息。还有个偏门方法,就是在refine的时候给LLM一个强制输出的模板,比如“产品名|功能|差异点”这种,让它填槽,比自由生成稳定很多。不过我看你流程里Agent调了两次检索,这两次的query是不是一样?如果一样的话,第二次其实意义不大,不如改成基于第一次结果的反问式检索。