幻觉治理¶
一句话:RAG 仍会幻觉——召回不到时会编、召回噪声时会混、Prompt 没约束时会发散;治理靠"引用回溯 + 置信度阈值 + 知识边界 + 护栏 Prompt"组合拳,江旭尽调场景把幻觉率压到了 0.1%。
概念¶
很多人误以为"用了 RAG 就不会幻觉",这是错的。RAG 把外部知识接进来,但最终生成仍由 LLM 完成,而 LLM 的本质是概率续写,天然倾向"说点什么"而非"承认不知道"。RAG 场景的幻觉主要来自三类:
- 召回缺失型幻觉:知识库里根本没有相关文档,但 LLM 硬基于自身参数知识(可能过时/错误)编一个答案。
- 召回噪声型幻觉:召回了不相关或矛盾的文档,LLM 把噪声当事实,生成张冠李戴的内容。
- 生成发散型幻觉:召回文档是对的,但 Prompt 没限制住,LLM 自由发挥、过度推断,超出文档支持的范围。
治理幻觉不是靠单一手段,而是多重护栏叠加:让 LLM"有出处才说、没把握不说、超范围不答"。
报告标杆(江旭,§5.3 / §5.4):企业尽调报告生成,6 子 Agent 协同 + 幻觉治理,尽调成功率 78%→93%、幻觉率降至 0.1%。报告把"幻觉治理"列为 2026 合格线的关键能力之一。
原理¶
治理手段一:引用回溯(Citation)¶
强制 LLM 生成的每句结论都标注来源(来自哪个文档、哪一段)。作用有两层:
- 生成时约束:Prompt 要求"只能基于以下检索到的文档回答,每条结论后标注 [来源]",本身就是在约束 LLM 不发散。
- 事后可验证:用户/审计能点开引用核对,发现"引用对不上"即可判定幻觉,形成闭环。
实现上,把召回文档编号([1][2]…)随上下文喂入,Prompt 要求引用编号;或在 LlamaIndex/LangChain 里用 Citation 模块自动对齐生成 token 与来源片段。
治理手段二:置信度阈值¶
对召回结果算一个置信度(如 Rerank 分数、向量相似度、或多个模型的投票一致性),低于阈值则不生成答案,改为兜底回复("未在知识库找到相关信息,建议转人工/换个问法")。
- 高阈值:宁可少答也不乱答,幻觉低但拒答率高。
- 低阈值:什么都答,幻觉高但体验"流畅"。
金融、尽调、医疗等高风险场景用高阈值(拒答好过编造);闲聊客服可用低阈值。江旭尽调场景把幻觉压到 0.1%,置信度阈值是关键闸门——召不回足够可信的证据就不出报告。
治理手段三:知识边界(Knowledge Boundary)¶
明确告诉 LLM 它知识的范围,超出范围就承认无知:
- Prompt 写明:"你只能回答 X 领域的问题;若问题超出该领域或检索无果,必须回复'我不知道',禁止编造。"
- 搭配意图分类:query 先判断是否在知识库覆盖范围内,范围外直接拦截(转人工或拒答),不进入生成。
这把"开放生成"收敛成"有界问答",从根本上减少召回缺失型幻觉。
治理手段四:护栏 Prompt¶
用 Prompt 工程加约束,规范生成行为:
- 角色与规则:明确身份、可做不可做("只总结,不推断""数字必须与文档完全一致")。
- 格式约束:要求结构化输出(JSON、带引用),减少自由发挥空间。
- 拒绝指令:明确"如果文档不支持,回答'根据现有资料无法确认'"。
- 负样本约束:在 Prompt 里列举常见错误模式,提醒 LLM 避免。
护栏 Prompt 是成本最低的一环,但单独用不够——必须和引用、置信度、知识边界组合,多层防御。
多重护栏组合(江旭 0.1% 的可能做法)¶
把幻觉压到 0.1%(极低)通常不是单点突破,而是组合拳,一个可能的工程组合:
| 手段 | 作用层 | 拦截的幻觉类型 |
|---|---|---|
| 知识边界 + 意图分类 | 检索前 | 召回缺失型(范围外直接拒答) |
| 混合检索 + Rerank | 检索中 | 召回噪声型(提升证据质量) |
| 置信度阈值 | 检索后/生成前 | 召回缺失 + 低质量(证据不足不出报告) |
| 引用回溯 + 护栏 Prompt | 生成中 | 生成发散型(强制有出处、超范围不答) |
| 人工/规则复核(Multi-Agent 审核者) | 生成后 | 漏网幻觉(金额/合规阈值校验,不通过回退) |
叠加后任一环节漏过的幻觉,会被下游环节兜住,最终残余概率才能逼近 0.1%。
// 护栏 Prompt + 置信度阈值 + 引用回溯(LangChain4j 思路)
String RAIL_PROMPT = """
你是企业尽调助手。请严格遵守:
1. 只能基于【检索到的文档】回答,不得使用文档外的知识。
2. 每条结论必须标注引用编号,如 [1]、[2]。
3. 若文档不足以支持结论,必须回复"根据现有资料无法确认",禁止编造。
4. 数字、金额必须与文档完全一致,不得四舍五入或推断。
检索文档:
%s
问题:%s
""".formatted(numberedContext, userQuery);
// 置信度阈值:Rerank 最高分低于阈值则拒答,不进入生成
if (bestRerankScore < CONFIDENCE_THRESHOLD) {
return "未在知识库找到足够相关信息,建议转人工核实。"; // 兜底,杜绝编造
}
// 引用回溯:记录每段生成内容与来源 chunk 的映射,供审计核对
AnswerWithCitations ans = model.generateWithCitations(RAIL_PROMPT);
# LlamaIndex / LangChain 思路:护栏 Prompt + 置信度 + 引用
RAIL_PROMPT = """你是企业尽调助手,严格遵守:
1. 只基于【检索到的文档】回答,禁用文档外知识。
2. 每条结论标注引用编号 [1][2]。
3. 文档不支持时回复"根据现有资料无法确认",禁止编造。
4. 金额、数字必须与文档完全一致。
检索文档:
{context}
问题:{question}"""
# 置信度阈值:Rerank/相似度不足直接拒答,不生成
if best_score < CONFIDENCE_THRESHOLD:
return "未在知识库找到足够相关信息,建议转人工。"
# 引用回溯:LangChain / LlamaIndex 的 Citation 模块对齐 token 与来源
# LlamaIndex: CitationQueryEngine 自动生成 [n] 引用与来源映射
answer = llm.invoke(RAIL_PROMPT.format(context=numbered_context, question=user_query))
实战要点¶
-
"用了 RAG 就不幻觉"是最大的认知误区:RAG 只是接入外部知识,生成仍由 LLM 完成。承认 RAG 有幻觉、并讲清楚治理手段,才是面试加分项;以为接了向量库就万事大吉是典型红旗。
-
高风险场景置信度宁高勿低:金融尽调、医疗、法律等场景,拒答好过编造。江旭把幻觉压到 0.1%,背后必然是"证据不足就不出报告"的高阈值策略——宁可成功率和为代价(实际反而从 78% 升到 93%,说明质量提升带来采纳率提升)。
-
引用回溯是幻觉治理和合规审计的双重基础设施:既能约束生成、又能事后追责。B 端、金融场景必须做,没有引用的 RAG 答案在合规上站不住。
-
护栏 Prompt 是性价比最高但非充分的一环:写好规则 Prompt 几乎零成本就能降一档幻觉,但 LLM 不保证 100% 遵守 Prompt,必须叠置信度/知识边界等硬拦截。
-
Multi-Agent 审核 + 人工兜底是最后一道闸:彭超的"规划者-执行者-审核者"架构、江旭的 6 子 Agent 协同,审核者/校验子 Agent 基于规则引擎(金额阈值、合规约束)复核输出,不通过则回退重规划或转人工——这把残余幻觉在交付前拦下。
本节相关题目¶
| 难度 | 题目 | 链接 |
|---|---|---|
| 深度 | RAG 幻觉如何治理、引用回溯+置信度+知识边界如何组合、江旭 0.1% 可能做法 | → 题库 |