大模型幻觉是其“数据驱动、概率生成” 本质决定的,是当前技术路线下难以根除的特性
出现幻觉的原因:
1. 自回归生成的概率本质(最核心)
大模型本质是概率预测器, 通过上下文计算下一个词的分布概率, 优先追求的是语言的流畅性和统计上的合理性,而非事实的准确性。 当模型不知道答案时,它会更倾向于生成一个在语法上最像答案的词,从而编造出一个通顺但错误的信息;
2. 训练数据的噪声与偏差
预训练数据来自互联网海量文本,其中包含大量错误信息、过时知识、偏见甚至虚构内容。模型在学习语言模式的同时,也内化了这些错误事实。
3. 压缩与泛化的权衡
大模型将知识压缩进有限的参数中。这是一种“有损压缩”,模型记住的是知识的抽象模式和关联,而非精确的数据库索引。
为了具备举一反三的能力,模型必须学会泛化。但这种泛化能力是一把双刃剑,当模型将A领域的规律错误地迁移到B领域,或者在不该联想的地方进行了联想,就会产生幻觉。
4. 信息不足时,模型不知道自己“不知道”
训练数据之外的事 (最新政策、小众专业细节), 模型没有知识, 只能"猜一个最像的"
其他:
5. 推理链误差累积 (早期错误导致后续错误)
6. 上下文限制(信息丢失或注意力不足)
7. Prompt诱导(错误前提导致错误回答)
判定幻觉的核心原理
- 事实一致性(Factual Consistency): 输出内容是否与知识库、参考文档或权威数据源冲突。
原子事实分解:把长回答拆成最小粒度的事实陈述,逐一验证。 证据检索:对每个原子事实,去维基百科、搜索引擎等检索证据,用自然语言推理(NLI)判断证据是否支持该声明。 工具调用:对数值、时间、实体等结构化信息,直接调用计算器、日历、数据库等工具验证。- 自身一致性 / 不确定性估计: 如果模型对同一问题多次生成(不同随机种子或扰动),答案混乱、互相矛盾,则可能产生幻觉。
采样一致性:同样 prompt 生成 N 次,看事实陈述的一致性,高熵处易出幻觉。 token级概率:输出中某些 token 的概率低、模型“犹豫”,往往是编造信号。 内部探测:训练一个分类器读模型隐藏状态,预测该段是否会被事实源否定(如 INSIDE 等方法)。- 逻辑自洽性(Logical Self-Consistency): 回答内部是否自相矛盾,或与输入指令、上下文矛盾。
对回答进行分段,两两用 NLI 检查是否存在“矛盾”关系。 检查是否遵守用户明确约束(如“用不超过50字回答”)。- 不确定性度量(Uncertainty Quantification): 模型在生成该Token时,置信度是否过低,或熵值是否异常升高。面对不可回答的问题强行编造,就是幻觉。
先判断问题是否可答(基于知识库覆盖度、模型置信度),若不可答但模型给出了确定答案,直接判定幻觉。监控幻觉的方案:
核心流程如下:
①拆解——把回答分解为原子事实; ②验证——用外部证据、NLI、工具等手段逐条核验; ③探测——用一致性、不确定性、自矛盾发现隐藏的编造; ④融合——多信号综合判定是否有幻觉; ⑤量化——统计幻觉样本占比,得到幻觉率;实施方案:
- 拆解:把回答分解为原子事实
原子事实”,就是可以独立判断真假的最小事实单元。
例:“苹果公司由史蒂夫·乔布斯创立,总部在库比蒂诺。” 拆分成 ① 苹果公司由史蒂夫·乔布斯创立 ② 苹果公司总部在库比蒂诺 提示词 你是一个事实拆解器。 请将下面的回答拆成多个原子事实。 要求:2. 每个原子事实必须是一个可以独立验证的陈述。3. 不要合并多个事实。4. 保留原文中的实体、时间、数字、条件。5. 对主观表达、建议、观点单独标注,不视为可验证事实。6. 输出 JSON。- 验证:用外部证据逐条核验
核心: 每一个原子事实,都应该能找到支持、反对或无法验证的证据。
流程: 对每个原子事实,生成一个搜索查询。 调用搜索引擎 API(Google/Bing 或自有索引)获取 top-k 片段。 用 NLI 模型判断“证据是否支持该声明”(三分类:支持、矛盾、信息不足)。 任何原子事实被判为“矛盾”,该回答即存在事实性幻觉。 对于数值/时间类事实,直接抽取值进行严格比对或调用工具。 可选技术: 直接使用 OpenAI 的 WebGPT 思路、Perplexity 的在线验证模式,或开源方案如 Self-CheckGPT、FacTool等- 探测:发现没有明确证据也能识别的风险信号
现实中很多幻觉无法立刻找到外部证据反驳。例如模型编造了一个看起来很合理但搜索不到来源的论文;
1. 一致性: 对同一个问题采样多次,看答案是否稳定。2. 不确定性: 如果模型能拿到 logprobs,可以观察生成过程中的不确定性。 不确定性重点看: 关键实体 token 的概率; 数字 token 的概率; 时间 token 的概率; 人名、公司名、产品名 token 的概率; Top-k 候选是否分散; 生成熵是否异常高。3. 自矛盾探测: 检查一个回答内部是否冲突。- 融合:多信号综合判定是否有幻觉
第一层:硬规则一票否决,以下情况直接否决 明确与权威知识库矛盾。 数学计算错误。 代码执行结果不一致。 结构化数据库查询结果冲突。 回答内部出现强矛盾。 引用了不存在的法规、药品、标准、API。 高风险领域给出确定性结论但完全没有证据 第二层:软信号加权;不能单独定罪,但可以累积风险分。 例如|信号|含义|建议权重||---|---|---:||外部证据不支持|无法验证|中||多次采样不一致|模型不确定|中||关键实体低置信度|可能在编造|中低||无来源引用|引用风险|中高||高语义熵|回答不稳定|中||内部轻微矛盾|逻辑风险|高||用户负反馈|真实世界信号|高||高风险领域|医疗/法律/金融|加权||数字/时间错误|事实错误|高|第三层:最终判定;建议不要只输出“有幻觉 / 没有幻觉”。 而是{"answer_id":"xxx","hallucination_label":"high_risk","hallucination_score":0.82,"reason":["claim_3 与知识库矛盾","claim_5 无法验证且包含具体数字","采样一致性较低"],"claims":[{"claim_id":3,"text":"该公司2023年营收超过10亿元","verification":"contradicted","evidence":"内部资料显示2023年营收为6.8亿元"}]}- 量化:如何计算幻觉率
① 样本级幻觉率=被判为幻觉的回答数 / 总回答数 例如: 例如评估1000条回答,其中37条被判定为幻觉,样本级幻觉率=37/1000=3.7% ② 事实级幻觉率,以原子事实为单位。 claim级幻觉率=被判为幻觉的claim数 / 可验证claim总数 总回答数:100,拆出可验证 claims:1200,被反驳或高风险 claims:48,claim级幻觉率=48/1200=4% 这个指标更适合工程优化。因为它能告诉你:到底是哪类事实最容易出错。 另外还可以按场景拆分,按时间拆分;注意事项:
①拒答率要和幻觉率一起看。如果模型为了降低幻觉率,什么都回答“不知道”,幻觉率会下降,但可用性也会下降。
②幻觉监测可以分为: 在线风险拦截系统(实施发现高风险回答), 离线质量评估系统(精确统计幻觉率);
防幻觉方案:
注意事项: 幻觉只能降低,无法消除
一、事前:防患于未然
- 精调推理参数 (成本最低的第一道防线,不改模型不改数据,调参即可生效。)
① Temperature: 调低至0.1~0.3,使输出更保守确定,减少随机性幻觉 ② Top-p 核采样: 设为0.7~0.85,限制模型只从高概率词中选择,进一步收窄生成空间 ③ Max Tokens: 合理限制最大输出长度,防止长文本生成中“跑偏”或过度发挥 ④ Repetition Penalty: 设置重复惩罚,避免模型因重复生成陷入错误循环(保留原方案)- 模型选型与领域微调(从源头提升模型的事实准确度。成本较高)
① 领域微调模型: 垂直场景(医疗/法律/金融)优先使用领域微调模型,对术语和事实的记忆更准确 ② 更大基座模型: 条件允许时选择参数量更大的模型,通常事实记忆更准确、幻觉率更低(新增)③ DPO/RLHF 对齐: 微调时加入拒答样本,用对齐训练惩罚编造行为、奖励诚实表达(保留原方案)- Prompt 约束(软规则 + 负样本)通过指令和示例约束模型行为,成本最低的引导手段。
① 明确规则: 强制标注来源、要求拒答、禁止编造 ② Few-shot 负样本: 用具体错误示范告诉模型“什么不能做”,比单纯说“不要编造”更有效(融合)③ 角色边界设定: 明确告知模型“你是检索助手,不是知识专家”(保留原方案)提示词: SYSTEM_PROMPT="""1. 回答中的每个事实点必须标注来源编号,如[1][2]2. 如果信息不在提供的资料中,必须回答"资料中没有相关信息"3. 严禁编造法条、数据、引用,不确定就说不确定4. 以下是一些错误示范(负样本案例): - ❌"根据民法典第1523条..."→ 资料中没有该条文时严禁编造 - ❌"数据显示增长率为15.3%"→ 资料中没有具体数据时严禁编造 ✅ 正确做法:"资料中没有相关信息,无法确认。""""- 结构化锚定 / 约束解码(高风险场景专用)
对于零容忍场景,不让模型自由生成事实,而是限制其输出空间。 (保留原方案独有)
① 模板填充: 预定义回答模板,模型只填充变量槽位,槽位值来自结构化数据库 ② 约束解码: 解码阶段用知识图谱/数据库限制下一个 token 候选集,确保生成的实体在库中真实存在 ③ 选项式生成: 将开放问答转为多选题,模型只能从给定选项中选择二、事中:过程监管与约束
- 检索命中过滤(RAG)
RAG 黄金规则:答案只能基于检索到的内容,将“闭卷”变“开卷”。
① 强制闭卷作答: 模型只能基于检索到的 Top-K 片段回答,片段中没有的信息不得编造 ② 混合检索 + 重排序: 向量检索 + BM25 关键词检索提高召回率;Reranker 将最相关文档排前面(融合)③ 时效性/权威性过滤: 剔除过时文档(已废止法条、旧版指南),确保输入质量(保留原方案)- 思维链(CoT)+ 自一致性(Self-Consistency)
让推理过程可视化,并通过多次采样过滤偶发错误。
① CoT 推理可视化: 强制模型先展示推理步骤再给答案,便于发现逻辑漏洞 ② Self-Consistency: 同一问题生成3~5 次回答,选择最一致的答案,减少单次随机错误(融合)③ 中间步骤一致性校验(进阶): 不仅校验最终答案,还对多次生成的中间推理步骤做一致性检查(融合)- 自适应反思循环
超越传统 CoT,让模型对自身推理进行迭代式自我批判和动态修正。
① 生成 → 自我批判 → 修正 → 再生成: 模型在给出答案后,主动审视自己的推理是否存在跳跃、遗漏或矛盾 ② 效果: 研究显示可将幻觉率降低约30%,显著优于传统 CoT 和 Self-Consistency ③ 适用场景: 复杂多跳推理、需要综合多个片段信息的问答三、事后:验证、校验与兜底
8. 引用硬校验
9. 独立事实核查
10.置信度阈值与风险指数
8,9,10 参考幻觉检测
粗略的硬校验: ① 引用存在性校验: 解析所有[编号],验证是否对应到真实的检索片段,防止“编造引用编号” ② NLI 语义蕴含校验: 用自然语言推理模型判断“答案中的这句话”是否被“引用的原文”所蕴含,防止张冠李戴(融合)- 人类在环(Human-in-the-Loop)
最后一道安全阀,用人类判断兜底。
① 高风险场景必审: 医疗诊断、法律判决、金融交易等场景,设置人工审核环节(融合)② 主动学习策略(轻量级): 人工仅审核模型最不确定的输出(如置信度最低的10%),以最小人力覆盖最大风险(融合)③ 幻觉反馈闭环: 将人工审核发现的幻觉案例回流到微调数据集和评测集,持续迭代(保留原方案)最后11层校验,不用一次性上满; 通常按场景分级部署:
场景1: 闲聊/创意: 1(精调推理参数) + 3(Prompt 约束)
场景2: 一般知识问答 1(精调推理参数) + 3(Prompt 约束)+ 5(检索命中过滤)+8(引用硬校验)
场景3: 专业领域问答 根据成本,和需求能上多少上多少
场景4: 高风险决策(法律/医疗/金融): 全部 11 层拉满