1. 第一篇:Embedding与向量语义——大模型是怎样“理解”文字的?
  2. 第二篇:Transformer的核心思想——Attention机制直观理解
  3. 第三篇:大模型为什么会有“幻觉”——从训练方式到推理局限
  4. 第四篇:Prompt Engineering——从随意提问到工程化调用
  5. 第五篇:RAG检索增强生成——让大模型学会“开卷作答”
  6. 第六篇:大模型的“记忆”——从上下文窗口到会话管理
  7. 第七篇:大模型API调用——从Token到流式输出
  8. 第八篇:LangChain不是“套壳”——它解决了什么实际问题

前言

如果你用过ChatGPT或任何大模型,你一定遇到过这种情况:

你问:“深度求索公司是哪一年成立的?”
大模型答:“深度求索公司成立于2019年,总部位于深圳……”(一本正经、语气肯定、完全是编的)

这就是大模型幻觉。它不是偶然的bug,而是大模型工作原理的必然产物。理解幻觉的成因,是做好RAG和Prompt Engineering的前提。面试中,面试官也喜欢问:“你说说幻觉的原理,以及你是怎么解决的?”

本文核心问题:

  1. 什么是大模型幻觉?有哪些类型?
  2. 幻觉是模型“故意骗人”吗?从工作机制看根本原因是什么?
  3. 大模型的训练方式如何决定了它“编造事实”的倾向?
  4. 为什么大模型不知道自己不知道?
  5. 温度参数和幻觉有什么关系?
  6. 为什么RAG能减少幻觉?从概率角度看底层逻辑是什么?
  7. Prompt Engineering中防幻觉的策略有哪些?
  8. 幻觉能被彻底消除吗?如果不能,我们应该怎么看待它?

读完本文,你将能从“解码机制”“训练数据”“概率生成”三个维度说清楚幻觉的根源,并对接你项目中用RAG和Prompt约束防幻觉的技术决策。


一、幻觉是什么?——不是偶然的bug

疑问:什么是“大模型幻觉”?它和普通程序出bug有什么不同?

回答:大模型幻觉指的是模型生成了看起来通顺但不符合事实的内容,而且语气极为自信。

1.1 幻觉的几种类型

类型 表现 举例
事实性幻觉 编造不存在的事实 “深度求索公司成立于2019年”
忠实性幻觉 偏离用户指令 让写诗,却输出了一大段散文
逻辑性幻觉 推理过程出现矛盾 数学题中间推导正确,最后结论错误

1.2 幻觉不是“故意骗人”

大模型没有主观意图。它不是在“决定要不要骗你”,而是在完成一个数学任务——生成概率最高的下一个token。只不过这个任务的输出恰好看起来像在编造事实。

关键认知:幻觉是大模型训练目标(预测下一个token)的副产品,而不是独立的设计缺陷。


二、根因一:训练方式——它学的是“说话像人”,不是“说真话”

疑问:大模型到底是怎么训练的?为什么训练方式决定了它可能编造事实?

回答:大模型训练的核心任务是“预测下一个token”,不是“判断事实真假”。

2.1 训练目标决定了它的能力边界

训练语料中的一句话:
  “法国的首都是巴黎。”

模型的训练任务:
  给定“法国的首都是”,预测下一个词。

模型学到了什么:
  “当见到‘法国首都’这个模式,后面接‘巴黎’的概率非常高。”

这不一定是因为它“知道巴黎是法国首都”——
  它只是学到了这个统计规律。

2.2 训练数据中的“矛盾”与“偏见”

互联网上的训练数据包含:

  • 过时的信息
  • 小说中的虚构情节
  • 论坛上的错误回答
  • 不同时期的矛盾说法

模型在学习时,这些都被平等对待。它无法区分“事实”和“虚构”,只能学到统计上的高频模式。如果训练数据中某件事被说了很多次,模型就会倾向相信——即使这件事是假的。

2.3 举一个直观例子

训练数据中可能出现:
  “量子力学很难”(来自科普文章)
  “量子力学很简单”(来自忽悠广告)
  “量子力学是由薛定谔的猫发现的”(错误信息)

模型不会说“简单”或“难”哪个是事实,
它只会看到哪些说法更频繁出现,
然后按照概率生成一个回答。

核心结论:大模型学的是“人们怎么说话”,而不是“事实是什么”。


三、根因二:解码机制——它是“猜”,不是“检索”

疑问:大模型在生成回答时,是一次性输出全部吗?如果不是,这和幻觉有什么关系?

回答:大模型是逐token生成的,每生成一个token都是一次“猜下一个字”的赌博。

3.1 自回归解码

输入:“今天天气”

生成过程:
  1. 预测第一个token → “真”(概率30%)
  2. 拿到“今天天气真”,预测下一个token → “好”(概率40%)
  3. 拿到“今天天气真好”,预测下一个token → “!”(概率50%)

每一步都在“猜”,而且下一步的猜测建立在之前所有猜测的基础上。一旦某一步猜错了方向,后面就会越猜越偏。这就是误差累积效应

3.2 温度(Temperature)的作用

// 温度影响概率分布
低温度(T=0.1):模型更保守,倾向选概率最高的词 → 回答稳定但缺乏变化
高温度(T=1.0):模型更冒险,低概率词也有机会被选中 → 回答富有创意但容易乱说

你项目中调用大模型API,如果不设置Temperature,默认值通常是1.0——这给了幻觉“可乘之机”。在课程问答项目中,我把Temperature设为0.3,让模型尽量输出确定的内容,减少自由发挥导致的编造。


四、根因三:知识边界——它不知道自己不知道

疑问:为什么大模型遇到不懂的问题时,不能像人一样说“我不知道”?

回答:因为训练数据中几乎没有“我不知道”这个模式的范例。

4.1 训练数据的模式偏差

互联网上极少有这样的对话:
  Q: 深度求索公司是哪一年成立的?
  A: 我不知道。

但充斥着这样的模式:
  Q: 某某公司是哪一年成立的?
  A: 某某公司成立于XXXX年。

模型学到了一个模式:当有人问关于某个实体的事实性问题时,答案应该是“某某成立于某年”这个结构。 遇到没见过的公司,它仍然会“填空”——找个听起来合理的年份填进去。

4.2 概率视角的解释

当模型不知道答案时:

它面临两个选择:
  
选择A —— 说“我不知道”:
  在训练数据中,这个回答的概率极低(几乎没见过)。
  
选择B —— 编一个看起来合理的答案:
  在训练数据中,这种形式的回答到处都是。
  
模型自然地选择了B。它不是在“编造”——
它只是在给最高概率的结构填空。

五、为什么RAG能减少幻觉?

疑问:你项目中用了RAG,它是怎么缓解幻觉的?原理是什么?

回答:RAG改变了模型作答的“概率基础”——不再是检索记忆,而是参照输入。

5.1 从“闭卷考试”到“开卷考试”

不用RAG(原始大模型):
  → 问:“本课程Java线程池有哪些参数?”
  → 大模型:搜自己的参数化记忆
  → 可能参数记忆模糊或训练数据中存在矛盾说法 → 编造一个“听起来对”的答案

用RAG:
  → 问:“本课程Java线程池有哪些参数?”
  → 检索:在课程文档中找相关段落
  → Prompt拼接:“请根据以下课程内容回答:{检索到的文档}。问题:Java线程池有哪些参数?”
  → 大模型:不需要回忆,只需要阅读并总结
  → 幻觉大幅减少

5.2 为什么RAG能起作用?

因为RAG绕过了模型的“记忆”路径,走的是“阅读”路径。 阅读比回忆可靠得多,这和人一样——给你一本教材让你对着回答,比你凭记忆作答准确得多。

5.3 RAG仍然可能产生的幻觉

即使有了RAG,幻觉仍可能出现:

检索到的文档不包含答案 → 模型仍可能填空
检索到的文档和问题不匹配 → 模型可能受无关信息误导

所以你在课程问答项目中设计了“如果文档不包含就直说不知道”的Prompt约束,并且增加了检索相关性阈值过滤——本质上是在给模型划定知识边界。


六、Prompt Engineering中的防幻觉策略

疑问:除了RAG,还有哪些Prompt技巧能减少幻觉?

回答:你在课程问答项目中已经用到了核心策略,这里系统梳理一下。

策略 Prompt示例 原理
明确知识边界 “如果课程内容中没有相关信息,请直接说‘未提及’” 给模型一条“安全出路”
要求引用原文 “回答时请引用课程原文” 强迫它基于材料而非记忆
限定输出格式 “回答格式:{原文出处}→{你的总结}” 结构约束减少自由发挥
Few-shot示例 在Prompt中给出2-3个正确回答的示例 示范正确的行为模式
链式追问 先问“课程有没有提到X”,再问“X是什么” 分步走减少跳跃式猜测
降低温度 设置Temperature=0.2~0.3 减少随机性,更倾向确定性输出

七、幻觉能被彻底消除吗?

疑问:所以有没有办法让大模型完全不产生幻觉?

回答:从当前大模型的原理上看,完全消除幻觉是不可能的。

7.1 根本原因

幻觉是大模型“统计预测”本质的必然副产物。只要模型是逐token预测概率,它就永远有可能在某一步猜错方向,然后越猜越远。

7.2 我们能做什么?

不是消除幻觉,而是把它控制在可接受的范围内:

方法 作用
RAG 把“闭卷”变“开卷”,从根源减少编造
Prompt约束 划定知识边界,给模型“不知道”的出口
检索过滤 相关性不够就不回答,避免误导
人类审核 关键场景保留人工把关
降低温度 减少随机性,输出更确定性

7.3 正确的心态

把大模型当成一个表达能力很强但记忆力不准的实习生

  • 如果给了它参考资料(RAG),它能把资料总结得很好
  • 如果不给它参考资料,它凭记忆干活,可能会出错
  • 最好的用法是让它基于你给的资料工作,而不是依赖它的记忆

总结

  • 幻觉不是bug,是训练目标的副产物——大模型学的是“说话像人”,不是“说真话”
  • 逐token生成机制导致误差累积,一步猜错可能步步猜错
  • 模型不知道自己的知识边界——训练数据中缺乏“我不知道”的模式,导致它天然倾向给出确定性答案
  • RAG减少幻觉的本质是把模型从“靠记忆”变成“靠阅读”,绕过了记忆模糊和知识陈旧的问题
  • Prompt防幻觉策略的核心是给模型划定边界、提供出路、减少自由发挥空间
  • 幻觉无法根除但可以控制——方法论是用工程手段约束它,而非期待模型本身的完美

下一篇预告:AI理论学习(四)——Prompt Engineering:从随意提问到工程化调用。拆解角色设定、Few-shot、Chain of Thought等核心Prompt技巧的底层逻辑,以及本人在课程问答项目中Prompt模板的设计心法。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐