Hallucination(幻觉)
大模型生成看似合理但事实上错误或虚构的内容。幻觉是 LLM 最大的可靠性挑战,无法完全消除,但可以通过多种方法缓解。
什么是幻觉
幻觉(Hallucination)是指大模型生成的内容看起来正确但实际上是错误的。包括:
- 事实性幻觉 — 编造不存在的事实("鲁迅于 1950 年获得诺贝尔文学奖")
- 来源性幻觉 — 虚构引用来源(编造不存在的论文/URL)
- 能力性幻觉 — 声称能做做不到的事("我可以访问互联网")
- 代码幻觉 — 调用不存在的 API/函数/库
为什么会产生幻觉
根本原因:概率生成
大模型的本质是"预测下一个最可能的 token"。它不是在检索事实,而是在做概率推理。当训练数据中缺乏确切信息时,模型会根据语言模式生成"看起来合理"的内容。
关键认知:幻觉不是 bug,是 LLM 的架构特征。没有任何技术能 100% 消除它,只能压低发生率和影响范围。
具体原因
- 训练数据不足 — 对某个话题了解不够,靠"猜"
- 知识截止 — 训练数据有截止日期,不知道最新信息
- 过度泛化 — 把某个领域的模式错误应用到另一个领域
- 指令模糊 — 用户的问题不够明确,模型自由发挥
- 上下文冲突 — 上下文中有矛盾信息,模型选择"自圆其说"
- RLHF 的副作用 — 训练时被奖励"自信地回答",于是不知道也硬答
幻觉的典型表现
1. 编造 API
用户:FastAPI 怎么做 WebSocket 广播?
模型:使用 FastAPI 的 broadcast() 方法... ← 这个方法不存在
2. 虚构引用
用户:注意力机制最早是谁提出的?
模型:根据 Smith et al. (2017) 的论文... ← 这篇论文不存在
3. 混淆概念
用户:MCP 和 A2A 有什么区别?
模型:MCP 是 Google 提出的... ← MCP 是 Anthropic 提出的
4. 数字 / 单位幻觉
用户:GPT-4 的训练数据有多少 token?
模型:GPT-4 的训练数据约 13 万亿 token... ← 数字凭感觉
主流幻觉评测基准
知道怎么衡量,才能比较不同方案。常用基准:
| 基准 | 关注点 | 评测方法 |
|---|---|---|
| TruthfulQA | 模型在易误导问题上的真实性 | 多选 + 人评,看是否被常见误解带偏 |
| HaluEval | 摘要 / QA / 对话三类场景的幻觉率 | 生成 vs 标注事实对比 |
| FActScore | 长文事实密度 | 拆原子事实再 verify |
| SimpleQA(OpenAI) | 开放问答的事实准确率 | 标准答案匹配 |
| Vectara HHEM | 摘要场景幻觉 | 专门训练的 detector 打分 |
实务中不要只看一个基准。模型 A 在 TruthfulQA 高、SimpleQA 低,说明它"会拒答易错题但事实知识不丰富"——这跟你的业务匹配吗?
如何缓解幻觉
1. RAG(检索增强生成)
最有效的方法。在生成回答前先检索知识库,让模型基于真实文档回答。
用户提问 → 检索知识库 → 检索到的文档 + 问题 → 模型生成 → 引用来源
注意:RAG 降低而非消除幻觉。模型仍然可能:
- 忽略检索结果,按自己"知道的"答
- 把检索结果里的信息张冠李戴
- 检索没命中时强答
详见 RAG。
2. Grounded Generation:强制引用
在 prompt 里要求每一句话都标注来源,没有来源的不能说:
你必须严格遵守:
1. 只基于 <context> 内的信息回答
2. 每个事实陈述后用 [doc-1] [doc-2] 标注来源
3. 如果 context 里没有,回答"提供的资料未涵盖这一点"
4. 不要补充任何 context 外的"背景知识"
GPT-5 / Claude Sonnet 4 / Gemini 2.5 对此类指令服从度较高,老模型容易"指令听了一半"。
3. Verifier 二阶段
让另一个 LLM(甚至同一个 LLM 第二轮)专门检查首轮输出:
[生成 Agent] [Verifier Agent]
回答 + ─────────────► 逐句核对 context
引用 输出:✓ 准确 / ✗ 幻觉句
↓
有幻觉则要求重写
代价:token 翻倍 + 延迟翻倍。但对法律 / 医疗 / 金融场景是必要投入。
4. 要求标注不确定性
在 prompt 中要求模型标注信心程度:
回答时标注你的信心程度:
[确定] 基于事实的回答
[推测] 基于推理的推测
[不确定] 缺乏足够信息
5. 限定回答范围
如果不知道,直接说"我不知道"。
不要编造信息。
只基于提供的上下文回答。
6. 交叉验证
对同一问题多次提问(不同温度 / 不同 prompt 变体),比较答案的一致性。不一致的部分大概率含幻觉。
7. 使用推理模型
DeepSeek-R1、GPT-5、Claude Opus 4 thinking 等推理模型在回答前会先"想一想",幻觉率显著低于非推理模型——但会用更多 token,按场景权衡。
8. 温度调低
将 temperature 设为 0 或 0.1,减少随机性,让模型更"保守"。
不同模型的幻觉率
| 模型 | 幻觉率 | 特点 |
|---|---|---|
| Claude Sonnet 4 | 低 | 安全性设计好,不确定时倾向说不知道 |
| GPT-5 | 低 | 推理能力强,幻觉少 |
| GPT-4o | 中 | 偶尔编造,交叉验证可发现 |
| Gemini 2.5 Pro | 中 | 长上下文下"中间遗忘"导致幻觉 |
| 推理模型(o3 / R1 / Claude thinking) | 显著降低 | 思维链过程会自我校验 |
| 国产基础模型 | 中-高 | 英文场景幻觉率更高、专业术语易错 |
生产环境检测 Pipeline
把"靠运气"变成"系统化防御",典型四层:
用户问 → [1] Pre-Retrieval → [2] Generation → [3] Post-Check → 返回
↓ 检索 ↓ grounded gen ↓ 自动 verifier
↓ 强制引用 ↓ 不通过 → 降级回复
具体配置:
| 层 | 做什么 | 工具/手段 |
|---|---|---|
| Pre-Retrieval | 没检索到时直接拒答而非硬猜 | retrieval score 阈值、空召回兜底 |
| Generation | grounded prompt + 强制 citation | system prompt 模板 |
| Post-Check | 句级 verifier 校对 context | LLM-as-judge / Vectara HHEM / 规则匹配 |
| Logging | 记录幻觉案例、归因复盘 | 把 Post-Check 不通过样本采样到评测集 |
经验值:加 Post-Check 一般能把幻觉率再压 30-50%,代价是延迟 +20-40%、成本 +50-80%。
开发者的幻觉检测清单
在应用中处理模型输出时,检查以下信号:
- ✅ 回答中是否包含可验证的事实?→ 查证
- ✅ 是否引用了 URL/论文/文档?→ 验证是否存在
- ✅ 代码是否调用了 API/函数?→ 查文档确认
- ✅ 回答是否与已知事实矛盾?→ 标记冲突
- ✅ 模型是否说"我不知道"?→ 这是好信号,不要惩罚
- ✅ 数字 / 日期 / 单位是否合理?→ 数量级粗算
- ✅ 多次重复提问,结果是否稳定?→ 答案飘忽 = 高幻觉风险
延伸阅读
- 缓解方案:RAG(检索增强生成)
- 控制随机性:Temperature 与 Top-P
- 上下文组装:Context Engineering
- 行为微调:Fine-tuning vs RAG