人人都会AI编程

2.1 RAG 两大核心阶段:索引阶段(离线) + 检索生成阶段(在线)

更新时间:2026-07-12

理解了 RAG 的基本定义和设计思想后,接下来的问题自然是:这样一个系统是如何运转起来的?从工程实现的角度看,RAG 的完整流程可以清晰地划分为两个阶段——索引阶段(离线)检索生成阶段(在线)。这种划分不仅让架构变得易于理解,也直接对应了日常维护和性能优化的分工。

2.1.1 索引阶段:把知识“翻译”成可检索的形式

索引阶段发生在用户提问之前,是一个一次性的预处理过程(仅在知识库内容更新时重新执行)。它的目标是将人类可读的文档,转换成机器可以高效检索的数字化索引。

核心步骤:

  1. 文档加载与解析

从各种来源(PDF、Word、Markdown、网页、数据库导出等)读取原始文本内容。这一环节需要处理格式各异、结构复杂的文件,去除无关的页眉页脚、表格残损等问题,保证提取出的正文干净可用。

  1. 文本切分

将长文档切成一个个长度适中的“片段”(chunk)。切分的原则需要在“粒度”上找到平衡:

  • 片段太小,可能丢失上下文,检索到的只是一个破碎的句子。
  • 片段太大,虽然包含更多上下文,但检索精度会下降,也可能让模型处理时超出长度限制。

实际中通常按照固定 token 数切分,同时保留相邻片段间的重叠部分,以减少语义断裂。

  1. 向量化

使用嵌入模型(embedding model)将每个文本片段转换成一个高维向量(一串数字)。这个向量代表了该片段的语义特征,“意思相近的文本,向量距离也相近”。

  1. 存入向量数据库

将生成的向量连同原始文本片段、以及必要的元数据(来源文件名、章节、更新时间等)一同写入向量数据库,并建立索引。这一步完成后,知识库就具备了快速语义搜索的能力。

索引阶段的产物是一个“可被向量搜索的知识库”。它独立于大模型,可以随时更新、扩展或替换,就像给系统建立了一套实时更新的“资料卡片柜”。

2.1.2 检索生成阶段:实时“查资料 + 写答案”

检索生成阶段发生在用户提问之后,是一个实时在线流程。它利用索引阶段准备好的资料库,即时为用户生成答案。

核心步骤:

  1. 问题向量化

用户输入问题后,使用同一个嵌入模型将问题转换成向量。保证问题向量与文档片段向量处于相同的语义空间,才能准确计算相似度。

  1. 相似度检索

在向量数据库中用该问题向量进行最近邻搜索,召回与问题语义最相关的前 k 个文档片段(如 top-5)。这一步通常在几十毫秒内完成。

  1. 构建提示上下文

将召回的片段与原始问题按照预设的提示模板拼接在一起。模板通常会明确指示模型“根据下面的资料回答问题”,并将每个片段附上来源标识。例如:

   请根据以下参考资料回答问题,如果无法从资料中找到答案,请明确说明。
   
   参考资料:
   [1] 《员工手册》第3.2条:...
   [2] 《2025年福利调整通知》:...
   
   问题:今年的年假是多少天?
   
  1. 大模型生成

将拼好的提示发送给大语言模型。模型基于提供的资料组织语言,生成最终答案。由于模型被明确限制了“信息边界”,它会自然地引用资料内容,并能在信息不足时说出“未找到相关信息”。

这个在线阶段的体验,对用户而言就是一个普通的问答过程,但背后却完成了一次精准的资料查找和基于证据的回答生成。

2.1.3 为什么这样划分

将整个过程划分为离线和在线两个阶段,带来的工程优势非常显著:

  • 性能分离:耗时的文档处理、向量化只执行一次(或仅在更新时触发),在线问答只需做一次轻量的搜索和一次大模型调用,保证了实时响应。
  • 独立维护:知识库内容的更新、清洗、切分策略的调整完全在离线阶段完成,不影响线上服务;同样,检索算法、提示模板的优化也可以在在线阶段独立进行。
  • 成本可控:索引构建可以在空闲时段批量进行,使用性价比更高的计算资源;在线生成则只在实际查询时调用 LLM,按需付费。

一目了然的对比表:

| 维度 | 索引阶段(离线) | 检索生成阶段(在线) |
|------|------------------|----------------------|
| 执行时机 | 系统搭建时、知识更新时 | 每次用户提问时 |
| 主要任务 | 文档→向量索引 | 问题→检索→生成答案 |
| 耗时 | 分钟到小时级(取决于文档量) | 毫秒到秒级 |
| 资源消耗 | CPU/GPU 批量处理,一次性投入 | 按调用计费,持续开销 |
| 可变更内容 | 知识范围、切分策略、嵌入模型 | 检索参数、提示模板、生成模型 |
| 产出 | 可搜索的向量知识库 | 最终用户可见的答案 |

理解了这两个阶段的职责和配合方式,也就掌握了 RAG 系统运转的基本骨架。后续章节中所有关于选型、调优的讨论,最终都会落回到这两个阶段的具体环节上。