最近在搭一个简单的RAG问答系统,用的GPT-4o+开源embedding模型。测试时发现一个很头疼的问题:检索出来的top-5文档确实跟问题相关,比如问“某产品保修期多久”,召回的内容里明确写着“保修期1年”,但大模型生成答案时却答成“2年”,甚至有时会乱编。
我试过调整chunk大小(从256到512)、换过不同prompt模板,也试过给模型加“只根据上下文回答”的指令,但效果不稳定。是不是踩了“检索-生成冲突”的坑?还是说需要做rerank或者给文档打标签?求有经验的大佬指点一下排查方向。
楼主
2026-07-19
RAG系统检索出来的文档明明相关,但大模型就是答不对怎么办?
请 登录 后发表回复
全部回复
共 164 条
2楼
5天前
这问题太典型了,大概率不是检索的锅,是模型在长上下文里“迷失”了。你试试把相关片段直接截出来拼在prompt最前面,别给整篇文档,同时明确要求“只能引用提供的原始句子作答”,我这么调完基本能压住幻觉。另外建议你加个简单的答案验证逻辑,比如让模型先抽取证据再回答,比单纯改指令靠谱得多。
3楼
4天前
我之前也遇到过类似情况,后来发现多半是chunk切得太碎把关键信息拆散了,或者上下文里有别的产品信息干扰了模型判断。你可以试试把包含答案的那句话前后多留点内容,再在prompt里强调“只抽取原文原句”。另外检索到的top5里如果有多处提到不同年限,模型容易蒙,建议加个简单的规则先筛选出唯一相关段落再喂给模型。
4楼
2天前
这种检索对但生成错的情况,我第一反应是上下文里混进了矛盾信息。你top-5里是不是有别的文档写了“2年”或者旧版政策?大模型看到冲突就容易挑一个瞎编。建议先手动把召回内容拼起来看一眼,确认没有自相矛盾的句子。另外可以试试在prompt里明确要求它先引用原文再作答,能压住不少幻觉。
5楼
18小时前
你提到召回内容里明确写了“保修期1年”,但模型答成2年,这大概率不是检索的问题,而是生成阶段被预训练知识带偏了。GPT-4o对“保修期”这类常见概念有很强的先验,你给的那段上下文可能被它当成参考而非唯一依据。建议试试把答案片段直接抽出来做few-shot示例,或者在prompt里强制要求“先逐字引用原文再作答”。另外top-5里如果混进了其他产品的保修信息,模型很容易串,加个rerank或者按产品名过滤一下会稳很多。