它本质上在做什么
语言模型的核心任务自始至终只有一个:根据已有的上下文,预测下一个最可能出现的词。然后再把这个词加进上下文,继续预测下一个。
注意:这里没有任何一步是「查资料」或「核实事实」。它生成的是「看起来合理的文本」,而不是「经过验证的陈述」。大部分时候这两者重合,但重合是结果,不是机制。
流畅和正确是两个不同的目标。模型被训练成「生成流畅文本」,而这个训练过程顺带让它学会了很多事实——但事实是副产品,不是目标。当两者冲突时,模型会优先保证流畅。
三个具体的成因
训练目标里没有「承认不知道」
即使模型不确定,它也倾向于给出一个「看起来像答案」的答案——因为在训练数据里,一个完整的答案比「我不确定」更常见。
它无法区分「记得」和「编得像」
对模型来说,一个真实的事实和一个听起来合理但虚构的细节,在内部表征上可能非常接近。它没有元认知——没有「我对这件事的信心是 0.3」这种信号自然浮现。
长尾知识的稀疏
训练数据里出现频率高的内容(主流人物、知名事件),模型记得牢;频率低的内容(具体日期、冷门人名、精确数字),它只能靠「模式」编一个——因为模式比事实更容易学。
这也解释了为什么幻觉特别容易出现在:具体数字、引用来源、精确日期、小众人物上。
哪些应对方法是真正有效的
- 检索增强(RAG):把相关资料放进上下文,让模型基于给定内容回答。有效,因为它把任务从「回忆」变成了「阅读」。但检索不到就无效,检索错了会错得更自信。
- 强制引用:要求模型标出每句话的来源。有效,因为这让编造暴露成本变高。前提是引用可以被验证。
- 允许(甚至鼓励)表达不确定:在后训练阶段加入「不知道就说不知道」的样本。这是目前最直接的对策之一。
- 结构化输出 + 校验:对数字、日期这类易错项,用工具去核对而不是让它生成。
哪些方法不那么有效
「请确保准确」这类提示词效果很有限——它改变的是语气,不是机制。模型会变得听起来更谨慎,但事实错误的概率不会因此显著下降。
「仔细思考」有时有用(尤其对推理类任务),但主要是提升推理链的完整性,对事实性幻觉帮助不大。
一个实用的心态
把模型的输出当成「一个能力很强但从不查证的助手写的初稿」。它的价值在于起草、结构化和提供思路;涉及事实、数字、引用的部分,需要外部验证。
这不是缺陷,而是它的工作原理决定的边界。知道边界在哪,比期待它没有边界更有用。
要点回顾
- 模型只做一件事:预测下一个词。它不查证事实,「看起来合理」和「真实」只是经常重合。
- 流畅和正确是两个目标,冲突时模型通常优先保证流畅。
- 幻觉高发区:具体数字、引用来源、精确日期、冷门人物——因为模式比事实更容易学。
- 有效对策:检索增强、强制引用、允许表达不确定、对易错项用工具核对。
- 「请确保准确」这类提示词主要改变语气,不改变机制。