ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

为什么选RAG增强大模型?从破解幻觉到知识库问答实战

为什么选RAG增强大模型?从破解幻觉到知识库问答实战

做 AI 应用的朋友,几乎都撞上过同一个尴尬:模型讲得越流畅,越不敢信。尤其是让它回答公司内部规范、产品参数或者最近发生的行业事件时,它要么一本正经地编造,要么把旧信息当新知识来答。这背后其实是一个系统设计问题,而不是单纯换个更大的模型就能解决。RAG(Retrieval-Augmented Generation,检索增强生成)这几年被反复拿出来讨论,就是因为它在不重训模型的前提下,把“知识来源”这个概念重新塞回了生成流程。这篇文章不泛泛介绍概念,只聊一个更根本的问题:为什么选择 RAG 技术来增强生成模型性能,它到底解决了什么,以及什么情况下你真的应该考虑它。适合正在做知识库问答、企业助手、文档分析或智能客服的朋友参考。

1. 先把问题看透:生成模型的参数记忆,远没有想象中可靠

1.1 模型“会说话”不等于“知道答案”

大模型本质上是一个条件概率模型:根据前文预测下一个词。训练时它见过海量文本,但这些内容并没有像数据库一样被整整齐齐地存起来,而是被压缩成网络权重里的统计规律。这和人的记忆很像。你记得小时候住过的那条街,但让你立刻画出门牌号,你可能连自己都开始怀疑。模型也一样,常见知识大概率能说对,冷门事实、私有文档、时效性信息,一旦训练数据里没有,或者出现次数太少,它就只能靠上下文猜测来补齐。

这个“猜测”不是故意撒谎,而是生成机制决定的。因为它对每一个词都只是在做概率采样,所以它并不具备“我不知道”的主动判断能力。你问一个训练截止后的问题,它依然会给你一个像模像样的回答。说白了,模型更像一个表达能力极强、但记忆模糊的同事,而不是一本可以精确翻开某一页的百科全书。

1.2 幻觉不是 bug,而是机制

很多人把幻觉当成模型的缺陷,认为只要模型再大一点、训练数据再多一点,幻觉就会消失。实测下来,幻觉会减少,但不会消失。原因在于生成任务本身是一个开放的概率空间:面对一个没有事实依据的问题,模型没有外部线索,只能顺着语言习惯继续“圆”。这是生成式模型天生的工作方式,不是某一次的偶发错误。

所以,想让模型答得准,不能只靠让它“记得更牢”,而是要给它一个事实锚点。RAG 的核心思路,就是把回答过程从“凭记忆闭卷作答”变成“带资料开卷作答”。检索到的资料片段进入生成上下文,模型输出的每一个词都被资料约束住,编造空间自然被压缩。这不只是工程技巧,更是对生成模型能力边界的一次合理补充。

2. RAG 到底补上了哪块短板:它的核心价值不在于“检索”本身

2.1 一句话讲清 RAG 的工作链路

RAG 的链路并不复杂:用户问题进来后,先由检索模块从知识库中召回一批相关片段,再把片段和原始问题一起拼进 Prompt,交给生成模型输出最终答案。检索、增强、生成,三个环节各管一件事。检索负责“找到证据”,增强负责“把证据放对位置”,生成负责“基于证据写人话”。

经常有人问我,RAG 是不是等于“向量数据库 + 大模型”?我会说,这只是最简化的实现。真正的 RAG 还包含文本切片、混合检索、重排序、上下文压缩、引用格式处理等一系列细节。把它当成一条装配线来看更合适:知识库是仓库,检索是拣货员,生成是包装工。仓库里没货,拣货员再勤快也没用;拣错了货,包装工再熟练也包不出对的东西。

2.2 为什么这种设计能实打实地增强生成性能

第一,事实性变强。给定相关资料后,生成模型的输出条件从“开放式续写”变成了“有依据的归纳”。它不再需要从模糊记忆里打捞内容,只需要在眼前这几段文字里组织答案。不确定性下降,答案与资料的一致性就会提升。

第二,知识可更新。传统模型的知识更新依赖重新训练或微调,周期长,成本高。RAG 把知识放在外部知识库里,文档更新后,检索结果自然变化,响应也随之变化。今天手册改了参数,明天模型回答的就是新参数,不需要动模型本身。这一点对产品迭代快的团队来说,价值远大于模型参数量的提升。

第三,答案可追溯。因为回答是基于检索片段生成的,你可以把片段编号、来源文档一起返回给用户。出了问题,能定位到原始资料;用户质疑时,也有据可查。直接靠模型记忆回答时,这个能力基本做不到。

第四,领域适配成本低。接入一套企业内部知识库,只需要做文档解析、切片、建立索引,不需要为每个领域重新训练模型。模拟项目X里,我甚至用通用的开源向量模型配合规则过滤,就达到了可用的问答效果。门槛低,迭代快,这是 RAG 能普及的重要原因。

2.3 但这不意味着 RAG 万能

有一点必须说实话:RAG 的性能上限由检索质量决定,下限由生成模型决定。如果检索环节召回的内容本身就不相关,那么生成模型再强,也只能在错误的资料上“流畅地胡说”。所以,很多项目做完之后效果差,问题往往不在模型,而在知识库清洗、切片方式和检索策略上。这也是我后面要花大量篇幅讲实操细节的原因。

3. 为什么不是“长上下文”或“微调”:我踩过对比的弯路

3.1 长上下文不是资料越多越好

有一段时间,我迷信过超长上下文窗口,觉得既然模型能读几十万字,那把整个知识库塞进 Prompt 不就行了?试过之后才发现这个想法很天真。长上下文窗口只是输入上限,不是有效注意力范围。实测下来,模型对长文本不同位置的关注度并不均匀,中间段的信息经常被“漏看”,开头和结尾的位置更容易被记住。

更麻烦的是,无关内容一多,噪声就会干扰判断。你以为塞了 20 份文档模型就能从里面挑出正确答案,实际上模型很可能被其中一份措辞相似但主题跑偏的文档带跑。而且,把大量文字传给生成模型,token 成本会快速上涨,响应延迟也跟着变高。长上下文适合少量高价值文档的场景,不适合把整个知识库都堆进去。这也正是 RAG 存在的原因:它先把最相关的几段找出来,再做生成。

3.2 微调改变的是“说话方式”,不是“事实记忆”

还有人会说:那我不做 RAG,直接微调模型,把知识灌进去不行吗?微调确实能改变模型的输出风格、格式、任务模式,比如让模型输出 JSON、模仿客服语气、按照固定模板总结。但它对事实记忆的注入效率并不高。要让模型记住一个新事实,需要训练数据里反复出现,并且还要防止它和其他知识互相干扰。一个几千条规则的知识库,靠微调来维护,既不划算,也不可靠。

每次知识一变,微调都要重新准备数据、训练、评估、上线。这个周期少则一两天,多则几周。而 RAG 只需要更新文档或索引,几分钟之内就能看到效果。用我自己的话总结:微调是给模型“立规矩”,RAG 是给模型“递资料”。大多数知识性问答场景,需要的是后者。

3.3 一张表看清三种方案的位置

方案典型成本知识更新方式事实可追溯适合场景
超长上下文token 成本高、延迟高每次手动改 Prompt弱少量长文档、单次分析
微调数据准备 + 训练 + 上线重新训练弱输出格式、领域风格、任务行为
RAG文档处理 + 检索服务更新索引强动态知识、私有知识、大规模文档问答

这张表做出来之后,我就不再把它们看成竞争关系了。实际项目里,三者完全可以组合:用微调固定输出格式,用 RAG 提供事实来源,在需要看整篇长文档时再让长上下文兜底。RAG 不是替代者,是拼图里重要的一块。

4. 什么情况我才建议上 RAG:选型判断与影响范围

4.1 建议上 RAG 的信号

判断一个项目要不要上 RAG,我不会只看它是不是“AI 问答”,而是看它的知识特征。如果用户的问题会触及训练数据之外的内容,比如企业内部制度、产品型号参数、专业领域文档;如果知识内容需要频繁更新,比如每月一版的新功能介绍;如果业务方要求答案必须能追溯到原始来源;如果文档规模已经大到连人翻目录都费劲,在这些信号出现时,RAG 基本就是最合理的选择。

另一个容易被忽略的信号是文档之间的关联性。很多知识库不是一问一答的 FAQ,而是几百页的规章制度。用户提问往往是从某个具体场景出发,需要跨章节地把相关内容拼起来。RAG 的检索能力可以把散落在不同章节的片段先找出来,再交给模型组织成连贯答案。这种能力是关键词搜索给不了的。

4.2 不建议硬上 RAG 的信号

我也见过不少没必要上 RAG 的场景。如果只有几十条固定问答,写进 Prompt 或者做个规则匹配就够了,不用专门搭索引。如果问题本质是数学推理、代码逻辑这类不需要外部知识支撑的任务,RAG 帮不上什么忙,反而会引入无关资料,干扰模型推理。如果知识库很小且基本不会变化,把内容直接写入系统提示词可能是更省事的方式。

还有一类情况要特别提醒:如果原始文档质量很差,扫描件、排版混乱、图表居多,直接接入 RAG 会得到灾难性的效果。检索系统检索的是文本片段,不是图片里的信息。文档清洗成本如果超过收益,得先考虑做文档处理,而不是急着接 RAG。

4.3 影响范围:从问答到 Agent

RAG 的应用范围也不止于问答。在 Agent 场景里,模型可以把检索当成一项工具来调用:遇到不确定的事实,先查资料再行动;多轮对话中,也可以把历史关键信息通过检索方式重新唤回。这个设计思路本质上是把“外部记忆”和“工作记忆”分开,模型不需要记住所有细节,只需要知道去哪里找细节。

所以我在看一个新项目时,已经不太问“要不要加检索”,而是问“检索要放在流程的哪个位置”。这比单独一个知识库问答的覆盖面更大。也正因如此,理解 RAG 为什么能增强生成模型,对做 AI 应用的人来说,不只是一道概念题,而是一个基础的架构判断能力。

5. 实操落地最容易踩的坑:检索、生成、评测三个环节都有雷

5.1 检索环节:召回不到,后面全白搭

我最早做 RAG 时,犯过一个特别典型的错误:只用了向量检索,结果用户问“发票抬头怎么修改”,召回回来的却是发票税率相关的章节。原因是两个章节的语义接近,但主题完全不在一个频道上。后来我在索引里同时接入了关键词匹配,并加了一层重排序,情况才明显改善。

这里有一个比较稳的配置组合,可以按需调:

{"chunk_size": 512, "chunk_overlap": 50, "retrieval_mode": "hybrid", "top_k": 8, "rerank_enabled": true, "generation_model_ctx_limit": 4000}

chunk_size 控制每个切片的长度。512 个字符左右比较通用,既能保留段落上下文,又不会让检索粒度太粗。overlap 是相邻切片的重叠区域,避免一句话被切断后两边都搜不到。top_k 我一般不会只取 1,因为第一名的召回结果有时候不是最合适的,多召回几条再重排,效果更稳。

切片这件事听着简单,做起来全是细节。表格转 Markdown 时内容会拆乱,PDF 里多栏排版会把两栏文字读成一行,这些都会直接污染检索结果。所以我会强调:前期花在文档清洗和切片规则上的时间,决定 RAG 效果的下限。

5.2 生成环节:检索结果不是塞得越多越好

检索结果召回后,下一步是拼 Prompt。很多人以为召回越全越好,恨不得把 top 30 都塞进去,结果模型被各种碎片信息搞晕,生成了和所有片段都沾一点边、但哪边都不准的答案。正确的做法是控制数量,比如取 5 到 8 条质量最高的片段,并在 Prompt 里明确写:只能依据给定片段回答,如果没有相关内容,直接说不知道。

这个约束非常重要。因为生成模型有自己训练时形成的“惯性”,不给约束,它会下意识用自己记忆里的知识补全答案,造成 RAG 最常见的幻觉:参考资料里明明没有这个细节,模型偏要顺着上下文编出来。加了严格约束之后,至少能把“编造”变成“拒绝回答”,这是更可控的状态。

另一个细节是引用来源。让模型在回答后面标注引用来源的编号,比如 [1]、[2],这样用户能看到答案对应的是哪份资料。检查时也方便:如果答案说了一段但没有任何引用,大概率是模型自己发挥的。这个习惯我强烈建议从第一版就培养,后期回溯问题会省很多事。

5.3 评测环节:别只用肉眼感觉

RAG 上线前,我最大的教训是评测不规范化。肉眼看了几个例子觉得回答挺顺,就以为效果不错。结果到线上才发现,几十条提问里有好几类问题都没覆盖到。后来我整理了一个必测题目集,至少包含三种问题:能从文档直接找到答案的;需要跨章节汇总的;文档里根本没有答案的。第三种尤其重要,因为“拒绝回答”和“强行编造”只有一线之隔。

评测指标可以分成两部分看:检索侧,看召回率、命中率、排序质量;生成侧,看答案是否与给定片段一致,有没有引用错误。每改一次索引或切片规则,都拿同一套题跑一遍,对比前后差异。这个过程不复杂,但能防止你“拍脑袋优化”,也能给团队一个统一的效果衡量方式。

我把常见问题整理成一张速查表:

现象可能原因排查方向
答案提示查不到资料切片太粗或问题关键词被切开调小 chunk_size,增加 overlap
回答内容明显偏题召回结果不相关检查向量模型效果,加入关键词检索
答案与给定资料矛盾生成模型自由发挥强化 Prompt 约束,限制来源编号
长文档中的知识被漏掉切片位置影响召回按章节结构切片,维护元数据,重排
答案经常带乱码或格式错原始文档解析质量差先做文档清洗,再进入索引流程

这张表每次复盘都值得拿出来过一遍。踩坑不可怕,可怕的是不知道怎么定位。

6. 我的一点真实体会:RAG 是“工程问题”不是“模型问题”

6.1 不要神化 RAG,也不要轻视它

做了几个 RAG 项目之后,我的感觉是:RAG 并没有让模型本身变聪明,它只是把模型的聪明用在正确的地方。一个表达优秀但没有资料可看的模型,和一个资料齐全但不会检索的系统,都做不出好的知识问答。只有当检索、生成、评测三件事形成闭环,RAG 的价值才会真正显现。

我个人最深的体会是“效果从哪来”——一半来自高质量的知识库,一半来自对检索细节的死磕,模型反而不是最大的变量。很多人一开始问“该用哪家模型”,我是建议先问“我有哪些文档,文档里有没有能回答用户问题的内容”。没有内容,再强的模型也只能空转。

6.2 后续可以继续扩展什么

如果你已经有一个能跑的 RAG 系统,下一步可以往这些方向扩:给切片维护文档标题、章节、更新时间等元数据,让检索能做时间过滤;引入重排序模型,提升 top 结果的准确率;在多轮对话里加入追问能力,根据前文信息做二次检索;还可以把 RAG 接进 Agent,让模型根据任务动态决定要不要查资料。

我后来在模拟项目X里,就是靠这些逐步迭代,把准确率从最初的一半不到,慢慢提到了业务可用的水平。这个过程没有玄学,全靠业务目标倒推技术方案:哪里不准改哪里,改完拿测试题验证。RAG 与其说是一个“技术”,不如说是一套系统工程。把这套工程的每一环想清楚,“为什么选 RAG”这个问题自然就有了答案。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进