序章:当LLM开始说谎——为什么我们必须谈RAG
序章:当 LLM 开始说谎——为什么我们必须谈 RAG
2024 年 3 月 12 日,星期二,下午三点十七分。林薇永远不会忘记这个时间——不是因为那天的天气,也不是因为办公室窗外正开着一场铺张的玉兰花,而是因为在那之后的九十分钟里,她的屏幕上出现的那段对话,足以让她失眠整整一周。
她当时是一家中等规模金融科技公司的 AI 产品负责人。那天上午,他们刚刚把基于 GPT-4 微调出来的第一版智能客服"小慧"灰度上线,覆盖了 5% 的用户流量。一切看起来都很好——上线前的 200 条人工评测里,小慧的满意度达到了 4.2/5,远超他们内部设定的 3.5 的及格线。林薇甚至在团队群里发了一个红包,配文是"开门红"。
下午三点十七分,一线客服把一段对话截图转到了她的飞书,附了一句话:"林姐,这位老先生有点激动,你看一下。"
对话发生在一位 67 岁的退休教师、王先生,和"小慧"之间。王先生去年买过公司的一款年金保险"智盈宝",上个月按时收到了生存金,他想把这份产品推荐给他妹妹,于是回来问几个问题。下面是他和小慧的第三轮对话,也是决定性的那一轮:
> 王先生:你们有没有那种,一次性缴清,然后每个月都能领钱,领到终身,而且保证至少领二十年的产品?我妹妹今年六十二了,我想给她看看。 > > 小慧:您好,王先生。根据您的需求,推荐您了解我们的"智盈尊享 · 终身寿险 2024 升级版"。这款产品支持趸交(一次性缴清),自第二个保单年度起按基本保额的 8% 每年给付生存金,直至终身,并保证给付期不少于 20 年。此外,该产品享有"30 天无理由退保"权益,犹豫期内退保可全额返还保费,不收取任何手续费。建议您尽快联系您的专属顾问办理,额度有限。
王先生放下电话,兴奋得像个孩子——他和妹妹等了这样的产品等了三年。他要求立刻签约。
而林薇在屏幕这头,血往脸上涌。她太清楚发生了什么:
第一,"智盈尊享 · 终身寿险 2024 升级版"根本不存在。公司的产品库里没有任何叫这个名字的 SKU,最近三年也没有上报过任何带"20 年保证领取"字样的年金产品。
第二,"30 天无理由退保,不收取任何手续费"完全是编造的。公司所有长期人身险产品的犹豫期统一是 15 天,且按行业规定对犹豫期内退保会扣除不超过 10 元的保单工本费。
第三,8% 的给付比例也不是该类产品的市场形态。这家公司现有的年金险给付比例在 3.5%–4.2% 之间,8% 是一个根本不可能被精算通过的数字。
更让林薇脊背发凉的是那段话的语气——它没有任何犹豫,没有任何限定,没有任何"请以最终条款为准"的免责提示。它用一种几乎不容置疑的口吻,把三个高度具体的虚构事实,编织成了一段听起来无懈可击的销售话术。
这就是 LLM 的"幻觉"——一个被工业界和学术界共同使用了两年,却至今没有被任何单一公式定义清楚的现象。如果一定要给它一个工作定义,林薇后来在内部事故复盘里写的版本是:
> 幻觉(Hallucination)是大语言模型在缺乏可靠证据支持的情况下,以高置信度生成与事实不符、不可验证或无中生有的内容。
她写完这句话之后,停了很长时间,又添了一句:
> 它不是 bug,而是这种技术的本质特征。
一、说谎不是 Bug,是 Feature——LLM 的本质
要理解为什么 LLM 会"说谎",必须先理解它到底是什么——以及它不是什么。
过去三年,整个行业被一种浪漫化的隐喻所笼罩:人们说 LLM 是一个"压缩了人类全部知识"的引擎,它"读过了几乎所有互联网",它"理解"语言。这种叙事在投资人路演和媒体报道中几乎畅通无阻,但在工程语境下,它是一种危险的简化。
技术地讲,今天你所见到的任何一个大语言模型——GPT-4、Claude、Gemini、Llama、Qwen、DeepSeek——它们从架构到训练目标,本质上都是自回归语言模型(Autoregressive Language Model)。也就是说,给定一段上文 $c$,模型计算的是下一个 token 的条件概率分布:
$$P(x_t \mid x_1, x_2, \ldots, x_{t-1}; \theta)$$
其中 $\theta$ 是模型参数(权重),$x_t$ 是下一个候选 token。模型在生成时按这个分布采样,然后把新生成的 token 加入上文,继续预测下一个,如此往复,直到生成特殊的结束符 `<eos>`。
注意这里的关键词:条件概率分布(conditional probability distribution),采样(sampling)。
这意味着 LLM 在每一瞬间所做的工作并不是"检索事实",也不是"运行逻辑",而是"预测下一个最可能出现的 token"。它处理的对象是语言的统计结构,而不是世界的事实结构。这就是它和"知识库"(knowledge base)之间那条几乎不可能跨越的鸿沟——知识库存储的是离散的事实三元组,LLM 存储的是分布在数百亿个浮点参数里的语言模式的统计压缩。
一个有用的类比是这样的:想象你读完了一千万本书,然后被人用一台超级压缩机,把所有书的内容压缩成了一袋面粉。这袋面粉里仍然"蕴含"着原来那些书的味道、质地、营养成分的某种不可磨灭的痕迹——但是你不可能从这袋面粉里,重新精确地还原出某一本书第 317 页第 4 段的那个具体句子。LLM 的训练过程,就是这个把"书"压成"面粉"的过程;LLM 的推理(inference),就是有人从这袋面粉里取出一撮,加水、加温、揉捏成某种形如文字的面点——形状对、香味对、但里面的具体内容已经不可考了。
这就是为什么林薇说"它不是 bug"。LLM 那种自信地说出"8% 给付"、"30 天无理由退保"的能力,正是这种架构所能产生的最自然、最不可避免的输出。它不是在"故障"状态下出了错,它是在"正常"状态下,做了它唯一会做的事情——基于统计结构,生成最像答案的答案。
二、幻觉的三条地下河
如果只能用一个比喻来描述 LLM 的幻觉来源,林薇后来在内部培训里画过一张图,她把那幅图叫作"幻觉的三条地下河"。它不是一条单一的故障,而是三条互相缠绕的机制,单独提一条都不足以解释现场,但你提任何一条,工程师都会心领神会地点头。
2.1 知识截止(Knowledge Cutoff):时间维度的失明
每一种公开的商用 LLM 都有一个时间戳——gpt-4-turbo 的训练数据停在 2024 年 4 月,Claude 3.5 停在 2025 年 1 月,Llama 3.1 的训练数据停在 2023 年 12 月。这个时间戳叫知识截止日期(knowledge cutoff date)。它意味着一个根本性的工程现实:模型对截止日之后发生的世界,是失明的。
但这只解释了幻觉的一种类型——"新事实幻觉",即模型不知道某件尚未发生的事实,于是猜测。可惜这种情形只是最轻微的一类。当用户问"我们公司 2024 年 11 月上线的新品",模型必然答错,这事工程师早就心里有数。真正棘手的,是更微妙的一类——
对截止日之前的事实,模型的判断也可能是错的。
为什么?因为截止日不是一刀切的。训练语料来自互联网,而互联网本身就是一个有偏采样器:高频出现的事实被强化,冷门但确实存在的事实被稀释甚至消失。一个产品某次在小众论坛被提及 12 次,另一个产品被头部媒体提及 12000 次,模型会"记住"后者的概率远大于前者。这就是为什么小慧"知道"市场上主流年金险给付比例都在 3.5%–4.5% 区间,却对自身公司真实的产品线一无所知——因为它的训练语料里,从未以正确的方式"见过"自家产品库的目录结构。
这背后是一种更深的机制:LLM 没有"非它不可的真理"概念,只有"它见过的统计密度"概念。它把统计意义上的高频,等同于事实意义上的真。这是知识截止与训练语料偏差共同造成的结构性幻觉之源。
2.2 参数化记忆的压缩损失(Parametric Memory Compression Loss):空间维度的失真
第二个来源更加隐蔽,也更难修补。它来自一个听起来反直觉的事实:模型的参数里,不存储事实,它存储的是事实之间的"语言关系"。
一个数字感更强的版本是这样的。假设我们用 1000 亿个参数(100B params)来压缩人类所有维基百科文本(约 50 亿 tokens)以及大量书籍和网页。粗略地做一道算术:50 亿 tokens 涵盖了大约数千万条可被独立陈述的事实,而模型只有 1000 亿个参数可用——考虑到浮点数表征的熵损失,平均每个事实能分配到的参数容量,可能不到 30 个。
30 个参数能装下什么?它装不下一个完整的日期、一个完整的地址、一个完整的报价。它装下的是类似这样的东西:"年金保险"和"给付比例"这两个概念之间,存在某种[3%–5%] 范围内的数值关联;"犹豫期"和"退保"通常伴随 10–20 天的时间窗;"终身寿险"在销售话术中常常被搭配"增值服务"出现。换句话说,它装下的是概念之间的概率云,而不是事实本身。
这就是参数化记忆的压缩损失——任何信息在被压进 1000 亿个参数的过程中,都不可避免地经历了一次有损压缩。模型"记住"的从来不是"智盈宝的给付比例是 4.05%"这样具体的事实,而是"智盈宝 X 给付比例 X 4.05%"之间那种模糊的统计关联。
林薇后来用了一个工程师之间口耳相传的比喻来解释这件事:你可以让模型"知道"钢铁侠住在纽约,但它不知道 Tony Stark 的门牌号码。你可以让模型"知道"地球绕太阳一圈要 365 天,但它会告诉你火星也是。如果你试图用 prompt 或 fine-tuning 来"塞"给它事实,你会发现事实的颗粒度越细,被压缩损失的概率越高。
这是 LLM 与传统数据库最尖锐的区别。数据库是离散事实的精确存储;LLM 是语言模式的连续近似。前者查出来错就是错、没有就是没有;后者查出来总是"差不多",但这种"差不多"被生成 API 的确定性采样封装起来后,就变成了那句斩钉截铁的"8% 给付"。
2.3 解码器的采样偏好(Decoder Sampling Preference):生成时的概率性幻觉
第三个来源在生成阶段发挥作用。它和训练无关,它和事实无关,它和采样温度(temperature)、top-p、top-k 这类解码超参数有关。
回到公式 $P(x_t \mid x_{1:t-1}; \theta)$。即使模型对下一个 token 的真实分布估计得完全正确——这是一个永远不会成立但用于分析的假设——我们在采样时也常常不会取 argmax(即"最可能"的 token),而是会做一定程度的随机化,理由是:
- 温度 $T=0$ 时退化为 argmax,输出确定但常常陷入重复和啰嗦;
- $T$ 较高时引入多样性,使输出更像"人话";
- top-$p$(nucleus sampling)和 top-$k$ 进一步限制候选集,避免长尾垃圾。
这里的根本矛盾在于:对一个语言模型而言,"多样性"和"事实性"在很多场景下是反向相关的。在事实型问答中,我们希望模型坚定地选择唯一正确的那个 token;但在创意写作中,我们希望它能在合理范围内自由发散。生产环境必须在两者之间走钢丝——而且常常会因为创意性偏好(temperature=0.7, top_p=0.9 是常见的默认)而在事实型问答中"沾染"幻觉。
更要命的是采样偏好和前两个来源的叠加放大效应。当模型的真实分布本身已经把多个事实压在了一个相近的概率云里(比如"30 天"和"15 天"在它的参数空间里几乎等概率),采样温度哪怕只开了 0.3,也足以让模型在重复生成时输出"30 天"或"15 天"——取决于一次随机的 coin flip。
林薇后来做 A/B 测试时,把 temperature 调到 0,对同一组 prompt 跑 10 次,幻觉率从 17.3% 降到了 9.1%——降了一半多,但没有降到零。这是个关键数字:即使在最确定性的解码策略下,幻觉也无法被消除,只能被压低。因为前两个来源——参数化记忆的压缩损失和训练语料的结构性偏差——是无法通过解码策略修复的。
```mermaid flowchart LR Q["User Query<br/>王先生:有没有那种<br/>保证给付20年的年金?"] --> LLM["LLM<br/>自回归 token 预测<br/>P(x_t | x_1:t-1; θ)"] Param["参数化记忆<br/>~100B 参数压缩了<br/>整个人类文本的统计结构"] --> LLM LLM --> H["Hallucinated Answer<br/>智盈尊享·终身寿险2024升级版<br/>8% 给付, 30天无理由退保<br/>(高置信度,全错)"]
R["Retriever<br/>向量检索 / 关键词检索<br/>+ 重排序"] --> Evidence["External Evidence<br/>公司真实产品库<br/>犹豫期15天, 给付比例3.5-4.2%"] Q --> R Evidence --> Prompt["Augmented Prompt<br/>[系统指令] + [检索证据] + [用户原始问题]"] R --> Prompt Prompt --> LLM2["LLM<br/>相同的参数化记忆<br/>但被外部证据约束"] LLM2 --> A["Anchored Answer<br/>基于真实产品库的<br/>谨慎、可验证的回答"]
style Param fill:#fff5e6 style Evidence fill:#e6f7ff ```
这张图对比了 LLM 单独生成(左路)和 RAG 增强生成(右路)的核心差异。唯一的差别是右路多了一个外挂的检索器(R)和它返回的证据(Evidence),但这个差别足以把"高置信度虚构"扭转为"基于真实证据的谨慎回答"。
三、三条道路——Fine-tuning、Prompt Engineering 与 RAG 的边界
理解了幻觉的来源之后,工程团队的下一个问题必然是:那我们应该怎么治?
过去两年,工业界实际上探索了三条主要的技术路线:Fine-tuning(微调)、Prompt Engineering(提示工程)和 RAG(Retrieval-Augmented Generation,检索增强生成)。它们不是互相替代的竞争关系,而是各有清晰的能力边界。
3.1 三个被反复追问的问题
林薇在她的内部 wiki 上整理过一张决策表,列在"AI 项目立项评审"的首页。任何一个新的 AI 需求过来,团队都要先把需求翻译成三个问题,再决定走哪条路:
1. 知识问题:模型是否需要知道某些它在预训练时没见过或没以正确方式见过的事实?(产品目录、内部规章、最新事件、个性化数据) 2. 行为问题:模型是否需要以某种特定的语气、风格、格式、推理链来回答?(客服话术、合规口径、思维框架) 3. 可追溯问题:答案是否需要能够逐句回溯到来源文档,以满足审计、合规或用户体验的需要?
Fine-tuning 主要擅长第 2 个问题——它通过在特定语料上继续训练来"塑造"模型的行为、风格和部分知识吸收。它在第 1 个问题上力不从心,因为:(a) 把事实烧进参数成本极高,1B tokens 的高质量领域数据常常只能让你在某个细分领域换来 0.5%–2% 的事实准确率提升;(b) 一旦烧进去,几乎无法实时更新,王先生下次来问的产品如果上个月刚上线,fine-tuned 模型依然不知道;(c) 参数化记忆的压缩损失决定了细粒度事实会被模糊化,fine-tuning 也救不回来。
Prompt Engineering 主要擅长第 2 个问题中的"轻量化部分"——通过 few-shot 示例、Chain-of-Thought 引导、角色设定来约束输出格式和风格。它对第 1 个问题的回答只能是"看运气",因为 prompt 无法给模型注入它原本不具备的精确知识。对于第 3 个问题,prompt engineering 既不能直接提供来源,也无法强制模型引用。
RAG 主要擅长第 1 个问题和第 3 个问题——它通过外部检索把当前需要的、最新的、领域专有的事实注入到上下文窗口,并通过 prompt 强制模型以这些事实为基础作答。它对第 2 个问题的覆盖较弱——它可以约束格式(比如要求"如果证据中包含 X,则输出 Y 模板"),但难以实现深度的风格塑造。
关键洞察:三者并非互斥。最强的工业级系统往往是RAG + Fine-tuning + Prompt Engineering的组合拳——fine-tuning 负责把模型的"通用语言能力"调成"领域专家的思维框架",prompt engineering 负责设定当下的角色和约束,RAG 负责在每次推理时按需注入精确事实。
但对一个第一次面对幻觉问题的产品团队而言,答案几乎是一定的:先做 RAG。不是因为 RAG 完美,而是因为它在你当前的痛点上提供了最直接、最便宜、最可验证的杠杆。
3.2 为什么是 RAG:四个工程优势
林薇后来在团队复盘时把这四个优势总结成了一页幻灯片:
第一,可更新性(Updatability)。产品上线、改条款、调价格、政策更新——这些事在金融、保险、医疗、电商等领域天天发生。把知识烧进参数,意味着每次更新都要重训一次模型;把知识放在外部知识库,意味着更新只需要往库里加几行。产品经理第一次听到这个对比时,眼睛会亮一下。
第二,可追溯性(Traceability / Provenance)。RAG 系统天然携带了"证据链"——每个答案背后都能列出它参考了哪几段文档、来自哪个版本、哪一页。这对合规、对用户体验、对事故复盘都至关重要。林薇和王先生那种事故之所以难复盘,是因为模型给你的是一句"8% 给付",你不告诉它查,它根本不会告诉你它是从哪里"想到"这个数字的。RAG 把这种不可见的来源变成了可见的引用。
第三,成本结构(Cost Structure)。Fine-tuning 一个 70B 模型的成本是数万美元的一次性投入,加上每次更新几乎需要重新投入;而 RAG 的成本集中在向量库、检索基础设施和检索结果质量上,边际成本极低。这不是说你应该永远不做