最近在做企业知识库问答,用bge-m3做embedding,top-k取了5,召回的内容人工看了相关度很高,但GPT-4o生成时经常把不同文档里的数字和结论混在一起编。我试过调低temperature到0.1,也加了system prompt要求“仅基于给定材料回答”,但效果不稳定。更奇怪的是,有时候明明召回文档里没有的信息,模型也会一本正经地补全。想问问大家,这种“召回准但生成飘”的情况,是应该换更小的模型(比如7B)减少幻觉,还是要在prompt里做更强制性的约束?或者有没有什么rerank之外的后处理技巧?先谢过各位。
楼主
18天前
RAG召回明明很准,为什么生成结果还是胡说八道?
请 登录 后发表回复
全部回复
共 22 条
2楼
2天前
召回准但生成乱编,大概率是模型把召回内容当参考而不是唯一依据了。你可以试试把召回片段拆成带编号的独立块,prompt里要求每句话都标注来源编号,没编号的不许说。另外换小模型不一定管用,7B可能更爱自己脑补,关键还是约束生成时只能做抽取和拼接。我这边加了个后处理校验,把生成里的数字和结论反向匹配召回原文,对不上就让它重写,效果稳了不少。
3楼
1天前
这情况太常见了,召回准不代表生成就老实,模型天生爱“脑补”。你可以试试把召回内容按文档切分后加编号,prompt里明确要求引用来源编号,这样它混数字的时候你能一眼看出来。换7B不一定管用,小模型可能更爱编,不如在生成后加一层校验,比如用规则或小模型检查答案里的数字是否在原文出现过。另外top-k取5可能太宽了,试试先rerank再压到2-3条,减少干扰信息反而更稳。