AI 模型为什么会产生幻觉?
流利、自信、错误。幻觉不是系统里的 bug——它直接来自这个系统被造出来要做的那件事。
先动手,再深入阅读
找出原文没有依据的说法 · 6 分钟模型跟你讲一篇根本不存在的论文,作者像模像样,期刊名也齐全。它引用一个库里从来没有过的 API 方法。它用十足的把握说出一个日期,而这个日期是错的。
这不是故障。这是系统完全按设计在工作,而搞懂其中的原因,会改变你用它的方式。
根本原因
语言模型被训练来做一件事:生成看似合理的续写。这就是它的全部目标。
「合理」与「真实」大面积重合——真实的说法通常就是最合理的续写,这也是这些模型有用武之地的原因。但目标函数只优化前者,两者一旦分道扬镳,赢的总是「合理」。整个流程里没有任何一处单独去核对真假。
看一个请求:Cite a paper about transformer efficiency.
模型见过成千上万条引用,它知道那个形状:像样的作者名、像样的标题、真实存在的会议或期刊、像样的年份。生成一个具备这种形状的东西,正是它被训练要做的事。整个机制里没有任何东西能区分「复现一条我记住的引用」和「造一个引用形状的东西」。
四种机制
除了根本原因,还有四种具体的动力会造出幻觉。
知识弥散在参数里
模型内部没有数据库。事实以统计结构的形式散布在参数里,这意味着它们是渐变的,而不是非有即无。
有充分佐证的事实很稳。只在训练里出现过三次的事实则是一道很淡的模式,重建出来只是差不多对——形状对,细节错。模型分不清这两种情况,因为两者在生成时感觉一模一样。
单向生成,无法回改
生成是单向的。token 一旦输出就被固定下来。
如果模型写下 The three main causes are:,而像样的原因只有两个,它就会编出第三个。是语法结构逼着它往下写。人类写作者会删掉这句重写,模型没有这个动作可用。
相当多的幻觉都是这么来的——不是不知道,而是一个已经架好、正等着往里填内容的骨架。
缺少校准的自我认知
模型输出的是下一个 token 上的概率分布。分布很尖,说明模式很强,不说明事实经过核实。
所以「我很确定」和「我完全不知道」能生成出同样流利的输出。确定的语气是从训练文本里学来的文体特征,与内容是否有据可依毫无关系。
指令遵循的压力
偏好训练奖励有用的回答,作答比拒绝更受奖励。这带来一种轻微但真实的偏向:总得给出点什么——这也是为什么明确允许「我不知道」会可测量地改变行为:你在对抗一个训练出来的倾向。
最容易出幻觉的地方
幻觉的分布是可以预测的,集中在这些地方:
- 具体的引用、URL、页码——细节多、重复少的事实
- 数字和日期——看着合理的值,没有任何东西锚定它
- 冷门技术细节——API 方法、配置开关、特定版本的行为
- 训练截止之后的任何事——包括「截止点存在」这件事本身
- 不常见的实体——真实存在,但很少有人写
- 长因果链——错一步就会一路自信地传下去
反过来,让它处理你提供的文本时幻觉要少得多,因为原始材料就在上下文里。
真正能减少幻觉的做法
把资料给它。RAG是现有手段里最有效的:把相关文档放进上下文,让模型照着它们作答。这就把记忆问题变成了阅读理解问题,而模型干后者强得多。
明确允许它拒答。「如果提供的文档里没有答案,就说没有」这句话管用,原因就是它抵消了那个被训练出来的作答倾向。
**要求它引用给定文本。**问它每条结论出自哪一段,没有依据的结论就会暴露出来。这招只对提供的文档有效——让模型凭记忆给引用,产出的正是你想避开的那个失败。
先让它推理。思维链能让错误可检查,也减少乱跳步骤。
**调低 temperature。**只降低方差,不减少错误。一个自信的错误答案会变成可复现的错误答案。它有用在稳定性上,不在准确性上。
**在模型之外核实。**任何后果重大的事,都拿源头对一遍。这是唯一真正可靠的办法。
不管用的做法
问模型它自己确不确定。它会生成一句「把握形状」的话,依据并不比原来的说法多。自报的信心是生成出来的文本,不是内省。
让它「只陈述事实」。指令没法给架构装上一个它没有的能力。
一个更有用的理解框架
幻觉不是等着打补丁的缺陷。它是一个以「生成合理续写」为目标的系统必然要付的代价,而「合理」也正是这些模型一切有用之处的来源。
所以真正该问的从来不是「这个模型准不准」,而是:**如果它错了,我会发现吗?**会,就放心用。不会,你就需要检索、核实,或者换一个工具。
要点回顾
- 模型优化的是合理,不是真实;机制里没有任何真假核对。
- 四种机制:弥散的知识只会退化成「差不多」,单向生成无法回改,信心未经校准,以及被训练出来的作答偏向。
- 高发于引用、数字、冷门技术细节和训练截止之后的话题。
- RAG 加上明确允许拒答,是最有效的缓解手段;调低 temperature 只降低方差。
- 问模型「你确定吗」得不到任何有用信息。