RAG(Retrieval-Augmented Generation,检索增强生成)是一种将信息检索系统与生成式大语言模型相结合的机器学习框架。
其核心定义为:
在生成答案之前,首先利用一个独立的检索模块,从一个庞大的、可被索引的知识源(如维基百科、企业内部文档或向量数据库)中,动态地提取与输入提示(Prompt)最相关的若干个上下文文本块(Chunks)。然后,将这些检索到的文本块作为额外的背景知识,与原始输入一起拼接成增强后的提示,最终输入给生成器(大语言模型),以约束并指导其生成符合事实、且具有外部依据的输出结果。
RAG一般用于 企业知识库、客服机器人、文档助手三个方向。
一、为什么需要RAG
大语言模型(LLM)的本质是预测下一个 token,这带来了三个天然缺陷:
一个直观但不可行的想法
你可能会想:把整个企业知识库一次性丢给 AI,让它回答。 这听起来合理,但实际上不可行,原因有三:
- 上下文窗口限制:即使现代模型能处理长输入,内容太多时依然会出现注意力分散。
- 计算成本高:每次提问都要处理整个知识库,资源消耗巨大。
- 响应速度慢:用户无法忍受等一两分钟才能得到答案。
更好的方案:开卷考试模式
在回答之前,先找到最相关的那几页或那几段内容,再交给大语言模型。 就像开卷考试一样:
- 看到一个问题
- 大致定位到书中哪几页可能包含答案
- 只阅读那几页,然后回答
RAG 的本质:
RAG = Retrieval-Augmented Generation(检索增强生成)
- Retrieval(检索):先在资料库中搜索与问题最相关的片段
- Augmented Generation(增强生成):基于检索到的资料,让模型生成更准确、更可靠的答案
RAG的本质就是在模型回答之前先去检索资料,再基于资料生成答案,而不是每次都需要从头把这本书把这个厚厚的文档从头翻到尾.把 RAG 想象成一个“有参考书的考生”:他不需要把整本书背下来,而是拿到题目后快速翻到相关章节,再组织出答案。这样既高效又准确,还能随时更新知识库(换一本新参考书即可)。
二、RAG的核心流程
RAG(Retrieval-Augmented Generation,检索增强生成)的核心流程可以分为两个阶段:
- 第一阶段:数据准备(把企业文档变成计算机能快速查找的形式)
- 第二阶段:用户提问(根据问题找到相关资料,再让大模型生成答案)
下面我们用“搭建一个企业知识库问答系统”作为例子,一步步拆解。
(1)、数据准备阶段
假设我们有一堆企业内部文档(Word、PDF、网页等)。原始文档通常很长、信息混杂,不能直接丢给模型。
1. 切分(Chunking)
把长文档拆成很多小块,每一块尽量表达一个相对完整的语义(比如一个段落、一个小节)。 切分方式可以按:
- 章节
- 段落
- 固定字数(例如 500 字一块)
为什么一定要切分? 整篇文档一起处理会导致语义混乱,检索不准确。就像一本书,你不会每次提问都把整本书从头读到尾,而是先找到相关的几页。
2. 向量化(Embedding)
计算机只认识数字,不认识文字。所以我们需要把每个文本块转成向量(一组数字,可以看作一个坐标点)。
用二维坐标来理解: 假设我们有一个 X-Y 平面:
- 文本块“张三是男的” → 对应坐标点 (1, 1)
- 文本块“张三 30 岁” → 对应坐标点 (2, 1)
- 文本块“销售额 1 万元” → 对应坐标点 (-1, -1)
在这个语义空间里,意思相近的文本,它们的坐标点距离更近;意思不相关的,距离更远。 (实际的 embedding 模型可能有几百甚至上千个维度,但原理相同。)
3. 存入向量数据库
每个文本块及其对应的向量一起存入数据库。数据库至少有两列:

至此,数据准备完成。

(2)、用户提问阶段
用户输入一个问题,比如:“张三是谁?”
1. 将问题也转成向量
使用同样的 embedding 模型,把问题“张三是谁?”转换成向量,假设是 (1.5, 0.5)。
2. 相似度匹配(初筛)
用这个向量去和数据库里的每一个文本块的向量计算相似度。 常见方法:
- 余弦相似度:计算两个向量之间的夹角
- 欧氏距离:计算两个点之间的直线距离
然后返回最相关的 top K 个块。K 可以取 1、10、100 等,按需要设置。 假设我们设 K=4,那么系统会召回 4 个最像的文本块。
这一步只是粗筛,只能判断“看起来像不像”,不能保证这 4 个块真的回答了问题。
3. 重排序(Rerank)
用更强的模型把这 4 个候选块逐一和问题进行比较,判断“这一段是否真的回答了问题”。 经过重排,我们可能只选出其中 2 个最相关的片段。
4. 构建提示词(Prompt)并交给大模型
把以下内容组合成一个最终的提示词:
- 用户的问题(“张三是谁?”)
- 检索到的 2 个相关片段(参考资料)
- 系统指令,例如:“严格按照参考资料回答,不知道就说不知道,不要胡乱编造。”
然后把这个提示词发给大语言模型(LLM)。
5. 生成最终答案
大模型根据参考资料生成答案,返回给用户。 用户只会看到类似这样的回答:“张三是某某部门的员工,负责XXX工作。”
用户完全感知不到背后的检索、排序、提示词构建等过程,只觉得模型直接给出了正确答案。

三、RAG 的卡点及优化技巧
虽然 RAG 的核心流程看起来简单,但真正落地时有很多“坑”。下面介绍几个关键卡点和对应的优化技巧。
1、数据清洗:多格式文档解析
企业的原始数据往往不是干净的纯文本,可能包含:
- PDF(排版复杂,有表格、图片、多栏)
- 图片(需要 OCR 识别)
- 表格(结构化的行列数据)
卡点:PDF 解析尤其复杂,如果这一步没做好,后面的技术再好也没用——答案一开始就是错的。
优化技巧:
- 结合版面分析模型(识别标题、段落、表格、图片区域)
- 使用 OCR 技术 提取图片中的文字
- 针对不同格式(Word、PPT、HTML)采用不同解析器
数据清洗是整个 RAG 系统的基础,必须足够重视。
2、切分(Chunking)的粒度问题
切分是影响 RAG 效果最关键的因素之一。

优化技巧:
- 保证每个块语义相对完整(比如一个段落、一个小节)
- 信息颗粒度要刚好 —— 具体大小需要根据实际文档和场景反复测试
- 可以按章节、段落、固定字数(如 500 字)灵活组合

3、问题重写(Rewrite)
用户提问往往很口语化、碎片化,比如直接问“张三是谁”。 这会导致向量检索时匹配不准。
卡点:原始问题太短、太模糊,无法在知识库中精准定位。
优化技巧:
- 对用户问题进行自动重写,补全隐含信息
- 例如:“张三是谁” → 重写为 “详细介绍张三的性别、年龄、家庭住址等情况”
- 目标:让优化后的问题更适合向量检索,更贴合知识库中的内容
4、混合检索(Hybrid Search)
单纯用向量相似度检索有时会“意会”错,单纯用关键词检索又太死板。

优化技巧:
- 混合检索:两者一起用,再综合排序
- 相当于“先查字典 + 再问朋友”,取长补短
- 两个方法各有盲区,但它们的盲区刚好可以互补
5、大模型基座选型
即使前面检索到的资料完全正确,如果大模型本身不行:
- 产生幻觉(编造答案)
- 不遵循指令(不按给定的参考资料回答)
- 不稳定或反应慢
最终答案也是错误的。
优化技巧:
- 模型需要满足:低幻觉、稳定、能严格遵循指令
- 优先选择开源模型(可部署到本地,数据更安全)
- 模型基座是最后一道关卡,必须谨慎选择
总结
RAG 不是让 AI 变得更“聪明”,而是让 AI 在回答之前先找到对的资料,再基于对的资料生成答案。
- 数据清洗是地基
- 切分粒度决定检索精度
- 问题重写优化入口
- 混合检索兼顾精确与语义
- 模型基座保证最终输出质量




