RAG检索增强生成的核心流程
文章目录RAG 工作流程一、索引阶段Indexing1. 加载文档Document Loader2. 文档切分ChunkChunk文本块递归字符切分器3. 文本向量化EmbeddingEmbedding文本嵌入Embedding Model向量模型向量维度Dimension4. 向量存储Vector Store向量数据库二、查询阶段Retrieval Generation1. Prompt 向量化2. 相似度匹配粗召回3. Reranker 重排精排Reranker重排模型4. 生成最终 PromptRAG 工作流程RAGRetrieval-Augmented Generation检索增强生成整体可分为两个阶段索引阶段离线 和 检索生成阶段在线索引阶段离线负责构建知识库仅在新增或更新文档时执行。从各种数据源加载数据 → 将文档切分为小块 → 对文本块进行嵌入 → 存储嵌入向量检索生成阶段在线用户每次提问时实时执行用于检索相关知识并生成最终答案。根据用户输入使用检索器从存储中检索相关文本块 → 大模型使用包含问题和检索结果的提示生成回答。一、索引阶段Indexing索引阶段也称为建库阶段属于离线预处理流程仅在知识库新增或更新时执行一次目的是将原始文档转换为可快速检索的向量数据。1. 加载文档Document Loader首先读取知识库中的原始文档。目前支持的文档格式包括Markdown.mdPDF.pdfWord.docxCSV.csvExcel.xlsx加载完成后文档会统一转换为程序可处理的文本对象。2. 文档切分Chunk由于大模型和向量模型都存在输入长度限制因此需要将长文档拆分成多个较小的文本块。Chunk文本块Chunk 是指按照固定长度或语义边界将长文本切分得到的独立文本单元。进行文档切分主要有两个目的适配向量模型的输入长度限制提高后续检索精度避免一次召回大量无关内容。递归字符切分器为什么选择它固定长度切分太粗暴语义切分太慢且块大小不可控。递归字符切分器介于两者之间既保证语义完整性又能控制块大小是实际应用中最常用的折中方案。工作原理核心思想定义分隔符优先级列表如 [“\n\n”, “\n”, , “”]按优先级依次尝试切分先用最高优先级分隔符如 \n\n切分整段文本检查每个切分块是否超过 chunk_size若超限对该块降级使用下一级分隔符继续切分递归直到所有块都不超限或降级到字符级切分“”分隔符优先级的语义含义分隔符语义边界说明\n\n段落边界最优先保持段落完整\n行边界段落超限时尝试保持行完整空格词边界行超限时尝试保持词完整无分隔符字符级字符级最后手段强制按字符截断3. 文本向量化Embedding切分完成后需要将每个 Chunk 转换为向量。Embedding文本嵌入Embedding 是将自然语言转换为高维数字向量的过程。语义越相近的文本其对应向量之间的距离越近因此可以利用向量距离衡量文本之间的语义相似度。Embedding Model向量模型向量模型负责完成文本到向量的转换。常见模型bge-m3bge-m3 是目前中文 RAG 场景应用较广的开源向量模型支持多粒度语义匹配兼顾性能与效果。向量维度Dimensionbge-m3 默认输出2048 维向量。向量维度可以理解为向量的信息容量。一般来说维度越高语义表达能力越强存储空间和计算成本也会相应增加。4. 向量存储Vector Store向量生成后需要保存到向量数据库中供后续检索使用。向量数据库向量数据库专门用于存储和管理高维向量并提供高性能相似度检索能力。与传统关系型数据库按照字段查询不同向量数据库支持按照语义查找最相似的内容。常见向量数据库包括Milvus工业级开源向量数据库适用于海量数据和高并发生产环境。Chroma轻量级向量数据库部署简单适合学习和原型开发。LlamaIndexRAG 开发框架内置向量存储能力可快速搭建知识库系统。二、查询阶段Retrieval Generation查询阶段属于在线检索流程。每当用户发起一次提问时都会完整执行一次查询流程。工业级 RAG 一般采用粗召回 精排两阶段检索方案在保证检索效率的同时进一步提升回答准确率。1. Prompt 向量化Prompt 即用户输入的问题。首先需要使用与索引阶段完全一致的 Embedding 模型将 Prompt 转换为查询向量。注意查询阶段必须与索引阶段使用相同的向量模型否则由于向量空间不同将无法正确完成相似度计算。2. 相似度匹配粗召回查询向量生成后在向量数据库中计算与所有文档向量之间的相似度。通常采用Cosine Similarity余弦相似度系统会快速召回 Top N 个候选文本块一般为 2050 个。粗召回的目标是保证检索速度尽可能覆盖相关内容。因此候选结果中可能仍包含部分相关性较低的文本。3. Reranker 重排精排粗召回结束后需要进一步筛选结果。Reranker重排模型Reranker 会分别计算用户问题每个候选文本块之间的深度语义相关性并重新排序。最终保留 Top M通常 35 个最相关的文本块。主要作用包括过滤无关内容去除冗余信息控制大模型输入长度提升最终回答准确率有效降低模型幻觉。常用模型bge-reranker工业级 RAG 普遍采用Embedding Reranker的组合方案即向量检索负责快速召回Reranker 负责精准排序。4. 生成最终 Prompt最后将重排后的文本块作为参考资料与用户原始问题按照固定模板进行拼接。生成完整 Prompt 后再发送给大语言模型进行推理。由于回答建立在知识库内容基础之上因此能够生成更加准确、可靠且可溯源的结果。