为什么叫「幻觉」而不叫「错误」
把一个答案叫「错误」,前提是系统知道正确答案、只是执行时出了岔子——算错的除法题是错误。大模型的情况不同:它给出的编造答案往往在语言层面无懈可击,句式通顺、逻辑自洽、语气笃定,唯一的破绽是与事实不符。这种「流畅而确信的编造」更像精神医学里的幻觉——确信地感知到不存在之物——这个词因此被借来命名了这个现象。理解名字的来历,就理解了问题的关键:幻觉不是可以修掉的 bug,而是生成机制的副产品。
机理:三层原因叠加
第一层:生成机制是「预测下一个最合理的 token」,合理性不等于真实性。 token(词元)是模型处理文本的最小单位。大模型的每一步生成,都在基于上文预测「下一个最合理的 token」。注意「合理」由语言统计规律决定,「真实」需要与外部世界核对,而模型生成时接触不到外部世界。一段编造的文献引用之所以像真的,恰恰因为它的格式、作者名风格、期刊名都符合真实文献的统计特征——它就是「合理的下一个 token」。
第二层:训练目标奖励「像」,不奖励「真」。 模型的训练过程学习的是模仿训练数据中的回答样式,而非核对事实。训练数据里的人类回答大多是有问必答、语气确定的——「不知道」的诚实回答本来就少。模型自然学到「回答问题就该给答案」,而不是「没把握就该承认」。
第三层:参数化记忆是有损压缩。 模型的知识全部存在权重里,本质是把海量文本压缩进固定大小的参数。压缩必然有损:高频事实保存得较好,低频细节(具体页码、小众 API 参数、冷门机构的名称)在压缩中变得模糊。而且模型调用这些记忆时没有「查不到就返回空」的机制——模糊的记忆会被流畅的语言补全成看似确定的答案。
三类最容易踩中的场景
- 追问不存在的细节。 问一篇不存在的论文,模型可能给出标题、作者、年份俱全的编造结果;问一个不存在的 API 参数,它会编出参数名并附上用法示例。提问本身暗示「这个东西存在」,模型倾向于顺着走。
- 超纲任务。 让模型心算多位数乘法、推演很长的逻辑链,它没有对应的可靠计算机制,只能用语言规律「猜」出一条看起来像计算过程的推理路径,步骤越深误差越滚越大。
- 诱导性提问。 「X 项目在 2019 年被叫停的原因是什么?」——问题预设了不存在的「叫停」。模型很可能顺着预设编原因,而不是先质疑前提。
为什么 RAG 能缓解但不能根治
RAG(Retrieval-Augmented Generation,检索增强生成)的思路是:回答前先从外部知识库检索相关文档,拼进上下文让模型「看着材料作答」。有了证据,编造率会显著下降,这是目前最有效的工程缓解手段。
但它不根治问题。模型拿到检索结果后仍可能自由发挥:材料里没有的细节被补全、材料内容被错误综合、证据与模型先验冲突时选择相信先验。所以引用与忠实度(faithfulness,指回答严格基于所给证据的程度)需要单独的工程保证——比如事后用另一个模型逐句比对回答与引用原文,而不是指望模型自觉。
检测思路
- 事实核查式二次校验:把回答拆成一条条事实断言,逐条与可信来源比对。
- 自一致性采样:同一问题独立采样多次,答案相互矛盾说明至少有一次在编。
- 引用溯源比对:要求模型给出处,然后机器核对出处里是否真的包含该陈述。
实用缓解清单
- 提示词里显式授权「不知道就说不知道,没有依据就明确说明」——模型从训练数据学到的默认倾向是有问必答,需要明确允许它拒绝。
- 关键事实类问题接 RAG,并要求回答标注来源,格式具体到段落或页码。
- 适当降低 temperature(温度参数,控制采样随机性,越低输出越稳定)。
- 任务越开放、事实密度越高,越要在流程里安排人工复核;医疗、法律、金融类建议不交给模型独立决策。
- 把「模型承认不知道」当作正常输出接受,而不是想办法逼它必须给出答案。
小结
幻觉是「预测下一个最合理 token」这一架构的固有属性:合理性由语言统计决定,真实性没有内建机制保证,参数化记忆又是有损压缩。能做的是工程化管理——RAG 提供证据、提示词授权说不知道、二次校验兜底、高风险环节留人。目标是管理它:让幻觉在错误成本低的场景自由发挥,在错误成本高的场景被拦住。
读者留言
COMMENTS 暂无还没有留言,来说第一句?