RAG 实践: 一文掌握大模型 RAG 过程
一、RAG 是什么?
RAG(Retrieval-Augmented Generation,检索增强生成) , 一种 AI 框架,将传统的信息检索系统(例如数据库)的优势与生成式大语言模型(LLM)的功能结合在一起。不再依赖 LLM 训练时的固有知识,而是在回答问题前,先从外部资料库中"翻书"找资料,基于这些资料生成更准确的答案。
RAG 技术核心缓解大模型落地应用的几个关键问题:
▪知识新鲜度:大模型突破模型训练数据的时间限制
▪幻觉问题:降低生成答案的虚构概率,提供参照来源
▪信息安全:通过外挂知识库而不是内部训练数据,减少隐私泄露
▪垂直领域知识:无需训练直接整合垂直领域知识
二、RAG 核心流程

2.1 知识准备阶段
1、数据预处理
1、文档解析
▪输入:原始文档(如 Markdown/PDF/HTML)
▪操作:
▪提取纯文本(如解析 Markdown 标题、段落)
▪处理特殊格式(如代码块、表格、图片、视频等)
例如:
文档的解析过程需要考虑不同文档内容例如文本、图片、表格等场景,以及文档的语言,布局情况,可以考虑使用一些优秀的三方工具或者一些视觉模型,布局分析模型,语义理解模型来辅助解析。
2、数据清洗与标准化处理
提升文本质量和一致性,使向量表示更准确,从而增强检索相关性和 LLM 回答质量;同时消除噪声和不规则格式,确保系统能正确理解和处理文档内容。
包括:
▪去除特殊字符、标签、乱码、重复内容。
▪文本标准化,例如 时间、单位标准化(如“今天” → “2025-07-17”)。
▪其他处理
数据的清洗和标准化过程可以使用一些工具或 NLTK、spaCy 等 NLP 工具进行处理。
例如:
3、元数据提取
关于数据的数据,用于描述和提供有关数据的附加信息。
▪文档来源:文档的出处,例如 URL、文件名、数据库记录等。
▪创建时间:文档的创建或更新时间。
▪作者信息:文档的作者或编辑者。
▪文档类型:文档的类型,如新闻文章、学术论文、博客等。
▪ ...
元数据在 RAG 中也非常重要,不仅提供了额外的上下文信息,还能提升检索质量:
检索增强
▪精准过滤:按时间、作者、主题等缩小搜索范围
▪相关性提升:结合向量相似度和元数据特征提高检索准确性
上下文丰富
▪来源标注:提供文档来源、作者、发布日期等信息
▪文档关系:展示文档间的层级或引用关系
常见的元数据提取方式:
▪正则/HTML/... 等解析工具,提取标题、作者、日期等
▪自然语言处理: 使用 NLP 技术(如命名实体识别、关键词提取)从文档内容中提取元数据,如人名、地名、组织名、关键词等
▪机器学习模型: 训练机器学习模型来自动提取元数据
▪通过调用外部 API(如 Google Scholar API、Wikipedia API)获取文档的元数据
▪...
例如:
2、内容分块(Chunking)
在 RAG 架构中,分块既是核心,也是挑战,它直接影响检索精度、生成质量,需要在检索精度、语境完整性和计算性能之间取得平衡。

内容分块将长文档切分成小块,可以解决向量模型的 token 长度限制,使 RAG 更精确定位相关信息,提升检索精度和计算效率。
autobots 功能分块:

实际 RAG 框架中按照文档的特性选择合适的分块策略进行分块.
常见的分块策略
1. 按大小分块
按固定字符数进行分块,实现简单但可能切断语义单元。
优点:实现简单且计算开销小,块大小均匀便于管理。
缺点:可能切断语义单元,如句子或段落被分到不同块中。
例如:
句子被截断,"一份代码,可在 iOS、Android、Harmony" 和 "、Web 三端运行的跨平台解决方案" 被分到不同块,影响理解。
2. 按段落分块
以段落为基本单位进行分块,保持段落完整性,但段落长度可能差异很大。
优点:尊重文档自然结构,保留完整语义单元。
缺点:段落长度差异大,可能导致块大小不均衡。
例如:
第一段包含标题和多行内容,而其他段落相对较短,可能导致检索不均衡。
3. 按语义分块
基于文本语义相似度进行动态分块,保持语义连贯性,但计算开销大。
说明:基于文本语义相似度动态调整分块边界。
优点:保持语义连贯性,能识别内容主题边界。
示例:
使用依赖模型质量,相同文本在不同运行中可能产生不同分块结果。
分块策略总结:

优化方式
▪混合分块策略
结合多种分块方法的优点,如先按段落分块,再根据块大小调整,做到既保持语义完整性,又能控制块大小均匀
▪优化重叠区域
根据内容特性动态调整块之间的重叠区域大小,关键信息出现在多个块中,提高检索召回率
常用的分块工具
▪LangChain 框架:提供多种分块策略,包括 RecursiveCharacterTextSplitter、MarkdownTextSplitter 等
▪NLTK:用于基于自然语言句子的分块
▪spaCy:提供语言学感知的文本分割
3、向量化(Embedding)
将高维文本数据压缩到低维空间,便于处理和存储。将文本转换为计算机可以理解的数值,使得计算机能够理解和处理语义信息,从而在海量数据文本中实现快速、高效的相似度计算和检索。
简单理解:通过一组数字来代表文本内容的“本质”。
例如,"ROMA 是一个跨平台解决方案..."这句话可能被转换为一个 384 维的向量:
常用的 Embedding 模型
4、向量数据库入库
将生成的向量数据和元数据进行存储,同时创建索引结构来支持快速相似性搜索。
常用的向量数据库包括:
2.2 问答阶段
1、查询预处理
` 意图识别: 使用分类模型区分问题类型(事实查询、建议、闲聊等)。
问题预处理: 问题内容清洗和标准化,过程与前面数据预处理类似。
查询增强: ****使用知识库或 LLM 生成同义词(如“动态化” → “Roma”),上下文补全可以结合历史会话总结(例如用户之前问过“Roma 是什么”)。
2、数据检索(召回)
1、向量化
使用与入库前数据向量化相同的模型,将处理后的问题内容向量化。
例子:
2、检索
相似度检索:查询向量与所存储的向量最相似(通过余弦相似度匹配)的前 top_k 个文档块。
关键词检索:倒排索引的传统方法,检索包含"Roma"、"优势"等精确关键词的文档。
混合检索: 合并上面多种检索结果,效果最优。
例如:检索"ROMA 是什么?"

3、重排序(Reranking)
初步检索在精度和语义理解上的不足,通过更精细的上下文分析提升结果相关性。它能更好处理同义词替换、一词多义等语义细微差异,使最终结果准确。
原理:使用模型对每个检索结果计算相关性分数。
归一化:重排序模型原始输出分数没有固定的范围,它可能是任意实数,将结果归一化处理,将分数映射到 [0, 1] 范围内,使其更容易与向量相似度分数进行比较。
例如:

常用的重排序模型:

3、信息整合
格式化检索的结果,构建提示词模板,同时将搜索的内容截断或摘要长文本以适应 LLM 上下文窗口 token。
提示词优化:
限定回答范围
要求标注来源
设置拒绝回答规则
...
例如:
4、LLM 生成
向 LLM(如 GPT-4、Claude)发送提示,获取生成结果。
autobots 示例:

以上,实现了最简单的 RAG 流程。实际的 RAG 过程会比上述麻烦更多,包括图片、表格等多模态内容的处理,更复杂的文本解析和预处理过程,文档格式的兼容,结构化与非结构化数据的兼容等等。
最后 RAG 各阶段优化方式:

版权声明: 本文为 InfoQ 作者【京东科技开发者】的原创文章。
原文链接:【http://xie.infoq.cn/article/3d6ce8ac50ec37b96501f0133】。文章转载请联系作者。
评论