首页 > AI百科 > 正文

什么是检索增强生成(RAG):AI为何能先查资料再回答问题

yjcdj 2026年9月18日 104 AI百科
什么是检索增强生成(RAG):AI为何能先查资料再回答问题插图
生成摘要
AI 生成,仅供参考

当你问一个 AI 助手“公司报销差旅费需要哪些材料”时,它有两种可能的回答方式:直接凭训练时学到的通用知识作答,或者先去查阅企业内部的报销制度,再根据找到的内容组织答案。后者所依赖的技术,通常称为检索增强生成,英文是 Retrieval-Augmented Generation,简称 RAG。

检索增强生成从知识库检索资料并生成回答的流程示意

RAG到底解决了什么问题

大语言模型擅长理解问题和生成语言,但它并不天然知道某个企业最新的内部规定,也不能保证记住训练数据之后发生的所有变化。

例如,模型可能知道“报销通常需要发票”,却不知道某家公司是否规定:

  • 国内差旅需要提交哪些票据;
  • 不同职级的住宿标准是多少;
  • 哪些费用必须在出差结束后多少天内提交;
  • 最近更新的制度是否已经替代旧版本。

如果把这些资料临时提供给模型,让模型参考资料回答问题,就形成了 RAG 的基本思路:

先从外部知识源中找到与问题相关的信息,再把这些信息交给大语言模型生成回答。

这里的“外部知识源”可以是企业知识库、产品说明书、客服文档、法律法规、研究资料,也可以是经过整理的数据库内容。RAG并不是让模型重新学习这些资料,而是让模型在回答时能够“查阅”这些资料。

一个完整的RAG问答流程

可以把企业知识库问答助手想象成一位会查档案的工作人员。用户提出问题后,系统通常会经历以下几个步骤。

1. 先把原始文档整理成可检索内容

企业知识库中的资料往往不是一张张规整的表,而是制度文件、网页、PDF、会议纪要和操作手册。系统首先需要读取这些文档,并清理无关内容,例如重复页眉、页脚和格式噪声。

接着,系统会把长文档切分成较小的片段。这个过程叫作文档切分。

切分不能简单理解为“每隔固定字数截断”。理想情况下,一个片段应尽量包含相对完整的语义,例如:

  • 一条具体规定;
  • 一个产品功能的说明;
  • 一个常见问题及其处理方式;
  • 一个流程步骤及其前置条件。

如果片段过长,检索时可能混入大量无关内容;如果片段过短,关键条件可能被拆散,模型拿到的信息就不完整。

2. 把文档片段转换为向量

计算机不容易直接根据“意思相近”来比较两段自然语言。为此,系统通常会使用一种模型,把文字转换成一组数字,这组数字被称为向量。

向量可以理解为文本含义在数学空间中的一种表示。语义相近的内容,往往会在这个空间中距离较近。例如:

  • “如何申请年假”
  • “员工休假审批流程”

虽然两句话使用的词不同,但它们讨论的主题相近,因此可能被检索到一起。

经过向量化处理的文档片段会被保存到向量数据库或其他支持相似度检索的系统中。这一步通常发生在知识库建立或更新时,而不是每次用户提问时重新处理全部文档。

3. 把用户问题转换成检索请求

当用户问“出差住酒店能报销多少钱”时,系统会分析这个问题,并将其转换成适合检索的表示。

检索系统随后会在知识库中寻找相关片段。它可能找到以下内容:

  • 不同城市的住宿标准;
  • 不同职级的报销上限;
  • 住宿发票和订单的提交要求;
  • 特殊情况下的审批规则。

这就是向量检索发挥作用的地方。它不只是寻找与问题完全相同的关键词,也会尝试寻找语义相关的内容。

不过,实际系统经常会把向量检索和关键词检索结合起来。因为制度编号、产品型号、专有名词等内容,有时更适合通过精确关键词查找。

4. 将检索结果拼接到问题上下文中

检索到相关片段后,系统会把它们与用户的问题一起交给大语言模型。这个过程常被称为上下文拼接。

模型看到的内容可能类似于:

  • 用户问题:出差住酒店能报销多少钱?
  • 参考资料:某制度中关于住宿标准、适用条件和审批要求的若干段落。

这些资料不是模型永久记住的新知识,而是本次回答时暂时放入输入上下文的信息。模型会根据问题和参考资料之间的关系,判断应该回答哪些内容。

5. 由大语言模型生成最终回答

最后,大语言模型负责把检索到的资料组织成自然语言。例如,它可能回答:

住宿报销标准取决于出差地点和员工职级。提交报销时,通常还需要提供合规发票及相关订单信息。若费用超过标准,可能需要额外审批。

在较完善的系统中,回答还可以附带资料名称、章节位置或引用片段,方便用户核对。不过,是否能准确引用,取决于文档处理、检索和生成环节的具体设计,并不是使用 RAG 就能自动保证。

RAG、直接提问和微调有什么区别

这三个概念都可能被用于让 AI 更好地回答问题,但它们改变的环节不同。

方式主要做法知识更新方式更适合解决的问题
直接提问只把问题交给大语言模型依赖模型已有知识和当前输入通用问答、写作、解释和头脑风暴
RAG先检索外部资料,再让模型参考资料回答更新知识库或检索内容企业知识问答、资料问答、需要参考最新文档的场景
微调使用特定数据进一步训练模型参数重新训练或继续训练模型调整表达风格、输出格式、任务行为和特定模式

直接提问:模型只依赖已有能力

直接提问最简单。用户把问题输入模型,模型根据训练过程中形成的语言能力和知识表示生成回答。

它适合处理解释概念、改写文本、生成提纲等任务。但如果问题涉及企业内部资料、刚刚变化的规定或非常具体的事实,模型可能没有相应信息,也可能给出听起来合理但并不准确的答案。

RAG:回答时临时查资料

RAG的重点是“查什么资料”和“如何把资料交给模型”。它通常不需要重新训练大语言模型,因此更容易把经常变化的内容纳入问答流程。

例如,企业修改了报销制度,理论上只需要更新知识库中的相关文档,之后的检索就有机会找到新规定。当然,系统仍然需要处理旧文档是否下线、版本是否清晰以及检索结果是否准确等问题。

微调:改变模型的行为方式

微调更像是对模型进行进一步训练,让它形成某种稳定的输出习惯或任务能力。例如:

  • 按固定格式输出工单;
  • 使用企业规定的术语;
  • 对特定类型的请求采取统一流程;
  • 学习某种风格或分类方式。

但微调并不等于建立一个随时可查询的知识库。把大量经常变化的制度直接塞进模型参数,更新成本可能较高,而且模型未必能在回答时准确指出某条规定来自哪个文档。因此,知识频繁变化、需要追溯来源的场景通常更适合采用 RAG,或将 RAG 与微调结合使用。

RAG为什么有时会答错

RAG能够让模型参考外部资料,但它不是“自动获得正确答案”的保证。错误可能出现在流程中的多个环节。

检索不到真正相关的内容

如果用户使用了与文档不同的说法,或者问题包含多个条件,系统可能找不到关键片段。例如,用户问的是“异地长期驻场期间的住宿报销”,而知识库只在标题中使用了“外派住宿管理”这一表述,简单检索可能无法准确匹配。

找到了片段,但上下文不完整

如果文档切分不合理,例外条款可能与主规则被拆到不同片段中。模型只看到“住宿标准为某个上限”,却没有看到“特殊城市适用另一标准”的补充说明,就可能产生片面的回答。

知识库内容本身过期或相互矛盾

同一个问题可能在旧制度、新制度和部门通知中分别出现。如果系统没有清晰的版本管理,检索结果可能同时包含互相冲突的内容。模型即使准确读到了这些资料,也不一定知道哪一份具有更高效力。

模型理解或组织答案时出现偏差

检索结果正确,并不意味着最终回答一定正确。模型可能遗漏限定条件、混淆不同段落,或者为了让回答听起来完整而补充资料中没有明确写出的内容。这类未经依据的补充,常被称为“幻觉”。

因此,可靠的 RAG 系统通常还需要配合文档来源管理、权限控制、结果排序、引用展示、人工审核和拒答机制。对于财务、医疗、法律或安全等高风险问题,不能因为系统使用了 RAG,就完全取消人工判断。

RAG适合什么,不适合什么

RAG特别适合以下类型的任务:

  • 根据企业内部制度回答常见问题;
  • 从产品手册中查找操作步骤;
  • 对一组研究资料进行问答和摘要;
  • 让客服助手参考经过审核的知识库;
  • 处理需要频繁更新、但不必重新训练模型的内容。

它不一定适合单独解决以下问题:

  • 需要模型进行复杂推理、规划或连续执行的任务;
  • 资料本身缺失、错误或互相矛盾的问题;
  • 需要实时感知现实世界的任务;
  • 仅靠文档无法判断、必须由专业人员承担责任的决策;
  • 主要目标是改变模型语气、格式或行为习惯的任务。

换句话说,RAG主要增强的是模型获得和使用外部信息的能力,而不是自动赋予模型可靠推理、专业判断或现实行动能力。

可以怎样理解RAG的价值

理解 RAG,可以抓住三个关键词:

  1. 检索:从外部知识源中寻找与问题相关的内容。
  2. 增强:把找到的内容加入模型本次回答的上下文。
  3. 生成:由大语言模型理解资料,并组织成自然语言答案。

它与直接提问的差别,在于回答前多了一步查资料;它与微调的差别,在于 RAG主要改变的是模型获得信息的方式,而不是直接改变模型参数。

所以,当你看到一个 AI 助手能够根据企业制度、产品文档或内部资料回答问题时,不必简单认为它“已经把所有资料记住了”。更准确的理解是:系统可能在用户提问后,先从知识库中检索相关内容,再让大语言模型基于这些内容生成回答。最终效果取决于资料是否可靠、检索是否准确、上下文是否完整,以及模型是否能正确使用这些信息。

文章版权归作者所有,未经允许请勿转载。

本文链接:https://www.chatcpt.com.cn/aibk/194.html