即使 RAG 从设计上大幅降低了幻觉风险,但在真实部署中仍然会遇到模型“编造”内容的情况。区别在于,RAG 场景下的幻觉往往更隐蔽:它可能编造一个看起来像真实文档的出处,或者把检索到的片段扭曲成完全不同的意思。问题一旦出现,对业务的影响比纯生成场景更严重——因为用户会倾向于相信“有来源”的回答。
1. 幻觉的具体表现
在 RAG 系统中,幻觉通常以以下几种形式出现:
- 编造事实:回答中出现了检索材料从未提及的信息。比如知识库中只写了“产品质保期为两年”,模型却补充说“自第三年起可半价延保”这样的虚假条款。
- “无中生有”地引用来源:为了给编造的内容披上可信外衣,模型可能生成一段看似规范的来源标记,如“根据《内部管理条例》第5条”,但实际上该条款在知识库中根本不存在。
- 扭曲原文意思:检索到了一段正确文本,但模型在转述时改变了数字、条件或限定词,比如将“年销售额超过1000万可享受折扣”误生成“年销售额超过100万即可享受折扣”。
- 拼接痕迹明显:把来自多个文档的片段强行拼接,生成了语义不通顺甚至逻辑矛盾的答案。
2. 为什么 RAG 仍会出现幻觉
RAG 不是消除幻觉的万能药,它只是将幻觉的来源从“模型自身知识的局限”转移到“检索质量、提示设计和模型推理能力”的交界处。具体原因包括:
- 检索失败或信息不足:当检索模块没能找到真正相关的片段,或者知识库本身缺乏对应信息时,模型面对“无米之炊”的困境。如果提示词中没有明确允许模型说“不知道”,它就很可能开始编造。
- 上下文过长导致信息稀释:一次性塞入过多检索片段,模型可能会忽略关键限制条件,或是把不同来源的内容混淆在一起,生成出“缝合怪”式的错误回答。
- 提示词约束力不足:没有在指令中明确要求“只能使用提供的材料,不得添加任何材料中没有的信息”,模型出于完成对话的本能,会自发进行知识补充。
- 检索到的内容本身存在矛盾:如果知识库中有新旧版本并存的文档,模型可能随机采信其中一个版本,并给出看似笃定的结论,实则依据的是已废止的条款。
3. 如何检测与定位幻觉
要在第一时间发现幻觉,不能只靠人工抽检,需要建立系统性的检测手段:
- 溯源验证:对每条生成回答,自动比对它所引用的检索片段,检查关键实体(数字、日期、人名、条款号)是否真的出现在原文中。可以写简单的规则或使用小型专用模型进行一致性检查。
- 置信度监控:关注检索阶段的相关度分数。如果所有召回片段的相关度都低于某个阈值(例如0.6),说明这个问题很可能超出了知识库的覆盖范围,生成的回答就属于高风险,应标记出来人工复核。
- 用户反馈闭环:在回答底部设置“这个答案有用吗?”“信息准确吗?”等反馈按钮,收集用户对准确性的评价,以此反推可能存在的幻觉高频区域。
4. 缓解幻觉的实用措施
针对 RAG 场景中的幻觉,可以从四个层面入手进行干预:
检索层面
- 提高检索精度:优化 chunk 切分策略,保证每个片段语义完整;使用更好的嵌入模型;引入重排序(reranker)对召回结果进行二次筛选,确保真正进入生成窗口的内容高度相关。
- 设置检索质量守卫:在生成之前判断检索结果的相关度。如果得分普遍偏低,直接返回“抱歉,当前资料库中暂未找到相关信息”,避免将低质量内容硬塞给模型。
提示词层面
- 给出清晰边界:在 prompt 中明确写“你只能依据以下资料回答问题。如果资料中没有涉及,请直接说明‘资料中未找到相关信息’,不要推测或补充任何额外信息。”
- 要求逐句引用:要求模型在回答的每个关键事实后标注对应片段编号。这种格式化的要求会强制模型更忠实地使用检索结果,而不是进行自由联想。
知识库层面
- 保证知识库的纯净:彻底清理过期、矛盾的文档,避免模型在相互冲突的信息面前产生混乱。
- 增加“拒答”保护机制:对于可能超出知识库范围的问题,提前准备好兜底答案,由系统层面拦截,而不让模型自由发挥。
生成参数层面
- 适当降低 temperature:在事实性要求极高的场景中,将 temperature 设为接近0的值,可以有效抑制模型的“创造性”发挥,让它在原文和自由想象的天平上往原文倾斜。
5. 实践中的取舍
完全消除幻觉在技术上尚不现实,更务实的做法是将其控制在一个可接受的范围,并配合透明的前端展示来管理用户预期。比如在回答下方明确提示:“本回答由AI基于内部文档生成,请以原始文档为准”,同时附上真正可点击的原文链接。这样即使偶有偏差,用户也能快速核实和纠正。
幻觉问题本质上是对 RAG 各环节协同能力的压力测试。当检索、生成、知识库维护三个环节配合得当时,幻觉的严重程度会大幅降低;而一旦某个环节脱节,就会以“结论错误、依据凭空”的形式暴露出来。因此,解决幻觉的过程,本身也是在打磨整个 RAG 技术栈的健壮性。