起点:当大模型"一本正经地胡说八道"
第一章 起点:当大模型"一本正经地胡说八道"
一、那个下午,智能客服"创造"了历史
2023年9月的一个工作日下午,某头部金融科技公司的客户服务总监在会议室里接到了第一通投诉电话。打电话的客户语气克制,但带着明显的质疑——他在App上看到的"7日年化收益率2.8%",到了客服对话框里怎么变成了5.2%?他截图保留了证据。
接下来的四个小时里,这通电话被复制了超过一万次。
公司的智能客服系统是基于当时某主流大语言模型构建的。在产品上线前的多轮测试中,它流畅、自然、礼貌,几乎能回答客户提出的所有问题。但当它需要回答"这款理财产品的近7日年化收益率是多少"时,它没有去查后端的结构化数据库,而是用自然语言"回忆"出了一个数字——5.2%。这个数字恰好等于"同类稳健型理财产品历史最高七日年化"的某个统计值,模型在内部概率分布里将"高收益稳健理财"与"接近上限的合理收益"关联起来,于是自信地输出了这个答案。
最后的代价是:客户大规模投诉、监管紧急问询、产品下线复盘、品牌声誉损失——根据内部邮件估算,直接和间接损失在数百万级。而这一切的源头,是大模型在生成答案那一刻的一个"幻觉"。
这不是孤例。同一时期,美国某律师事务所引用了ChatGPT虚构的判例作为诉讼依据,导致律师被制裁;某医疗AI助手建议用户在某种药物过敏的情况下继续服用该药物,因为模型"忘了"过敏信息;某电商平台的智能导购在描述一款笔记本电脑的电池续航时给出了"连续播放24小时"的回答,实际参数是8小时。
这些案例指向一个共同的真相:当我们让大语言模型自由发挥时,它会毫不犹豫地填补它"不知道"的部分,并且以一种前所未有的自信去呈现那些填补的内容。它不是在撒谎,它压根不知道自己不知道。
这正是本书要解决的核心问题:当LLM本身存在知识局限时,我们如何让它的回答既流畅又准确?如何让它真的"读懂"我们的业务、我们的数据、我们的世界?
要回答这个问题,我们先要彻底理解LLM为什么会"一本正经地胡说八道"。
---
二、拆开幻觉:三种典型的"胡说八道"
大语言模型的"幻觉"并不是一个单一致命缺陷,而是一组性质不同、根源不同的失败模式。要真正解决问题,必须先把这组失败模式像外科手术一样分类、定位。
学术界与工业界目前普遍沿用的一种分类方法,是把幻觉分为三类:知识截止幻觉、事实性幻觉、逻辑性幻觉。这三种幻觉彼此交织,但又各自对应不同的成因和不同的解法。
2.1 知识截止幻觉:模型"没学过"的硬伤
这是最容易理解的一种。任何一个大语言模型都有一个明确的知识截止日期——GPT-4o目前是2024年5月,Claude 3.5 Sonnet是2025年1月,国内主流开源模型如Qwen2.5、DeepSeek-V3也都有对应的截止时间。这意味着,模型对于截止日期之后发生的事件、发布的产品、变更的法规、调整的价格一概不知。
但问题是,模型并不知道自己"不知道"。当你问它"2024年诺贝尔文学奖获得者是谁",如果截止日期早于2024年10月,正确的回答应该是"我不清楚",但很多模型会基于既有数据"合理推断",给出一个看似合理实则虚构的名字。2023年GPT-4回答2022年世界杯冠军阿根廷的某场比赛比分时,曾出现细节错误,因为它"拼凑"了多个相关事实。
在我协助某券商客户部署智能投顾的早期项目中,他们提供的FAQ数据库里有超过3000条金融产品的参数信息,但模型在回答某个具体产品的托管费率时,给出了一个比真实值高0.05%的数字。检查后发现,这个数字来源于产品上线前的草稿版本,已被合规部门修改过,但模型根本没有访问过最新的数据源。
这种幻觉的本质是:模型的参数化知识是一个静态快照,而现实世界是一个持续流动的河流。两者之间的"水位差",就是知识截止幻觉。
2.2 事实性幻觉:模型"记错"的窘境
哪怕是模型"学过"的内容,它也无法保证在生成时准确复现。大语言模型的训练过程,本质上是把海量的文本压缩进几百亿个参数里。在这个压缩过程中,细节必然丢失、混淆、错位。
举个具体的例子。我曾经测试过同一个问题在多个模型上的表现:"《哈利·波特》中哈利第一次收到光轮2000是在谁送他的圣诞礼物中?"正确的答案是罗恩·韦斯莱的父亲亚瑟·韦斯莱在圣诞送给他一双飞行靴子,而光轮2000是他在三年级时从佛罗多赫奇巫师用品店购买的二手货——但绝大多数模型会编造出"邓布利多送给哈利"或者"麦格教授送的"等错误答案。
为什么会这样?因为在训练语料中,"圣诞礼物"、"光轮2000"、"哈利·波特"这三个关键词的高频共现概率很高,模型学到了它们之间的关联,但具体的人物-事件配对它并没有真正"记住"。它记住的是统计规律,而不是事实细节。
这就是事实性幻觉:模型知道"这种问题大概长这样",但不知道"准确的事实是什么"。它在用语言的统计模式模拟真实的记忆。
2.3 逻辑性幻觉:模型"推理出错"的隐蔽陷阱
最危险的一种幻觉是逻辑性幻觉——模型给出的一切事实都是真实的,但组合在一起推出的结论是错误的。这种幻觉最难发现,因为它看起来"完全合理"。
比如问模型:"我手里有100万现金,存银行定期3年利率2.5%,请问3年后有多少?"模型可能回答:"100万 × 2.5% × 3 = 7.5万利息,所以3年后共有107.5万。"这个计算看似正确,但忽略了复利,且用错了简单利息的乘算方式。每一个数字(100万、2.5%、3年)都准确无误,但数学逻辑是错的。
更复杂的逻辑性幻觉出现在多步推理里。某次我们用一个具有300亿参数的模型做法律条款推理测试,问题是:"根据合同法第X条,乙方在违约后需要在多少天内通知甲方?"模型给出了"15天"这个答案。检查后发现:合同法第X条确实规定了"通知义务",但具体的天数是"30天",而"15天"是模型从另一条款(关于异议期)的记忆里"借"过来的。
逻辑性幻觉的本质是:模型在事实之间搭建关联时,使用的是一种"看起来像推理"的模式匹配,而不是真正的逻辑推导。它能把"看起来合理"的步骤堆叠起来,但每一步都可能存在隐藏的错误。
2.4 为什么这三种幻觉必须区分对待
这三种幻觉不是程度问题,而是性质问题。知识截止幻觉的解法是"接入外部实时知识源";事实性幻觉的解法是"让模型有机会看见原始事实";逻辑性幻觉的解法是"让模型在推理时能回查中间步骤"。如果不分青红皂白地说"模型不准确",就会陷入"为什么会不准确"的死循环——而这正是本书要带你走出的认知泥潭。
理解了"是什么",我们接下来要回答"为什么LLM会从根本上有这些问题"。
---
三、三层诊断框架:幻觉从何而来
要真正理解LLM的幻觉,不能停留在现象层,必须深入到机制层。我把幻觉的成因划分为三个层次:数据层、训练层、推理层。这三层是逐级嵌套的,每一层都对应着一类不可消除的内在约束。
3.1 数据层:互联网本身的"噪声"
一切大语言模型的训练,都建立在来自互联网的海量文本之上。但互联网并不是一本干净、权威、完备的百科全书。它充满了错误、过时、矛盾、夸大和虚假的内容。
让我们用一个具体数字说明问题。GPT-3的训练数据中,Common Crawl数据集占了约60%,而Common Crawl中估计有4-6%的网页内容是垃圾、机器生成、或者错误信息。即使是过滤后的高质量语料如Wikipedia,也存在版本差异、地域差异和编辑战争。
更关键的是,互联网是过去的快照,不是当前的真相。一篇2019年的财经分析文章可能准确描述了当时的市场,但今天的事实已经变化了。当模型把这些"过去的事实"压缩进参数,它学到的是"截至某时点的世界是怎样的",而不是"当前世界是怎样的"。
数据层的成因,意味着单纯扩大模型规模、扩大训练数据,并不能解决幻觉问题——因为根本问题的根源是数据本身的性质,而不是模型的容量。
3.2 训练层:参数化记忆的"压缩失真"
训练层是更深层的限制。假设我们用一句话概括大语言模型的工作原理:它把人类写过的所有文本,压缩进了数百亿个浮点数里。
这个压缩过程必然伴随信息损失。打个比方:把《大英百科全书》压缩进一张SD卡,你当然可以保留大部分关键事实,但细节必然会模糊、混淆、丢失。语言模型的工作原理与此类似——但更复杂、更不透明。
具体来说,参数化记忆有三个特点决定了幻觉必然存在:
第一,参数是连续值,事实是离散的。模型存储"巴黎是法国的首都"这个事实,并不是用一个变量明确地写"巴黎=Paris, France, capital",而是用一组参数向量的某种分布来编码这个语义。当你查询时,模型从这个分布中"采样"出一个回答——采样意味着变异性,意味着同样的输入可能有不同的输出。
第二,参数知识是分布式的,难定位。传统数据库查询"巴黎"会直接返回"法国首都",可解释、可调试。但模型里的"巴黎"知识分散在数十亿个参数的不同位置,训练完就连开发者自己也无法直接编辑"关于巴黎的那个参数"。这意味着任何纠错都是盲打,需要重新训练。
第三,参数化记忆无法精确保留长尾事实。训练目标是最小化整体预测损失,这意味着高频出现的模式(语法结构、常见概念)会被精细化编码,而稀有事实(某款产品的具体参数、某部法律的特定条款)会被"平均化"。这就像JPEG压缩——主体清晰,细节丢失。
3.3 推理层:生成策略的"统计偏好"
即便数据和训练都是完美的,推理过程本身也会引入幻觉。大语言模型在生成每一个token时,是在数万个候选词的概率分布上做采样。
在默认配置下,模型倾向于选择"概率最高"的token——这听起来很合理对吧?但问题在于,"在语料库里最常见的"未必是"真实的"。比如模型学到"以下哪座城市是法国的首都:A. 巴黎 B. 里昂 C. 马赛 D. 柏林"的模式后,会倾向于选择A。但如果问题稍微变形,比如"以下哪座城市是英国的首都:A. 巴黎 B. 里昂 C. 伦敦 D. 柏林",模型有时依然倾向于选A,因为它对"问题-A-首都"的关联很强,而对"具体是哪国"的细节较弱。
更糟糕的是采样温度(temperature)和top-p参数。温度越高,模型越"敢于"选择低概率token,看起来更有"创造力",但也越容易偏离事实。这就是为什么同一个问题多次询问模型会得到不同答案。
推理层的幻觉说明:即使我们用一个完美的模型和完美的知识,它在表达时也会有随机性。这就像一个记忆力惊人的学者在讲台上即兴发挥——他也许不会说错,但他说的未必是他当时应该说的。
3.4 把三层串起来
下面这张图把三层幻觉成因整合到了一个诊断框架里。当你遇到一个幻觉时,可以按图索骥地问自己三个问题:
```mermaid flowchart TD A[LLM 幻觉问题] --> B[数据层] A --> C[训练层] A --> D[推理层] B --> B1[训练数据噪声] B --> B2[时效性缺失] B --> B3[覆盖偏差] C --> C1[参数化记忆压缩] C --> C2[知识固化难更新] C --> C3[长尾事实平均化] D --> D1[采样随机性] D --> D2[解码策略偏好] D --> D3[无关上下文干扰] ```
这个框架的价值在于:不同层级的幻觉,对应不同的解决方案。数据层的幻觉要靠"接入更新的外部知识源";训练层的幻觉要靠"不要把模型当作唯一的事实来源";推理层的幻觉要靠"约束生成、控制采样、提供上下文"。这正是本书的核心思想——RAG是一种系统性地同时解决三层幻觉的工程范式。
---
四、从REALM到产业事实标准:RAG的崛起
理解了"为什么会幻觉",接下来要回答:"用什么方法解决?"。这条路探索了多年,本书的主题——RAG——就是这个探索过程中胜出的方案。但要真正理解RAG的价值,我们必须看清它的演化史。
4.1 2020年前的黑暗时代:纯参数化的困境
在2020年之前,解决LLM知识局限的主流思路是"更大的模型,更多的数据"。从BERT的3亿参数,到GPT-2的15亿,到GPT-3的1750亿,行业普遍相信"scale is all you need"。理论上,把世界上所有文本塞进去,模型就能"记住"所有知识。
但现实给了这个行业几记响亮的耳光:
- 一篇论文显示,即使GPT-3也会"虚构"科学论文的作者和出版年份。
- 商业部署的LLM产品频繁出现因"知识缺口"导致的严重错误。
- 学术评测发现,LLM对训练数据中的事实回忆率(Factual Recall)远低于人们的预期。
行业意识到:单纯扩大模型并非银弹。参数化记忆有它物理上的天花板,再大的模型也不能"实时更新",再多的数据也不能覆盖长尾事实,更关键的是,企业希望让模型"掌握"的内容往往是私域数据——合同、产品手册、内部FAQ——这些数据根本无法进入通用大模型的训练集。
4.2 2020年:REALM点亮的第一盏灯
2020年,Facebook AI Research(FAIR)发表了一篇具有里程碑意义的论文——REALM(Retrieval-Augmented Language Model Pre-training)。这篇论文的核心思想在当时是革命性的:不要让模型"记住"所有东西,而是让模型在回答问题时,先去"查"一个外部知识库。
REALM的思路可以概括为三步:
1. 给定一个问题,先用一个检索器(Retriever)在海量文档中找出最相关的若干段落。 2. 把这些段落和原问题一起输入给语言模型。 3. 模型基于这些检索到的"外部知识"生成最终答案。
这个思路在今天看起来平平无奇,但在当时是对"大模型无所不能"信仰的巨大挑战。它的核心主张是:语言模型的参数应当主要用于理解语言和推理,而不是用于存储事实。事实应该存在一个可编辑、可更新、可追溯的外部知识库里。
4.3 2020-2022:稳步探索的早期
REALM之后的两年,是RAG技术缓慢但扎实发展的两年。Meta的Atlas、谷歌的RETRO、Salesforce的RAG-Sequence等论文相继发表,逐步把"检索增强"从一种预训练技巧扩展到各种推理任务。
这一时期的几个关键进展包括:
- **稠密检索器(Dense Passage Retriever, DPR)** 的提出,用预训练的BERT把问题和文档都映射到同一个向量空间,用向量相似度进行检索。这比传统的BM25关键词匹配好了不止一个数量级。
- **FiD(Fusion-in-Decoder)** 架构,把多个检索到的文档在解码器中融合,而不是在编码器中拼接,让模型能更好地整合多源信息。
- **Atlas** 把检索增强做到了10亿参数级别,证明即使模型较小,借助检索也可以达到大模型的效果。
但这一时期RAG还主要停留在学术圈,工业界的主流方案依然是"更大模型 + 更多微调"。
4.4 2023年:ChatGPT引爆后的范式转折
2022年11月ChatGPT发布,全球陷入生成式AI狂热。但狂热褪去后,企业用户很快发现:通用大模型无法直接用于商业场景。各种各样的"幻觉事件"登上新闻,从律师使用ChatGPT虚构判例,到企业部署客服后翻车。
2023年3月,OpenAI官方在Function Calling和Plugins的文档里,正式承认检索增强是解决"模型不知道自己不知道"的核心方案之一。紧随其后,Anthropic在Claude中引入了"100K上下文窗口"加"工程化提示"的方案;Meta开源了LlamaIndex,专注RAG编排;LangChain也在2023年初迅速成为RAG应用层的事实标准。
到了2023年下半年,几乎所有严肃的LLM企业级应用,背后都有一套RAG架构。Gartner在2023年发布的Hype Cycle把RAG列为"未来2-5年企业AI的关键技术"。
4.5 2024年之后:RAG即基础设施
到了2024年,RAG已经从一种"技巧"演化为"基础设施"。各大向量数据库(Weaviate、Qdrant、Milvus、Pinecone)开始成为云厂商的标配;几乎所有LLM应用框架(LangChain、LlamaIndex、Haystack、DSPy)都把RAG作为一等公民;连OpenAI和Anthropic都在自己的产品中集成网页检索和文档引用。
更重要的是,RAG技术本身也在快速演化。从最初的Naive RAG(直接拼接检索结果),到Advanced RAG(带查询重写、文档压缩、混合检索),到Modular RAG(可插拔的模块化架构),到现在的Agentic RAG(让Agent自主决定何时检索、如何检索、如何整合)——RAG的能力边界在被不断推高。
这是一个值得记住的时间线:从2020年的学术探索,到2024年的工业标准,RAG用了4年完成了从概念到基础设施的演化。而支撑这场演化的,是它针对LLM三大幻觉层级的系统性解法——接下来我们详细展开。
---
五、RAG vs SFT:两条路线的本质区别
在RAG成为主流之前,企业用另一种方法应对知识局限——监督微调(Supervised Fine-Tuning, SFT)。两种方法都试图让LLM"更懂业务",但路径截然不同。理解这个对比,是理解RAG价值的关键。
5.1 什么是SFT,它的直觉思路
SFT的思路很直接:既然通用模型不懂我的业务,那我就用我的业务数据"喂"它,强行让它学会。具体做法是:准备一批"问题-答案"对,用这些数据对预训练模型做有监督训练,让模型微调后能更好地回答类似问题。
比如某法律科技公司有10万条历史咨询问答,他们可能会把这些问答整理成训练集,让模型微调。微调后,模型在面对新的法律问题时,能给出与历史风格匹配的回答。
这种方法在2022-2023年非常流行,很多企业都用"私有数据微调"的口号宣传自己的模型能力。
5.2 SFT的三大硬伤
但SFT在企业级应用中有三个根本性的硬伤:
第一,知识更新成本极高。一旦微调完成,模型"记住"了某个事实,要更新这个事实必须重新微调。如果你的产品价格每周都在变、你的政策每月都在调整,重新微调的成本(数据准备、算力、时间)会让你不堪重负。
第二,可解释性极差。SFT把知识"埋"进了参数里,模型回答问题时不告诉你它依据的是什么。如果模型给出了错误答案,你无法定位是参数哪部分的问题,也无法直接修正。
第三,事实记忆的"参数量天花板"。即使你把模型微调得再彻底,受限于模型总参数量,你能"塞进去"的事实也是有限的。一个100亿参数的模型能容纳的事实,大概相当于几万到几十万条结构化记录。如果你的知识