详细解释
幻觉(Hallucination,台译”幻覺”,行业常用英词原词) 一词借用于精神医学——患者看到/听到实际上并不存在的事物。放到大模型上就是:模型一本正经地输出了”看起来像真的”但实际上不存在、不真实、不正确的内容,而且它自己并不知道那是错的(因为它本质是预测下一个 Token,不是”查知识库”)。
幻觉是 LLM 天生的特性,不是 bug。因为 Transformer 学到的是”语料中的统计关联”,而不是”结构化事实数据库”。它不需要真的”知道答案”,只需要”根据上下文最合理的下一串词是什么”——在某些边界情况下,最合理的一串词碰巧是编造的。
幻觉大致可分三类:
- 事实性幻觉(Factuality):编造假事实,比如”1998 年奥运会举办地是成都”。
- 归因幻觉(Groundedness / Attribution):给 RAG 文档问答时,回答内容并不是从提供的上下文里来的,而是模型”脑补”出来的。
- 忠实度幻觉(Faithfulness):在摘要/翻译/结构化抽取任务中,加入了原文不存在的细节。
OpenAI 的 o1 发布后,幻觉率显著下降但没有消失。
常见幻觉触发场景(高频)
| 场景 | 典型幻觉形式 | 根因 |
|---|---|---|
| 冷门知识提问 | 编造一本不存在的书、一篇不存在的论文 | 训练语料里确实没这内容,模型按统计模式”补齐” |
| 生成引用文献/法律条文 | 编造一个 DOI、法条编号、看起来很正式的引用 URL | 模型会生成”看起来像 DOI”的字符串,但点进去 404 |
| API/SDK 代码生成 | 编造某个库的”便捷方法”,运行报错 AttributeError | 不同版本 API 差异大,模型对不常见版本只能瞎编 |
| RAG 文档问答 | 回答里提到了文档里没有的事实 | 模型凭”外部常识”补齐了,没有严格基于上下文 |
| 长文本数字抽取 | 金额、日期、百分比错了 ±20% | 数字不像文字那样有强上下文约束,模型随机漂移 |
| 人物经历查询 | 给某个人物编一段不存在的工作/学历 | 同名人物信息被混在一起,或者完全胡编 |
降低幻觉的 7 条工程手段(按效果从高到低排序)
| # | 手段 | 大致有效程度 | 落地成本 |
|---|---|---|---|
| 1 | RAG(检索增强生成):把答案严格锚定到你自己的知识库 + 要求每条结论附引用 | 降低 60–80% | 中 |
| 2 | Self-Check / 自检:让模型输出后,再让它(或另一个模型)对自己的每一条结论”打分 + 给证据来源”,不通过就丢弃 | 降低 40–60% | 低(调用次数翻倍) |
| 3 | Prompt 加约束:明确写”如果不知道就回答不知道,不要编造” + “严格基于上面的上下文回答” + 让它先列证据再写结论 | 降低 20–40% | 极低 |
| 4 | 升级到更强的模型:如 GPT-4o / Claude 3.5 Opus / o1 系列 | 降低 30–50% | 模型成本上涨 |
| 5 | 思维链 Chain-of-Thought + 多路径投票:生成 3 条路径选最一致的答案 | 降低 15–30% | 中(调用 3×) |
| 6 | 降低 Temperature:到 0.1–0.3 区间,减少采样随机性 | 降低 10–20% | 极低 |
| 7 | 事实核查 API / 后处理:对数字、人名、日期过一遍搜索引擎或内部数据库 | 特定领域 70%+ | 高 |
唯元智创 在 RAG 类客户场景中,默认在输出后追加”归因检查(Groundedness Check)“节点——对模型回答逐句和 RAG 上下文做语义匹配,不匹配的句子直接剔除或打标,幻觉率平均从 18% 降到 3% 以下。
常见问题
模型说”我不确定”就一定不是幻觉吗?
不一定。也存在”反向幻觉”:正确答案它明明知道,但因为对齐过度、RLHF 过度保守,它会虚假地宣称”不知道 / 我不能回答”(又叫做”Refusal 幻觉”)。两者都要在评测中单独统计。
新模型参数越来越大,幻觉会被彻底解决吗?
短期内不会。模型越大 → 学到的事实越多 → 幻觉率下降(尤其是常识类),但”永远”无法通过单纯的参数增长降到 0。因为只要是自回归生成 + 从统计模式出发,就会有”统计上过半但实际上不对”的边界情况。工程上正确的态度是:永远做 RAG 锚定 + 后处理核查,不要指望模型自己不犯错。
如何量化一个模型的幻觉率?
学术上常用 TruthfulQA、HaluEval 等基准;工程上针对你自己的业务场景构造 500–1000 条有金标答案的问题,然后用三种方式比:(1) 人工评;(2) 让 GPT-4o 等强模型做 LLM-as-Judge 打分(评”是否与事实一致”);(3) 对抽取类任务用精确匹配/F1。行业常见经验:先用 LLM-as-Judge 跑一遍快筛,再人工抽样复核 10% 校准。