✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

RAG的基本流程包含哪些阶段?

创建时间:2026-08-30 更新时间:2026-09-07 阅读次数:1029 次

一、一句话概括(先给结论)

RAG = 检索(Retrieve)+ 增强(Augment)+ 生成(Generate)

即:先根据用户问题去外部知识库找回相关文档,再把文档和问题拼在一起交给大模型回答。


二、完整流程(5个阶段,面试按这个讲)

阶段1:离线索引(预处理阶段)—— 把知识库“编成目录”

这一步是在用户提问之前做好的准备工作,只需做一次(知识更新时重新做)。

子步骤 具体操作
文档清洗 去除页眉页脚、特殊字符、乱码,统一编码格式
文档切块(Chunking) 将长文档切分为合适大小的文本块(通常 200~500 字),避免过长或过短影响检索精度
向量化(Embedding) 用嵌入模型(如 text-embedding-ada-002BGE)将每个文本块转成固定维度的向量
构建索引 将向量存入向量数据库(如 Milvus、Pinecone、Chroma、FAISS),并建立高效索引(如 HNSW、IVF)

这个阶段的核心产出是 “向量索引库”,相当于一本书的目录。


阶段2:查询理解(在线预处理)—— 让问题更“好搜”

用户提问后,先对问题本身做优化,提升检索质量。

子步骤 具体操作
Query 改写 将口语化问题改写为更规范的检索语句(如“怎么退钱” → “退款流程”)
Query 扩展 生成同义词或相关问法,以覆盖更多召回结果(如“价格”扩展为“费用、收费、定价”)
多路查询 同时生成多个不同措辞的查询向量,分别检索后再合并结果

这一步不是必须的,但属于加分优化项,面试时提到说明你有工程经验。


阶段3:检索召回(核心环节)—— 从知识库里“翻书”

将处理好的 Query 向量化,与索引库中的向量做相似度匹配。

子步骤 具体操作
向量检索 计算 Query 向量与所有 Chunk 向量的余弦相似度或内积,召回 Top-$k$(如 $k=5$ 或 $10$)个最相似的文本块
关键词检索(混合检索) 可结合 BM25 / TF-IDF 做关键词匹配,与向量检索结果融合(hybrid search),提升召回率
重排序(Rerank) 用更精密的交叉编码器(Cross-Encoder)对召回的 Top-$k$ 重新打分排序,选出最相关的少数几个(如 Top-3)

召回质量决定了最终回答的准确性,是 RAG 的命门


阶段4:上下文增强(拼接阶段)—— 把“答案素材”塞给模型

将检索到的相关文本块与原始用户问题组合成一条完整的 Prompt。

子步骤 具体操作
构建 Prompt 模板 例如:“请根据以下参考内容回答问题:\n\n参考内容:{context}\n\n问题:{question}”
上下文压缩 如果检索内容过长,可先用摘要模型压缩,避免超出上下文窗口
注入系统指令 添加约束条件,如“如果参考内容中没有答案,请直接说不知道,不要编造”

这一步的 Prompt 设计直接影响模型是否会“胡说八道”。


阶段5:生成回答(推理阶段)—— 让模型“照着念”并组织语言

将拼接好的 Prompt 送入大语言模型(LLM),生成最终回答。

子步骤 具体操作
LLM 推理 模型基于参考内容 + 问题,生成自然语言答案
引用标注 可在回答中标注信息来源(如 [1][2]),对应到具体的文档块,增强可信度
答案校验 可选环节:检查生成的答案是否与检索内容一致,防止模型“跑偏”

三、流程图(用文字描述,面试时可边说边画)

用户提问

Query 理解(改写 / 扩展)

向量检索(召回 Top-k 相关文档块)

重排序(Rerank,选出最相关的少数几块)

拼接 Prompt(参考内容 + 用户问题)

LLM 生成回答

返回用户(可带引用来源)


四、此问题适合作为面试题吗?

适合,而且是一道很实用的基础题。

能快速考察候选人对 RAG 整体架构的理解是否清晰;

适合初、中级岗位或作为高级岗位的热身题;

后续可以方便地追问细节,比如:分块策略、向量模型选择、重排序方法、如何评估检索质量等。

五、面试关键追问及回答策略

面试官常在这个问题基础上做延伸追问,以下是高频追问及标准应答:

Q1:检索到的文档块怎么切分最好?

:没有固定标准,一般遵循三个原则:

  • 按语义边界切(如段落、章节),而不是机械按字符数截断;
  • Chunk 大小通常设为 $200 \sim 500$ 个 token,太小丢失上下文,太大则引入噪声;
  • 可叠加 重叠切分(overlap),让相邻块有部分重复,避免关键信息恰好被切断在边界。

Q2:向量检索为什么有时不准?怎么优化?

:不准的原因主要有三条:

  • 1、Embedding 模型与领域不匹配(例如通用模型处理医疗专业术语效果差) → 解决方案:用领域数据微调 Embedding 模型;
  • 2、Chunk 切分不合理 → 解决方案:改用语义切分,或尝试不同的 chunk size 做消融实验;
  • 3、相似度计算过于单一 → 解决方案:采用混合检索(向量 + 关键词),再做 Rerank。

Q3:你提到重排序(Rerank),它与向量检索有什么区别?

  • 向量检索(双塔模型)速度快,能处理百万级数据,但精度相对较低,用于 “粗排”,从海量数据中快速筛出 Top-100;
  • Rerank(交叉编码器)精度高,但计算量大,无法处理大规模数据,用于 “精排”,仅对 Top-100 中的文档做二次打分,选出 Top-3。

这两者通常是级联使用:粗召回 → 精排序,兼顾效率与精度。


六、补充公式(方便面试推导)

若定义检索阶段召回相关文档的概率为:

$$ P(\text{retrieve}) = \text{Top-}k \left( \text{sim}\big(\text{Emb}(q),\, \text{Emb}(d_i)\big) \right) $$

其中 $\text{Emb}(\cdot)$ 为嵌入函数,$\text{sim}(\cdot)$ 为余弦相似度。

最终生成阶段的条件概率为:

$$ P(y \mid q) = \sum_{d \in \text{Top-}k} P(d \mid q) \cdot P_{\text{LLM}}(y \mid q, d) $$

前者由检索器决定,后者由生成模型决定。


七、面试加分提醒

回答流程类问题,一定不要只背阶段名称

更好的表达方式是:“先离线的索引构建,再在线的检索生成”,并且每讲一个阶段都顺带提一句该阶段的常见坑优化手段,这样能立刻拉开和其他候选人的差距。


📌 面试天下网:一款服务于大一新生的口袋书,让大家在无聊的公共课上可以学习大模型技术!
📌 网站公告:【悬赏 200 元/篇】寻找“大模型面试战场”的一手回忆录

评论专区

评论加载中...