检索增强生成(Retrieval Augmented Generation, RAG)是提升大型语言模型(LLM)应用效果的核心技术。根据您的要求,本文将RAG的深度解析分为四个部分:知识索引构建流程、运行时核心流程、向量数据库原理与相似度计算以及RAG效果评估与持续优化。
一、 RAG的基石:知识索引构建流程解析
RAG系统的效能高度依赖于其知识库的质量。索引构建(Indexing)是RAG的基础,它将原始数据转化为可供高效检索的向量形式。以下流程图清晰地展示了这一过程:
| 流程阶段 | 关键步骤 | 对应碎片信息 |
|---|---|---|
| 1. 数据源与接入 | 文档、网页、表格 -> 数据 -> 提取文本 -> 统一标准 | “数据接入与格式的统一” |
| 2. 数据清洗 | 去除重复内容、过滤噪声符号 | “去除重复内容”、“过滤噪声符号” |
| 3. 数据分块 | 切分、控制长度 | “RAG中的分块”、“常见的分块策略” |
| 4. 元数据注解 | 元数据注解 | “元数据标注” |
| 5. 向量化与存储 | 向量化 (Embedding 嵌入) -> 向量存储 | “RAG中的 Embedding 嵌入”、“向量数据库原理” |
1. 数据接入与标准化
RAG的第一步是处理多源异构数据,包括PDF、Word、网页、表格等。
- 提取文本:利用工具(如PyPDF2、BeautifulSoup)从各种格式中提取纯文本内容。
- 统一标准:对提取的文本进行格式标准化,例如统一编码(UTF-8)、去除乱码、统一大小写,确保数据一致性。
2. 数据清洗与预处理
数据清洗是保证检索质量的关键环节。
- 去除重复内容:过滤文档中的页眉页脚、重复描述等,避免冗余信息。
- 过滤噪声符号:去除标点、特殊字符、Markdown格式等噪声,保留核心文本。
- 敏感信息处理:利用正则或库删除隐私数据(手机号、邮箱),避免泄露。
3. 文本分块(Chunking)
由于大语言模型的上下文窗口限制,长文本必须被拆分成若干个“知识块”。
- 切分与长度控制:分块策略包括自然结构分块(按标题、段落)、固定大小分块、滑动窗口分块和递归分块等。目标是让每个块包含相对完整的语义单元,并控制长度(如300-500字)以适配LLM的上下文窗口。
4. 元数据注解(Metadata Annotation)
为每个知识块附加元数据,如文档标题、URL、作者、上传时间、章节位置等。
- 作用:元数据可作为检索时的过滤条件,是实现自查询(Self-Query)等高级检索的基础。
5. 向量化与存储
这是索引构建的最后一步,将处理好的文本转化为数值形式。
- 向量化(Embedding):使用嵌入模型(如BERT、BGE)将文本内容映射为高维空间中的密集向量。
- 向量存储:将这些向量存入向量数据库(如Milvus、Faiss),利用高效的索引结构和近似最近邻(ANN)算法,为后续的快速检索做好准备。
二、 RAG的运行时核心流程:从查询到生成
索引构建完成后,RAG系统进入运行时阶段,即检索增强生成(Retrieval Augmented Generation)的循环。以下流程图展示了用户查询到最终答案的完整路径:
| 流程阶段 | 关键步骤 | 对应碎片信息 |
|---|---|---|
| 1. 查询预处理 | 用户提示词 -> 查询扩展 / 自查询 -> 拆分子问题 | “查询扩展”、“自查询” |
| 2. 初步检索 | 向量检索(语义匹配)/ 关键词检索(精确匹配) | “混合检索” |
| 3. 结果优化 | 结果融合与重排序 -> Rerank使用 | “混合检索”、“Rerank” |
| 4. 提示构建 | 提示压缩 -> 传入大模型 | “提示压缩” |
1. 查询预处理与增强
在进行检索之前,系统会对用户原始查询进行增强和解析,以提高检索的准确性。
- 查询扩展(Query Expansion):通过添加同义词、相关术语或隐含意图,让查询更精准、覆盖范围更广,解决词汇匹配问题。
- 自查询(Self-Query):自动解析用户查询中的隐含条件(如时间、作者等元数据),生成结构化查询语句,解决元数据过滤问题。
- 拆分子问题:对于复杂查询,将其分解为更小的、可独立检索的子问题。
2. 初步检索(混合检索)
系统并行或顺序执行多种检索方式,以确保检索结果的全面性。
- 向量检索:基于语义相似度进行匹配,擅长理解文本含义。
- 关键词检索:基于倒排索引、BM25等算法,擅长精确匹配专有名词。
- 结果融合与重排序:将向量检索和关键词检索的结果通过权重融合或RRF等模型合并,形成一个初步的候选文档列表。
3. 结果优化(Rerank)
初步检索(粗排)的结果可能包含不相关文档。
- Rerank(重排序):利用更精确的Rerank模型对初步检索返回的候选文档列表进行再次排序(精排),选出匹配度最高的Top-K文档,极大地提高了最终送入LLM的上下文质量。
4. 提示构建与生成
提示压缩(Prompt Compression):对重排序后的Top-K文档进行简化处理,提取核心信息,滤除无关内容,确保最终的Prompt既完整保留关键信息,又符合大语言模型的上下文窗口限制,同时减少计算资源消耗。
传入大模型:将用户查询和经过优化的上下文(Prompt)输入给大型语言模型,由LLM生成最终答案。
向量数据库原理与相似度计算
RAG系统的性能高度依赖于高效的向量检索。以下流程图展示了向量数据库中相似度计算的核心原理:
向量数据库的核心原理是通过将高维数据转换为多维向量,并基于相似性测量,利用高效的索引结构和近似最近邻(ANN)算法,快速检索与目标最相似的向量结果。
相似度计算方法:
- 余弦相似度:衡量两个向量的方向一致性,不关注向量长度,常用于文本、推荐系统(重视语义方向)。
- 欧几里得距离(欧氏距离):计算两个向量在空间中的直线距离,常用于图像、视频检索(关注空间差异)。
- 曼哈顿距离:计算两个向量在各维度上的差值绝对值之和,适用于网格数据、稀疏数据。
RAG效果评估与持续优化
RAG是一个持续改进的过程,需要从检索质量、生成质量和系统性能三个角度进行评估。
1. 检索质量评估
关注系统从知识库中找到相关信息的能力。
- 客观指标:包括Precision@k(前k个结果的相关性比例)、MRR(首个相关结果的排名倒数平均值)、NDCG(区分不同相关度的重要性)和Recall@k(覆盖所有相关文档的比例)。
- 主观评测:通过人工审核检索结果是否满足业务需求。
2. 生成质量评估
关注大语言模型基于检索结果生成答案的质量。
- CR(上下文相关性):答案是否基于检索内容(忠实度)。
- AR(回答相关性):回答是否解决用户问题(相关性)。
- F(真实性):评估生成的答案中是否存在幻觉。
- 评测方法:可采用大模型评分或人工评分。
3. 系统性能评估
关注非功能性需求,确保系统在生产环境中的可用性。
- 延迟:响应时间。
- 吞吐量:单位时间内处理的请求量。
- 错误率:生成错误答案的比例。
在实际应用中,建议采取分层测试(先测检索,再测生成,最后压测性能)和持续监控(实时跟踪用户满意度、业务指标)的策略,以实现RAG系统的持续优化。


雷达卡


京公网安备 11010802022788号







