1. 幻觉根源拆解:先想明白RAG到底把事实放在哪里
1.1 大模型“从容胡编”不是Bug,是自回归机制的直接结果
先说一个很多刚接触RAG的人没想透的问题:大模型为什么会一本正经地胡说八道?
如果你把一个语言模型当成“一个懂很多的人”,那幻觉就很难解释。但如果你拆开它的生成过程,会发现它其实是一个“接龙游戏玩家”:每生成一个token,都是在拿已经生成的上文和自己的全部参数去猜下一个词最可能是什么。这个过程中没有任何机制去校验“我猜出来的这件事在真实世界里到底成不成立”。
换句话说,模型不是查完知识库再回答,它是在一个装着海量文本记忆的黑盒里,根据概率不断往后“编”。当问题落在它训练数据里没见过、记忆很模糊、或者知识已经过时的区域,它能做的只有一件事:用最通顺、最像回事的方式继续编下去。这就导致了一种非常迷惑人的现象——模型越自信,措辞越严谨,反而可能在细节上错得越离谱。
所以RAG的核心目标从来不是“让模型变聪明”,而是“别让模型裸奔”。它把外部可信资料检索出来,塞进模型能看见的上下文窗口里,让模型从“闭卷硬写”改成“开卷照着资料作答”。只要资料真实且被模型正确读取,幻觉就能被大幅压缩。
这个问题拆到底你会发现,RAG里的“R”永远比“G”重要。上下文里没有的事实,模型只能靠自己的参数记忆去瞎编;上下文里有但被淹没的事实,模型也可能忽略,继续给你扯一个语法正确但内容错误的答案。
1.2 微调和提示词为什么治标不治本
早期团队应对幻觉,翻来覆去就是三板斧:微调、改提示词、直接联网搜索。这三招都有价值,但没有一个真正解决了“事实从哪来”的根基问题。
先看微调。它的本质是把新知识编码进模型权重,原理上确实能让模型“记住”一些新东西。但代价也很现实:每次知识更新都要重新准备训练数据、重新跑训练、做回归验证,成本高、周期长。最难受的是,微调并不改变生成机制,“记忆”和“事实校验”是两码事。你让模型背下了一份合同模板,它答错了其中一条金额时,依然没有任何机制纠正自己。
再看提示词。你可以在system prompt里强调一万遍“请严谨回答”“不确定就说不知道”,但如果模型手里真的没有准确资料,它就只能“严谨地编”。提示词约束的是表达风格和回答态度,不是知识来源。没有资料支撑的模型就像一位没有参考书的助理,你说“不知道就直说”,他也只能硬着头皮给出猜测性的解释。
至于直接联网搜索,听起来合理,但搜索引擎返回的内容和“检索增强”要的内容根本不是一回事。搜索结果是按SEO和热度排出来的网页片段,不一定贴合问题的信息需求,更没人按你的领域知识结构做过整理。直接把网页片段塞给模型,等于请了个助理,让他在走廊里随便抓三个人问路,抓到的第一个人说什么就信什么。
1.3 Naive RAG的经典三步,和它没解决好的三个幻觉
RAG出现以后,最朴素的实现方式被很多知识库项目用了起来,流程基本是固定的:
- 把文档切块、向量化,存入向量数据库;
- 用户提问时,把问题向量化,做一次相似度检索,取回top-k个文本块;
- 把取回的文本块拼进prompt,一起交给大模型生成答案。
这套流程跑通很快,Demo演示效果也很好,但上线后你会陆续撞上三个问题。
第一个问题是检索不到。query本身很复杂,比如“张三在A公司负责的那个项目,和他在B公司做的产品线相比,哪个跟他现在的工作方向更一致?”这类问题需要跨多个文档、多个实体做关系推理。朴素的top-k检索很难在一次查询里把分散在多处的证据全部捞齐,模型拿到的上下文本身就是残缺的。
第二个问题是检索到但不够准。向量检索擅长语义匹配,却不擅长精确限定。你搜“2023年之后发布且不包含无线充电功能的设备”,向量空间里很可能被“无线充电”这个高频概念带偏,把一篇专门讲无线充电的旧文章也捞了回来。更麻烦的是,不相关内容一旦进了上下文,模型并不会自动忽略它,它照样会一本正经地引用这些错误依据来生成答案。
第三个问题是chunk粒度与信息噪声。切块太小,跨段逻辑被切断;切块太大,一个块里塞了大段无关内容,真正的答案淹没在噪声里。检索打分可能会给到那个“碰巧包含相关词但整体不相关”的块,而不是真正包含完整证据链的块。
这些问题说明了一件事:RAG是一整条链路,每个环节都在影响“可信”。检索是源头,源头上错一步,后面生成阶段再怎么调prompt都补不回来。整个RAG的进化史,本质上就是不断把这几个漏洞一个个补上的过程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 检索侧的三次进化:从“查相似”到“能推理”再到“会规划”
2.1 Dense Vector Search是底座,但它对“文字约束”天然不敏感
先聊已经变成标配的Dense Vector Search。它的做法是把文档块和query分别通过Embedding模型编码成高维向量,再用余弦相似度之类的方法计算语义距离。好处很明显:它摆脱了关键词匹配的机械性,能召回“意思相同但字面完全不同”的内容。比如用户搜“怎么退货运费”,文档里写的是“七天无理由退货的邮费承担
