大模型 RAG 幻觉治理方案总结本文是与GPT深度聊天后总结的文章 非本人编写1. 核心结论大模型 RAG 的幻觉问题不能只靠 Prompt 解决。Prompt 只能约束模型“怎么回答”但如果前面的文档源、切分、检索、重排、上下文组装本身有问题模型依然会基于错误或缺失的信息生成不可靠答案。更准确地说RAG 防幻觉的核心不是单纯让模型更听话而是让模型拿到正确、完整、可信的证据并且禁止它在证据之外发挥。一个成熟的 RAG 防幻觉方案应该从完整链路治理文档源治理 ↓ 文档解析 ↓ 文本切分 ↓ 向量化 ↓ 检索召回 ↓ Reranker 重排序 ↓ 上下文组装 ↓ LLM 生成 ↓ 答案校验 ↓ 评估监控2. RAG 幻觉的常见来源2.1 没有检索到正确内容用户问的是某个具体问题但向量库返回的是语义相近、却不能真正回答问题的内容。例如用户问公司年假规则是什么但检索结果返回的是公司调休制度 考勤打卡制度 请假审批流程这些内容看起来相关但没有真正回答“年假规则”。此时模型很容易根据已有上下文硬猜。2.2 检索到了错误内容知识库里可能同时存在旧文档和新文档。例如2023 年假规则 2025 年假规则如果系统检索到了旧版本文档模型就可能基于过期内容认真地回答错误答案。这种问题本质上不是模型生成阶段的问题而是检索源和文档管理的问题。2.3 Chunk 切分不合理导致上下文缺失如果文档被切得太碎关键限制条件可能会丢失。原文可能是正式员工入职满一年后每年享有 5 天年假。 试用期员工不享受年假。但检索时只召回了每年享有 5 天年假。模型没有看到“入职满一年”和“试用期员工不享受”这些条件就容易回答不完整或错误。2.4 检索内容正确但模型自由发挥有些时候检索内容是正确的但模型在生成答案时补充了上下文里没有的信息。例如上下文里只说明了年假天数但模型额外回答了离职折算规则、审批流程等内容。若这些内容没有来源支撑就属于生成阶段的幻觉。这类问题可以通过 Prompt、低 temperature、引用机制、答案校验来缓解。3. 第一层文档源治理RAG 的基础是知识库质量。如果知识库本身存在旧文档、重复文档、冲突文档、错误文档那么后续检索和生成都会受到影响。3.1 需要治理的内容建议在入库前处理1. 删除过期文档 2. 合并重复文档 3. 标记文档版本 4. 标记生效时间 5. 标记来源权威性 6. 标记文档所属业务范围 7. 标记文档状态active / deprecated / draft3.2 推荐的 metadata 设计每个 chunk 入库时建议保留 metadata{doc_id:hr_policy_2025,title:2025 员工休假制度,version:2025,effective_date:2025-01-01,department:HR,source:official,status:active}这样后续检索时可以做过滤只检索 status active 的文档 只检索最新版本 只检索当前用户有权限访问的文档 只检索指定部门或业务范围下的文档4. 第二层优化文本切分Chunk 切分质量会直接影响 RAG 的准确率。4.1 Chunk 太小的问题如果 chunk 太小容易丢失上下文。例如chunk_1员工入职满一年后 chunk_2每年享有 5 天年假 chunk_3试用期员工不享受年假用户问年假规则时系统如果只召回 chunk_2答案就会缺失关键限制条件。4.2 Chunk 太大的问题如果 chunk 太大里面可能包含太多噪声。例如一个 chunk 同时包含年假 病假 婚假 产假 调休 考勤用户只问年假模型可能会混用其他假期规则。4.3 推荐切分方式实际项目中可以采用1. 优先按标题、章节、段落切分 2. 设置合理 chunk_size 3. 设置 chunk_overlap避免上下文断裂 4. 保留父级标题 5. 保留页码、章节、文档名 6. 表格类内容尽量保持结构完整一个更好的 chunk 内容示例文档2025 员工休假制度 章节第三章 年假规则 页码第 5 页 正文正式员工入职满一年后每年享有 5 天年假。试用期员工不享受年假。这样模型不仅能看到正文也能知道这段内容来自哪里、属于哪个章节。5. 第三层提高检索召回质量很多幻觉来自“正确内容没有被召回”。5.1 topK 不要太小如果只取topK 3正确 chunk 可能排在第 5 名就被漏掉。常见做法是第一阶段召回 top50 / top100 第二阶段 reranker 重排 最后选 top5 / top10 给 LLM也就是先多召回再精排5.2 使用混合检索单纯向量检索擅长语义匹配但对关键词、编号、专有名词有时不稳定。例如用户问BGE-M3 的维度是多少这里BGE-M3是明确关键词BM25 关键词检索可能比纯向量检索更稳。推荐使用向量检索 BM25 关键词检索 RRF 融合可以理解为向量检索负责语义相似 BM25负责关键词精确匹配 RRF负责融合两个检索结果5.3 加入 RerankerEmbedding / Bi-Encoder 检索速度快但排序不一定准。Reranker 可以对第一轮召回的候选 chunk 重新打分。常见流程Embedding 召回 top50 Reranker 重排 top50 选 top5 给 LLM例如BAAI/bge-m3负责向量召回 BAAI/bge-reranker-v2-m3负责重排序Reranker 的价值是判断这个 chunk 是否真的能回答用户问题6. 第四层上下文组装检索到了正确 chunk不代表可以直接全部塞给模型。上下文组装也会影响幻觉。6.1 需要避免的问题不要把互相冲突的内容直接混在一起。例如2023 规则年假 3 天 2025 规则年假 5 天如果都给模型模型可能混用规则。6.2 推荐的上下文组装策略建议做1. 优先最新版本 2. 优先官方来源 3. 过滤 deprecated 文档 4. 去重高度相似 chunk 5. 按章节顺序排列 6. 控制总 token 长度 7. 给每段资料标明来源、标题、更新时间推荐上下文格式【资料1】 来源2025 员工休假制度 章节第三章 年假规则 生效时间2025-01-01 内容正式员工入职满一年后每年享有 5 天年假。 【资料2】 来源HR 常见问题 更新时间2025-03-10 内容试用期员工不享受年假。这样模型更容易基于证据回答也更方便后续做引用溯源。7. 第五层Prompt 约束Prompt 是必要的但不是唯一手段。它主要解决生成阶段的问题让模型1. 只基于参考资料回答 2. 不知道就说不知道 3. 不编造资料中没有的事实 4. 遇到冲突时说明冲突 5. 回答时列出引用来源7.1 推荐 Prompt 模板你是一个知识库问答助手。请严格根据【参考资料】回答用户问题。 要求 1. 只能使用参考资料中的信息。 2. 如果参考资料不足以回答请直接说“根据当前资料无法确定”。 3. 不要编造未出现在资料中的事实、数字、政策、时间。 4. 如果资料之间存在冲突请指出冲突并优先使用更新时间最新、来源更权威的资料。 5. 回答后列出引用的资料编号。 【参考资料】 {context} 【用户问题】 {question}7.2 Prompt 的局限Prompt 不能解决没有检索到正确资料 检索到了旧资料 chunk 切分不合理 知识库本身存在冲突 metadata 过滤错误所以 Prompt 应该作为最后一层约束而不是唯一方案。8. 第六层拒答机制RAG 系统必须允许模型说“不知道”。如果强行要求模型必须回答幻觉概率会明显上升。8.1 推荐拒答条件可以设计这些规则1. 检索结果相似度低于阈值 → 拒答 2. Reranker 分数低于阈值 → 拒答 3. 上下文中没有直接证据 → 拒答 4. 多个资料互相冲突且无法判断权威性 → 拒答 5. 用户问题超出当前知识库范围 → 拒答8.2 拒答话术示例根据当前知识库资料无法确认这个问题的准确答案。建议补充相关文档后再查询。或者当前检索到的资料不足以支持一个确定答案因此不能直接给出结论。9. 第七层答案生成后校验生成答案后可以再加一层校验检查答案是否被资料支持。9.1 LLM 自检让模型检查自己的答案请检查下面答案中的每个关键结论是否都能被参考资料支持。 如果不能支持请删除或标记为“资料不足”。9.2 引用校验要求每个关键结论带来源员工入职满一年后享有 5 天年假。[资料1] 试用期员工不享受年假。[资料2]如果某句话没有引用来源说明这句话风险较高。10. 第八层生成参数控制生成参数也会影响幻觉。RAG 场景一般追求准确、稳定、少幻觉不追求创造性。推荐设置temperature 0 ~ 0.3 top_p 0.9 ~ 0.95企业知识库、客服、规章制度问答可以更保守temperature 0 top_p 0.9但要注意低 temperature 只能降低随机发挥不能保证事实正确。如果检索内容本身是错的模型会基于错误内容稳定地输出错误答案。11. 第九层评估集和监控RAG 系统不能只靠感觉调参需要建立评估集。11.1 评估集应包含1. 用户问题 2. 标准答案 3. 应该命中的文档 4. 应该命中的 chunk 5. 是否允许拒答 6. 业务重要等级11.2 核心评估指标建议关注1. 检索召回率正确 chunk 有没有被召回 2. 重排准确率正确 chunk 是否排在前面 3. 答案忠实度答案是否完全基于上下文 4. 答案完整性有没有漏掉关键条件 5. 拒答准确率资料不足时有没有正确拒答 6. 引用准确率引用的资料是否真的支持答案否则很容易出现这个问题好了另一个问题坏了。12. 推荐的完整 RAG 防幻觉流程一个比较成熟的流程可以设计为用户问题 ↓ Query 改写 / 扩展 ↓ 混合检索向量检索 BM25 ↓ 召回 top50 / top100 ↓ Reranker 重排 ↓ 过滤低分 chunk ↓ 去重 版本过滤 权限过滤 ↓ 组装带来源的上下文 ↓ 低 temperature 生成 ↓ 要求引用来源 ↓ 答案校验 ↓ 低置信度则拒答13. 实战优先级如果正在开发一个 RAG 项目可以按下面优先级治理幻觉优先级要做的事作用1清理知识库处理旧文档、重复文档、冲突文档避免源头污染2优化 chunk 切分避免上下文缺失3提高 topK加入 Reranker提高检索准确率4使用 metadata 过滤版本、权限、来源避免检索错范围5Prompt 要求基于资料、可拒答、带引用约束生成6设置低 temperature降低随机发挥7答案生成后校验防止最后输出乱编8建立评估集持续测试长期稳定优化14. 最终总结大模型 RAG 的幻觉治理不是单点优化而是一个系统工程。完整方案应该是高质量文档源 合理切分 高召回检索 Reranker 精排 metadata 过滤 干净的上下文组装 严格 Prompt 低随机参数 拒答机制 答案校验 评估监控一句话记忆RAG 防幻觉的关键是让模型只基于正确、完整、可信的证据回答当证据不足时系统要允许它拒答而不是强行编答案。