Skip to content

大模型幻觉:成因、分类与缓解策略

摘要: 针对大语言模型在文本生成中普遍存在的幻觉问题,从定义与分类出发,将幻觉划分为事实性幻觉(实体错误、关系错误、数值错误、时空错误)和忠实性幻觉(指令遗忘、上下文矛盾、过度推断、信息编造)两大类型。随后从训练数据局限性、自回归生成的累积误差、概率模型的内在矛盾以及注意力机制的局限性四个维度系统分析了幻觉的产生机理。在此基础上,详细阐述了RAG检索增强生成、Grounding事实锚定、约束解码和事实性校验四种主流缓解策略的原理、效果与适用场景。最后,从生成机制同源性的视角探讨了幻觉与创造力之间的模糊边界,提出在不同风险等级场景下应采取的差异化治理策略。

1. 引言

幻觉是 LLM 领域最受关注也最棘手的问题之一。2025 年的一项调查显示,超过 60% 的企业 AI 采用者将幻觉列为阻碍生产部署的首要障碍。这不仅是一项技术挑战,更是涉及信任、安全与伦理的复杂议题。

首先需要澄清一个常见误解:LLM 的核心能力在于"生成概率上合理的文本",而非"检索记忆中的事实"。它本质上是一个高度复杂的"下一个 token 预测器",而非数据库。

理解这一点后,幻觉便不再是"缺陷",而是该技术范式固有的特性。

2. 幻觉的定义与分类

2.1 事实性幻觉——模型生成的内容与客观事实不符

事实性幻觉的典型表现:


用户: "2022 年世界杯冠军是谁?"
模型: "2022 年世界杯冠军是巴西队。"  ← 错误,实际是阿根廷

用户: "鲁迅的代表作有哪些?"
模型: "鲁迅的代表作包括《呐喊》《彷徨》《围城》。"
                                      ↑ 《围城》是钱钟书的作品

事实性幻觉又可以细分:

子类型定义示例
实体错误把实体 A 的属性安在实体 B 上"贝多芬写了《命运交响曲》和《致爱丽丝》...还有《献给爱丽丝的月光》"(编造了不存在的作品)
关系错误实体间的逻辑关系不对"爱因斯坦发明了原子弹"(他参与了理论,但不是他发明的)
数值错误数字、日期、统计值不准确"珠穆朗玛峰高 9,848 米"(实际是 8,848.86 米)
时空错误时间线或地点不对"张艺谋 2024 年执导了《哪吒 2》"(导演是饺子)

2.2 忠实性幻觉——模型生成的输出偏离了用户指令或给定的上下文。

忠实性幻觉的典型表现:

System Prompt: "你只能回答关于编程的问题。"
User: "推荐一本小说吧。"
Model: "好的,我推荐《百年孤独》,这是一本伟大的小说。"
        ← 模型违反了 System Prompt 的约束,虽然小说确实存在

上下文: "用户小王是一名素食者。请根据他的饮食偏好推荐餐厅。"
Model: "我推荐这家牛排馆,他们的招牌菲力牛排是一绝。"  
        ← 忽略了上下文中"素食者"的关键约束

忠实性幻觉的常见类型:

类型 1:指令遗忘
  上下文明确说"以 JSON 格式输出",模型却输出了普通文本

类型 2:上下文矛盾
  上下文中两处信息矛盾时(如"预算是 100 万"但后面又说"上限 50 万"),
  模型可能随意选择一个或混淆两者

类型 3:过度推断
  上下文说"用户喜欢户外运动",模型推断"用户一定喜欢攀岩"并据此推荐
  ← 这个推理步骤缺乏依据

类型 4:信息编造
  上下文中没有某个信息,模型凭空捏造。
  例如上下文只说"项目延期了",模型补充"项目延期是因为团队成员请假"
  ← 事实可能成立,但没有依据

一个可能同时包含两种幻觉的例子

User: "请根据以下客服对话记录总结客户的问题:
      客户:我上个月买的手机屏幕出现了黑线,而且电池半天就没电了。"

Model: "客户于 2023 年 3 月(编造了具体日期)购买了一部 iPhone 15(编造了机型),
        主要投诉屏幕质量问题以及电池续航不足。建议客户前往 Apple Store 进行维修
        (从'手机'推断为'iPhone',从'维修'推断为'Apple Store')。"

这里既有事实性幻觉(编造日期和机型),也有忠实性幻觉(过度推断产品品牌和维修渠道)。

3. 幻觉产生的原因分析

幻觉并非由单一因素导致,而是 LLM 工作机制中多个环节相互作用的结果。

3.1 原因一:训练数据的局限性

训练数据的问题链:

  互联网文本(训练数据源)

    ├─ 包含大量错误信息(维基百科也不是 100% 正确)
    ├─ 存在矛盾信息(同一话题的不同观点/事实版本)
    ├─ 信息不完整(很多知识在训练数据中缺失或稀疏)
    └─ 有时序滞后(模型训练截止日期之后的新闻和发现)


  模型学到的不是"真理",而是"文本中常见的模式"


  面对低频或训练数据中不存在的事实,模型容易"脑补"

关键洞察

训练数据决定了模型的"知识上限"。一个从未在训练数据中见过量子计算详细解释的模型,在被问及量子计算时只能"猜测"——而这些猜测大概率是错的。

3.2 原因二:自回归生成的累积误差

自回归生成的级联错误

Step 1: 模型预测 "爱因" → 正确
Step 2: 模型预测 "爱因斯" → 正确
Step 3: 模型预测 "爱因斯坦" → 正确
Step 4: 模型预测 "爱因斯坦在" → 正确
Step 5: 模型预测 "爱因斯坦在 1" → 似乎合理...
Step 6: 模型预测 "爱因斯坦在 19" → 还在合理范围
Step 7: 模型预测 "爱因斯坦在 192" → 年份还在正确轨道
Step 8: 模型预测 "爱因斯坦在 1921 年" → 仍合理
Step 9: 模型预测 "爱因斯坦在 1921 年发明了" → 开始出问题
Step 10: 模型预测 "爱因斯坦在 1921 年发明了原子弹" → 幻觉已形成!

问题:第 3 步的微小偏差在第 10 步被放大为事实错误。
      且一旦"发明了"这个动词被采样,模型基于"已有文本的一致性"会倾向于
      继续完成一个"通顺"的句子,而不是停下来检查事实。

3.3 原因三:概率模型的内在矛盾

LLM 在每个位置选择 token 时,本质是在完成一个概率优化问题——最大化序列的整体概率。但"概率最高的文本"不等于"事实正确的文本"。

考虑这个问题:"法国的首都是___"

训练数据中统计:
  "法国的首都是巴黎" → 出现 9,500 次
  "法国的首都是伦敦" → 出现 15 次(讽刺/错误语境)
  "法国的首都是马赛" → 出现 50 次(马赛是法国第二大城市,有人混淆)

概率分布:
  "巴黎"  → 99.1%   ← 大概率正确
  "马赛"  → 0.5%    ← 有一定概率被采样到(如果用温度 > 0 的采样)
  "伦敦"  → 0.15%   ← 极小概率,但仍有可能

→ 即使在这么简单的问题上,采样一万次也可能产生 50 次"马赛"幻觉

对于训练数据中更稀疏的事实,错误概率会急剧升高。

3.4 原因四:注意力机制的局限性

LLM 的注意力虽然强大,但在长上下文中并不完美:

  • "Lost in the Middle":中间位置的上下文信息容易被忽略
  • 注意力稀释:上下文越长,每个 token 获得的"注意力份额"越小
  • 虚假关联:模型可能将上下文中两个不相关但同时出现的概念错误关联

4. 缓解策略

幻觉无法被完全消除,但可以通过多种策略大幅降低。

4.1 策略一:RAG(Retrieval-Augmented Generation)

RAG 的核心思路:

  不让模型靠"记忆"回答 → 给模型提供实时检索到的参考资料

  ┌──────────────┐
  │  用户问题     │
  │ "公司 Q3 财报 │
  │  利润多少?"  │
  └──────┬───────┘


  ┌──────────────┐     ┌──────────────┐     ┌──────────────┐
  │  向量检索     │ ──→ │  找到 Q3 财报 │ ──→ │  生成引用答案 │
  │  知识库       │     │  相关段落     │     │  "利润为 3.2  │
  └──────────────┘     └──────────────┘     │   亿元"       │
                                            └──────────────┘

  RAG 不是"让模型更聪明",而是"让模型不需要聪明"——需要的知识直接提供给它

RAG 是目前企业级应用中最重要且最实用的幻觉缓解手段。它把"模型需要记住事实"的问题转化为了"模型需要理解并引用给定文本"的问题——后者正是 LLM 的强项。

4.2 策略二:Grounding(事实锚定)

Grounding 要求模型将生成的每个事实性论断"锚定"到具体的来源

无 Grounding:
  "巴黎是欧洲最大的城市。" ← 谁说是最大的?依据是什么?

有 Grounding:
  "根据 2024 年联合国人口统计数据,巴黎大都会区人口约 1,300 万,
   在欧洲城市中排名第 X。" ← 每个数字都有来源可查

Grounding 在实践中通常通过以下方式实现:

  • 引用溯源:要求模型在输出中标注信息来源(页码、链接、数据出处)。
  • Web Grounding实时联网搜索,将生成内容与搜索引擎结果交叉验证
  • 知识库 Grounding:限定模型只能引用指定知识库内的信息,禁止凭空发挥。

4.3 策略三:约束解码(Constrained Decoding)

在解码阶段施加硬性约束,阻止模型生成不可能的 token 序列:

示例:让模型输出 JSON

  无约束解码:可能输出 "{'name': '张三', 'age': 30,}"  ← 非法 JSON

  约束解码:通过语法约束,强制每一步只能选择符合 JSON 语法规则的 token
    第 1 步必须输出 "{"
    第 2 步必须是 键名 的合法字符
    ...
    → 最终输出 100% 是合法 JSON

  应用于事实生成:
    定义一个"可接受事实"的白名单/约束集
    模型在生成时只能在预验证的事实范围内选择
    → 虽然灵活性降低,但准确性接近 100%

约束解码的一个具体应用是 structurally constrained generation——通过定义输出格式 Schema 来限制模型只能生成符合特定结构的内容。Llama.cpp 的 GBNF 语法约束和 OpenAI 的 Structured Outputs 都属于这一类。

4.4 策略四:事实性校验

引入验证机制,在模型输出后、交付给用户前进行事实检查:

多阶段校验流水线:

  模型生成


  ┌────────────────┐
  │ 阶段 1: 规则校验 │  检查日期格式、数字范围、URL 有效性等
  └───────┬────────┘
          │ 通过

  ┌────────────────┐
  │ 阶段 2: NLI 校验 │  用 NLI(自然语言推理)模型检查:
  │                 │  上下文中的信息是否"蕴含"了生成的答案?
  │                 │  如果不蕴含 → 标记为潜在幻觉
  └───────┬────────┘
          │ 通过

  ┌────────────────┐
  │ 阶段 3: 知识库校对│  用搜索引擎/知识库 API 交叉验证关键事实
  └───────┬────────┘
          │ 通过

  交付给用户(附置信度标记)

策略组合效果对比

缓解策略效果成本适用场景
RAG显著降低事实幻觉中等(需维护知识库+向量检索)企业内部知识问答
Grounding让幻觉可追溯低到中等所有需要可信输出的场景
约束解码消除格式性错误结构化输出、API 调用
事实性校验拦截已产生的幻觉高(额外推理成本)高风险决策场景
联合使用最佳效果生产级应用

5. 幻觉与创造力的边界

一个发人深省的视角是:幻觉和创造力可能来自同一机制

  • 创造力的定义: 生成新颖但有用的想法。
  • 幻觉的定义: 生成新颖但不正确的信息。

两者共享一个特征: 生成的内容超出了训练数据中直接出现的模式。区别在于: 接收者的期望和评价标准

案例思考

场景 A: 创意写作
  User: "帮我写一个关于 AI 觉醒的科幻短篇"
  Model: 创造了一个不存在的城市、不存在的技术、不存在的人物
  → 这算幻觉吗?不算——因为用户期待的正是"创造不存在的事物"

场景 B: 事实问答
  User: "AI 领域最重要的论文是哪篇?"
  Model: 提到了不存在的论文标题和作者
  → 这是幻觉——因为用户期待的答案是"真实存在的"

关键区分

同一个生成机制,在不同场景下有不同的评价标准。这就要求我们在设计系统时明确:

  1. 当前任务需要的是事实性还是创造性
  2. 用户对幻觉的容忍度有多高。
  3. 是否需要向用户标明"这是模型生成的内容,可能不准确"。

实践中的平衡之道

高风险场景(医疗、法律、金融):
  事实性 > 一切
  应该:RAG + Grounding + 事实性校验 + 人工审核
  不应该:让模型自由发挥

中风险场景(客户服务、教育辅助):
  事实性 > 创造性
  应该:RAG + 引用标注 + 透明度声明
  可以:适度调整风格和表述方式

低风险场景(创意写作、头脑风暴):
  创造性 > 事实性
  应该:鼓励发散、降低约束、把"幻觉"视为"想象力"
  不需要:严格的约束和校验

思考

幻觉是 LLM 生成式本质的必然副产物。我们不应该幻想"彻底消除幻觉",而应该学会管理幻觉——就像工程学中不追求零故障,而是追求故障的可知、可控、可恢复。