LLM为什么会产生幻觉?理解RAG存在的根本原因

LLM通过预测token产生幻觉,RAG通过注入外部信息提供事实基础来缓解这一根本缺陷。
大语言模型(LLM)的本质是预测下一个统计上最可能的token,而非存储和检索可验证的事实。这一机制导致模型在缺乏外部信息时会生成"令人信服的错误"——即所谓的幻觉:内容流畅、结构清晰、语气权威,却可能完全虚构。问题的根源不是模型不够智能,而是它在预测时缺乏正确的上下文(context)和事实基础(grounding)。检索增强生成(RAG)正是针对这一根本局限设计的系统性解决方案:在模型开始生成之前,先从外部数据源检索相关信息并注入提示词,从而将模型的预测锚定在可靠的事实上,实现"更好的上下文→更好的预测"。
当AI开始一本正经地编造事实
一位工程师分享了他第一次意识到大语言模型(LLM)不可靠的经历:他让LLM列出某个冷门主题的研究论文,结果瞬间得到了一份看起来无比专业的清单——论文标题、作者姓名、发表年份,甚至还有DOI链接。
一切看起来都合情合理:结构清晰、学术气息浓厚、语气自信。但当他真正去网上检索这些论文时,发现有几篇根本不存在。
这些内容并非明显的伪造或错误,而是令人信服地错误。标题听起来真实,作者名字可信,引用格式也完全符合学术规范。对工程师而言,这种情况格外棘手——问题已经不再是"模型失败",而是"模型不可信"。

LLM不像人类那样存储和检索知识
我们常听到这样的说法:"LLM能理解语言"、"它们像人类一样推理"、"它们无所不知"。所以当模型生成错误内容时,我们的直觉往往是——也许模型还不够先进。
但真相其实更令人不安:LLM并不像人类那样存储和检索知识。
在最基础的层面上,LLM只做一件事——预测下一个token。它们基于训练中学到的模式,以及在给定上下文下最可能出现的内容的概率来生成回答。
这意味着三个关键事实:
- 它们本身并不验证真伪;
- 它们并不自动知道你的数据;
- 它们在生成回答时并不会"查找"事实。
这个区别解释了很多问题。
幻觉究竟从何而来
回到那个研究论文的例子。模型的回答之所以如此令人信服,是因为它在训练中很可能已经见过成千上万篇研究论文、学术引用、DOI格式以及作者命名规律。
所以即便它并不真正知道答案,它仍会尝试生成统计上最合理的续写。这就是为什么假论文标题听起来真实,虚构的作者看起来可信,不存在的引用也显得学术正确。
模型根本没有在验证真伪。而这正是幻觉之所以危险的原因——这些回答往往流畅、结构清晰、权威、且高度自信。人类天然将"自信"与"正确"联系在一起,久而久之,虚假信息就开始显得可信。
从技术角度看,幻觉(Hallucination)并非偶发性故障,而是语言模型架构的内在属性。LLM在训练时学习的是token序列之间的条件概率分布——即"在给定前文的情况下,下一个token是什么的概率最高"。模型没有独立的"事实存储层"或"知识核验模块",它的所有"知识"都被压缩、混合地编码在数十亿个神经网络参数里。这种压缩过程不可避免地导致信息失真与混淆:两个相似领域的细节可能被模型"混搭"重组,生成一个从未存在过的"合成事实"。更关键的是,模型在生成时没有置信度门控机制——它无法判断自己"是否知道"某件事,因此面对知识盲区时,它不会停下来说"我不确定",而是继续生成统计上最流畅的续写,这正是虚假引用听起来如此真实的根本原因。
问题不在于智能,而在于上下文
既然LLM只是在预测统计上可能的文本,那么如何让它生成更准确的答案?
作者敏锐地指出:模型本身并没有改变,它仍在做同样的事——预测下一个最可能的词。所以真正的问题也许不在于智能,而在于上下文(context)。
这暴露了当今LLM最大的局限之一。它们:
- 不会自动访问实时信息;
- 不会自动访问你的公司或私有数据;
- 除非你主动提供,否则无法读取你的文档。
你的PDF、数据库、Slack讨论、API接口、内部知识,默认情况下对模型都是"不可见"的。模型之所以生成虚假引用,是因为它在回答时没有任何方式去对照权威来源进行核实——它是在**缺乏事实基础(grounding)**的情况下进行预测。
RAG:在生成之前先给模型正确的信息
如果我们不再期望模型"凭空"知道一切,而是在它开始生成之前先给它正确的信息,会怎样?
作者打了一个贴切的比方:这就像向朋友询问某件事。如果仅凭记忆,他只能根据模糊印象回答;但如果他在回答前先翻开相关文档,回答的质量会完全不同。朋友并没有突然变聪明,他只是获得了更好的上下文。
这正是关键洞察所在:
更好的上下文 → 更好的预测。
当我们把相关信息加入提示词(prompt)时,就改变了模型在预测下一个词之前所"看到"的内容,从而改变了生成的方向。这带来的不是什么神奇的新模型,也不是隐藏的智能升级,而是一次系统设计层面的转变——检索增强生成(Retrieval-Augmented Generation,简称RAG)。
从本质上说,RAG就是一种更聪明的方式:在模型开始预测之前,利用相关的外部信息为生成过程提供事实基础。
RAG的典型工作流程分为两个阶段:检索(Retrieval)与生成(Generation)。在检索阶段,系统将用户的问题转化为向量嵌入(embedding),在预先构建好的向量数据库中进行语义相似度搜索,找出最相关的文档片段;在生成阶段,这些检索到的片段被拼接进提示词,作为模型回答的"参考资料"。模型此时的任务不再是凭空生成,而是基于提供的文本进行总结和推断。向量数据库(如 Pinecone、Weaviate、Chroma)是 RAG 管线的核心基础设施,负责存储和检索文档的语义表示。上下文工程(Context Engineering)则是更上层的设计挑战:如何筛选、排序、截断检索结果,使其在不超出模型上下文窗口限制的前提下,最大程度地提升回答质量。理解这条完整链路,才能明白为什么 RAG 是一个系统工程问题,而非仅仅"接入一个数据库"那么简单。
幻觉不是故障,而是机制使然
LLM产生幻觉,并不是因为它"坏了"。它们之所以会产生幻觉,是因为它们能够生成听起来令人信服的答案,却不会自动验证这些答案是否真实。
在我们为LLM提供一种将答案锚定在可靠信息上的方法之前,我们将持续得到那些"听起来对、实则错"的答案。这也正是RAG之所以存在、并成为现代AI系统核心组件的根本原因。
理解了这一点,再去看向量数据库、检索管线、上下文工程等RAG相关技术,就不再是零散的工具堆砌,而是一个针对LLM根本局限性的系统性解决方案。
相关推荐

uGAP:统一100+非洲地理数据集的AI平台
uGAP是开普敦大学团队开发的非洲地理空间AI平台,统一120余个非洲数据集并提供Python SDK,支持数据发现、处理与模型训练一站式工作流,已用于气旋洪水制图等实战场景。

Cursor能控制你的电脑了:AI代理可驱动桌面应用测试
Cursor 新增桌面控制能力,AI 代理可驱动 iOS 模拟器等桌面应用测试自己构建的功能。本文分析这一更新对开发工作流的影响、技术实现可能路径及可靠性考量。

Vibecoding自研推理引擎:理想丰满,现实骨感
Reddit开发者分享Vibecoding自研推理引擎的真实经历:用WebGL2和GLSL在浏览器跑GGUF Q4模型,却陷入tokenizer调试地狱。本文分析浏览器端LLM推理的工程难点,以及为何直接clone llama.cpp是更理性的选择。