RAG(检索增强生成)工作原理与流程详解
检索增强生成(Retrieval-Augmented Generation,RAG)是一种将信息检索与大语言模型(LLM)相结合的生成式 AI 架构。其核心目标是在不重新训练模型的前提下,为 LLM 注入外部知识,缓解知识截止、幻觉以及领域知识不足等问题。本文系统性地阐述 RAG 的工作原理与完整流程。
1. RAG 的基本概念
大语言模型在预训练阶段已将大量知识内化至参数中,但存在明显局限:
- 知识存在截止日期,无法感知训练后发生的事实。
- 面对垂直领域、私有文档或实时数据时,模型缺乏相关背景。
- 容易产生“幻觉”,即编造事实性错误内容。
RAG 的解决思路是:在生成回答之前,先从外部知识库中检索与用户问题相关的文档片段,将这些片段作为“参考上下文”与原始问题一同送入 LLM,从而让模型基于检索到的证据生成答案。这一模式将生成过程解耦为“检索”与“生成”两个环节,增强了输出的可控性、可解释性和时效性。
2. RAG 的整体架构与工作流程
RAG 系统的运行通常分为离线索引构建和在线查询处理两个阶段。以下为端到端的流程示意:
离线阶段(知识库构建) 文档源 → 文档解析 → 文本分块 → 嵌入向量化 → 向量索引存储 在线阶段(查询与生成) 用户问题 → 查询向量化 → 相似度检索 → 获取 Top-K 文档块 → 构造提示词 → LLM 生成回答2.1 离线阶段:知识库准备
文档加载与解析
支持多种格式(PDF、HTML、Markdown、Word 等),通过文档加载器提取纯文本内容,并保留必要的元数据(如标题、章节、来源等)。
文本分块(Chunking)
长文档需切割为适当大小的语义单元,称为“块”(chunk)。分块策略直接影响检索粒度与生成质量:
- 固定长度分块:按字符或 Token 数分割,简单高效,但可能割裂语义。
- 基于分隔符的分块:按段落、句号等自然边界分割,保持语义相对完整。
- 递归分块:使用分隔符层次结构(段落 → 句子 → 词语)逐步分割,兼顾完整性与长度控制。
- 语义分块:利用模型判断句子间相似度,将语义连贯的句子归入同一块,但计算成本较高。
块大小过大会引入噪声,降低检索精度;块大小过小则可能丢失上下文,使检索结果碎片化。典型块大小在 256~1024 Token 之间,并常设置块间重叠(overlap)以保留边界处的连续信息。
嵌入向量化
使用嵌入模型(Embedding Model)将每个文本块映射为固定维度的稠密向量。该向量编码了文本的语义信息。常用的嵌入模型包括 OpenAItext-embedding-3系列、Cohere Embed、bge-large、all-MiniLM-L6-v2等。
向量索引构建
将生成的向量集合存入向量数据库(如 Milvus、Qdrant、Pinecone、Weaviate 等),并构建近似最近邻(ANN)索引以支持高效检索。索引算法的选择(HNSW、IVF、DiskANN 等)需在速度、精度和内存占用之间权衡。
2.2 在线阶段:检索与增强生成
查询处理与向量化
用户输入自然语言问题后,系统使用与离线阶段相同的嵌入模型将查询文本转换为查询向量。保持嵌入空间一致是确保检索有效性的前提。
相似度检索(Retrieval)
查询向量在向量数据库中执行相似度搜索,通常采用余弦相似度或内积作为度量。返回与查询向量最相似的 Top-K 个文本块及其相似度分数。K 的取值需要平衡信息充分性与上下文窗口限制,典型值在 3~10 之间。
为提高检索质量,常引入以下优化:
- 查询重写:利用 LLM 对原始问题进行扩展或分解,以提升召回率。
- 混合检索:结合稀疏检索(如 BM25)的关键词匹配能力,对向量检索与关键词检索的结果进行融合排序。
- 重排序(Re-ranking):使用更精准但计算成本更高的排序模型(如 Cohere Rerank、
bge-reranker)对召回结果进行二次排序,筛选出最相关的块。
上下文构造与 Prompt 组装
将检索到的 Top-K 文档块内容按一定格式拼接,与原始用户问题组合成提示词(Prompt)。典型的 Prompt 模板如下:
请根据以下参考信息回答问题。如果参考信息不足以回答问题,请明确说明。 参考信息: {context} 问题:{question} 回答:其中{context}为拼接后的文档块,可附带来源标记以提高可信度。
LLM 生成回答
组装完成的 Prompt 送入大语言模型(如 GPT-4、Claude、开源 Llama 3 等),模型在给定上下文的条件下生成最终答案。此时模型的行为从“完全依赖内部知识”转变为“基于检索证据的阅读理解与总结”。
2.3 可选增强:Agentic RAG 与迭代检索
在基础 RAG 之上,更复杂的架构允许模型主动决定何时检索、如何检索,甚至进行多步推理与工具调用。例如:
- Self-RAG:模型在生成过程中自我评判是否需要检索,并反思生成内容的相关性与事实性。
- ReAct:交替进行推理与行动,模型可多次调用检索工具并整合逐步获取的信息。
- Adaptive RAG:根据问题复杂度动态调整检索策略。
这些模式将 RAG 从固定流程扩展为灵活的 Agent 行为,但仍以基础的检索-生成循环为根基。
3. 工作流程中的关键要素
3.1 嵌入模型的选择
嵌入模型决定了语义空间的分布质量。不同模型对同一文本产生的向量差异显著,替换模型时需重新评估相似度阈值、检索性能,甚至重新构建索引。
3.2 向量数据库与索引类型
向量数据库不仅存储向量,还管理元数据过滤、增量更新和分布式扩展。索引类型的选择直接影响检索延迟和召回率。例如,HNSW 在内存中实现高速搜索但占用资源大;IVF 配合量化技术可压缩存储,适合超大规模数据集。
3.3 相似度度量与阈值
余弦相似度是主流度量,但值的绝对值因模型而异。设定合理的相似度阈值可用于过滤不相关结果,避免引入噪声。工程实践中常结合归一化向量,使用内积代替余弦计算以提升效率。
3.4 上下文窗口管理
大语言模型的上下文窗口虽然不断扩大,但有效利用仍至关重要。需在 Prompt 中对检索到的文档块进行排序(如按相似度降序)、截断,并避免因过多无关内容挤占有效空间。必要时可采用摘要压缩或对长文档进行层级检索(如先检索段落再检索具体句子)。
4. RAG 相对于纯生成模型的优势
- 知识实时性:外部知识库可随时更新,无需重新训练模型。
- 可解释性:生成的答案可追溯至具体来源文档,便于验证。
- 领域适配:只需构建领域知识库,即可让通用模型具备专业能力,降低微调成本。
- 幻觉缓解:当答案被约束在检索到的证据范围内时,模型凭空捏造的概率显著降低。
5. 总结
RAG 通过将检索系统与生成模型深度结合,构建了一套灵活、可控、可扩展的知识问答架构。其核心流程——文档解析、分块、向量化、相似度检索、上下文组装与 LLM 生成——构成了现代 AI 应用中知识检索系统的标准范式。理解这一流程及其每个环节的设计考量,是构建高质量 RAG 系统的前提。在此基础上,开发者可根据业务需求引入混合检索、重排序、查询改写以及 Agent 化策略,持续优化性能与准确性。
