乐于分享
好东西不私藏

一个 RAG 系统到底怎么工作?从文档入库到答案生成全流程拆解

一个 RAG 系统到底怎么工作?从文档入库到答案生成全流程拆解

很多人第一次了解 RAG,会觉得它的概念并不复杂: “先检索资料,再让大模型回答。”

但一旦进入工程实现,就会发现真正的 RAG 系统远不止一句话那么简单。

它通常包含两条主线:

  • 一条是 离线的数据准备链路

  • 一条是 在线的问答处理链路

只有这两条链路都打通,RAG 才能真正跑起来。


一、先理解一个核心结论

RAG 不是一个单点能力, 它更像是一条完整的“信息处理流水线”。

如果把它类比成图书馆系统,那么:

  • 离线阶段是在“整理图书、建目录、编索引”

  • 在线阶段是在“理解读者问题、查书、给出答案”

也就是说,RAG 的效果,不只是由模型决定,更由前面的数据处理与检索质量决定。


二、第一条主线:离线数据准备

离线阶段可以理解为“知识库建设”。

它主要做的事情,是把原始文档变成机器可以高效检索的结构。

1. 数据加载

企业里的知识来源通常非常杂:

  • PDF

  • Word

  • Excel

  • 网页

  • 邮件

  • 数据库记录

这些数据格式不同、结构不同,不能直接拿来给模型使用。 第一步就是把它们统一读取出来。

2. 格式转换

文档读进来以后,系统要把内容尽量转成可处理的文本。

比如:

  • PDF 要做文本解析

  • 表格内容可能要转成文字描述

  • 网页要去掉广告、脚本、无关导航内容

这一步的目标不是“完整保留一切形式”, 而是尽可能保留 有效信息和原始结构

3. 数据清洗

原始资料里往往带有大量噪声:

  • 页眉页脚

  • 重复段落

  • 乱码

  • 特殊符号

  • 无关声明

如果这些内容直接进入知识库,后面的检索质量会明显下降。 所以清洗是必须做的基础工程。

4. 文档分块

这是 RAG 里最关键的一步之一。

因为大模型和检索系统都不适合直接处理超长全文, 所以需要把文档切成更小的片段,也就是我们常说的 Chunk

分块时要解决两个矛盾:

  • 块太小,语义可能不完整

  • 块太大,噪声会增加,还可能超出模型上下文限制

因此,分块本质上是在平衡 语义完整性 和 检索效率

5. 向量化

切好的文本块,需要进一步转换成向量表示。 这个过程由 Embedding 模型完成。

为什么一定要向量化? 因为计算机并不真正理解“文字意思”,但它可以在向量空间里比较“语义距离”。

这一步完成后,系统才能支持“语义检索”。

6. 向量存储

最后,这些向量会被写入向量数据库,并建立相似度索引。 这样,当用户提问时,系统才能快速找到最相关的内容片段。

这就完成了离线建库阶段。


三、第二条主线:在线问答处理

如果说离线阶段是在“备货”, 那么在线阶段就是“真正接客”。

当用户发来一个问题时,RAG 系统通常会按下面的流程运行。

1. 查询理解

用户的问题不一定表达得很标准。 系统需要先理解他的真实意图。

比如用户说:

“最新的产品手册在哪?” 或者 “我想看新版说明书。”

这两句话表达不同,但需求可能是一样的。

2. 查询重写

理解完问题后,系统通常还会做一次“检索友好化”。

比如:

  • 扩展同义词

  • 补全关键词

  • 纠正常见拼写错误

  • 把自然语言转成更适合检索的形式

这一环节做得好,召回率会明显提升。

3. 检索相关内容

接下来,系统会从向量数据库中检索与问题最相关的文档块。 成熟系统往往不会只用一种方式,而是结合:

  • 向量检索

  • 关键词检索

  • 元数据过滤

这样做的目的,是兼顾语义理解和精确匹配。

4. 重排序

初步检索出来的结果,不一定真正最适合回答问题。 所以系统还会做一次重排序,把最相关、最有用的内容排到前面。

你可以把它理解为:

第一次检索是“广泛找资料”, 第二次重排是“挑出最值得给模型看的资料”。

5. 提示词组装

找到资料后,并不是直接扔给模型就结束了。 系统还要把:

  • 用户问题

  • 检索到的上下文

  • 输出要求

一起拼成一个结构清晰的 Prompt。

Prompt 设计得越规范,模型越容易按要求作答。

6. 大模型生成答案

最后一步,才轮到大模型真正出场。

这时它不是“空手回答”, 而是带着检索到的上下文去生成答案。

所以 RAG 的高质量回答,本质上是:

检索能力 + 上下文组织能力 + 模型生成能力 的共同结果。


四、为什么很多 RAG 项目效果一般

很多团队以为只要“文档入库 + 向量检索 + 调用模型”就能得到一个好系统。 但现实往往不是这样。

因为 RAG 真正难的地方在于:

  • 文档解析是否干净

  • 分块是否合理

  • 检索是否准确

  • 重排是否有效

  • Prompt 是否能约束模型

  • 更新机制是否稳定

换句话说,RAG 不是一个模型问题,而是一个系统工程问题。


五、用一个例子把流程串起来

假设你要做一个“电器说明书问答系统”。

用户问:

“微波炉运行时声音特别大,可能是什么原因?”

一个完整的 RAG 系统会怎么做?

第一步,先在离线阶段把说明书 PDF 解析出来,按章节分块并建立索引。 第二步,用户提问后,系统识别“声音大”“故障”“排查”这些意图。 第三步,从知识库中检索出“噪音问题”“异常运行”“故障排除”等相关段落。 第四步,对结果重排,挑出最可能回答问题的片段。 第五步,把这些片段和用户问题拼进 Prompt。 第六步,由大模型生成一段自然语言回答。

最终用户看到的不是“说明书第 47 页、第 89 页”, 而是一段读得懂、可执行的解释。

这就是 RAG 在真实业务中的价值。


结语

RAG 的全链路并不神秘, 但它绝不是“加一个向量库”那么简单。

真正有效的 RAG,背后一定包含两件事:

  • 离线阶段把知识整理好

  • 在线阶段把问题处理好

下一篇,我们就进入最关键的优化层:一个 RAG 系统为什么效果不好?很多时候,不是模型不行,而是分块、检索、重排序和 Prompt 这 4 个环节没做好。