RAG流程和分类
RAG简介
什么是RAG?
RAG(Retrieval Augmented Generation,检索增强生成)为生成式模型提供了与外部世界互动的一个很有前景的解决方案。其主要作用类似于搜索引擎,能够找到用户提问最相关的知识或者是相关的对话历史,并结合原始提问(查询),创造信息丰富的 prompt,指导模型生成准确输出。本质上,RAG应用了 In-Context Learning(上下文学习)的原理。
我们可以用以下公式来表示 RAG 的基本组成:
LLM本身的局限性
大语言模型(LLM)虽然功能强大,但它们也存在一些不可忽视的局限性。这些局限性包括以下几个方面:
1. 知识的局限性
LLM 的知识完全来源于其训练数据,而当前主流的大模型训练集基本基于网络公开的数据。因此,对于一些实时性的、非公开的或离线的数据,模型无法获取,也就无法具备这部分知识。
2. 幻觉问题
所有 AI 模型的底层原理都是基于数学概率,其输出本质上是一系列数值运算。大语言模型也不例外,因此它有时会出现所谓的“幻觉问题”,即在缺乏某一领域知识或不擅长的场景下,会生成看似合理但实际上错误的信息。这种幻觉问题难以区分,因为它要求使用者自身具有相应领域的知识。
3. 数据安全性
对于企业而言,数据安全至关重要。没有企业愿意承担数据泄露的风险,将自身的私域数据上传至第三方平台进行训练。这种顾虑导致完全依赖通用大模型能力的应用方案在数据安全性和效果之间不得不做出取舍。
RAG的特点
RAG 的出现为解决 LLM 的局限性提供了一种有效方法。它具备以下几个显著特点:
1. 依赖LLM来强化信息检索和输出
RAG 的运作需要结合强大的 LLM 来进行信息检索和生成。如果单独使用 RAG,其能力会受到限制。因此,RAG 需要依赖性能优越的语言模型支持,才能更有效地生成和提供信息。
2. 能与外部数据有效集成
RAG 能够很好地接入和利用外部数据库中的数据资源。这一特性弥补了通用大模型在某些垂直领域或专业领域中的知识不足问题。例如,在行业特定术语和深度知识方面,RAG 能够提供更精确的答案。此外,它还能解决数据时效性问题,使得生成结果更加实时和可靠。
3. 数据隐私和安全保障
通常情况下,RAG 所连接的私有数据库不会参与到大模型的数据集中训练。因此,RAG 不仅能提升模型的输出表现,还能有效保护这些私有数据的隐私性和安全性,不会将敏感信息暴露给大模型的训练过程。
4. 表现效果因多方面因素而异
RAG 的效果受多种因素影响,包括所使用语言模型的性能、输入数据的质量、算法以及检索系统的设计等。不同的 RAG 系统之间可能存在较大的效果差异,因此不能一概而论。
RAG流程与分类
表现效果因多方面因素而异
RAG的效果受到多个因素的影响,包括所使用的语言模型的性能、输入数据的质量、算法以及检索系统的设计等。这意味着不同的RAG系统之间可能存在较大的效果差异,因此不能一概而论。
RAG整体思路
RAG系统的工作流程可以分为以下五个基本步骤:
- 知识文档的准备
- Embedding模型
- 向量数据库
- 查询检索
- 生成回答
接下来,我们将逐步解析每个步骤的具体内容和实现方式。
知识文档的准备
在构建一个高效的RAG系统时,首要步骤是准备知识文档。现实中的知识源可能包括多种格式,例如:
- Word文档
- TXT文件
- CSV数据表
- Excel表格
- PDF文件
- 图片和视频
转换为纯文本数据
为了让大语言模型能够理解这些知识源,第一步需要使用专门的文档加载器或多模态模型将其转换为纯文本数据。例如:
- PDF文件:可以利用PDF提取器抽取文本内容。
- 图片和视频:OCR(光学字符识别)技术能够识别并转换其中的文字信息。
文档切片
由于文档可能存在过长的问题,我们需要对其进行切片处理,将长篇文档分割成多个文本块。这项关键步骤有助于:
- 减轻模型的计算负担。
- 提高信息检索的准确性。
Embedding模型
Embedding模型的核心任务是将文本转换为向量形式。日常语言中往往充满歧义和无意义的助词,而向量表示更加密集、精确,能够捕捉句子的上下文关系和核心含义,从而有效识别语义上相似的句子。
目前常用的Embedding模型包括:
- Word2Vec
- BERT
- GPT系列
- BGE系列
这些模型通过先进的算法,将复杂的语言表达映射到高维向量空间,为后续检索和生成提供了坚实基础。
向量数据库
向量数据库是一种专门设计用于存储和检索向量数据的数据库系统。在RAG系统中,所有通过Embedding模型生成的向量都会被存储在这样的数据库中。
优化存储与检索效率
向量数据库优化了处理和存储大规模向量数据的效率,使得在面对海量知识向量时,系统能够迅速检索出与用户查询最相关的信息。
查询检索
在这一阶段,用户的问题会被输入到Embedding模型中进行向量化处理。接着,系统会在向量数据库中搜索与该问题向量语义上相似的知识文本或历史对话记录,并将结果返回给用户。
这一过程确保了用户能够快速获取与问题相关的信息,为后续回答生成奠定了基础。
生成回答
最后一步是生成回答。系统将用户提问与上一阶段检索到的信息结合起来,构建出一个提示模板,并将其输入到大语言模型中。随后,大语言模型会根据提示模板生成最终答案并输出。
这一阶段是RAG系统的核心目标所在,也是用户体验的重要体现。
RAG分类
三个阶段:Naive RAG、Advanced RAG、Modular RAG
RAG技术的发展可以划分为以下三个阶段:
- Naive RAG:经典的RAG方法,主要涉及“检索-阅读”过程。
- Advanced RAG:在Naive RAG的基础上,通过优化索引、检索和生成质量,克服了许多技术挑战。
- Modular RAG:在结构和功能上更加灵活,引入了更多模块化设计,支持复杂场景下的应用。
相关综述论文
关于RAG的详细综述可以参考以下文献:
《Retrieval-Augmented Generation for Large Language Models: A Survey》
Naive RAG
Naive RAG是最基础的RAG实现,主要包含以下三个步骤:
- 索引:将文档库分割成较短的文本块(Chunk),并通过编码器构建向量索引。
- 检索:根据用户问题与文本块之间的相似度,检索相关文档片段。
- 生成:以检索到的上下文为条件,生成问题的回答。
优点
- 采用传统的索引、检索和生成流程,操作简单。
- 直接基于用户输入进行查询。
- 结合相关文档与问题形成新的提示,供大型语言模型生成答案。
缺点
- 检索质量低,可能导致“空中掉落”现象,即模型未能找到相关答案。
- 响应生成质量存在幻觉(hallucination)和转换不相关性问题。
- 增强过程中的集成挑战较多,如冗余和风格一致性问题。
Advanced RAG
Advanced RAG在Naive RAG的基础上进行了改进,主要针对以下几个方面进行优化:
- 数据索引优化:通过更精细的数据清洗、设计文档结构和添加元数据等方法,提升文本的一致性、准确性和检索效率。
- 检索前优化:
- 使用问题重写(Query Rewriting)对齐问题和文档块之间的语义差异。
- 路由和扩充技术可以更好地匹配用户问题与文档内容。
- 检索后优化:
- 对检索出来的文档库进行重排序,避免“Lost in the Middle”现象(即重要信息被忽略)。
- 通过上下文筛选与压缩的方法缩短窗口长度,提高生成效率。
优点
- 优化数据索引,提高了索引内容质量。
- 实施预检索和后检索方法,提高了检索和生成的质量。
- 引入混合检索和图结构优化,提高了复杂场景下的表现能力。
缺点
- 高级优化增加了系统复杂性。
- 对计算资源和处理能力有更高要求。
- 需要更多的定制和调优以提高效率和相关性。
Modular RAG
Modular RAG是RAG发展的高级阶段,其特点是引入了更多功能模块,使系统更加灵活和可扩展。主要特性包括:
- 功能模块化:
- 支持查询搜索引擎。
- 融合多个回答模块。
- 技术融合:
- 将检索与微调、强化学习等技术相结合。
- 流程设计与编排:
- 支持串行或端到端训练方法。
- 允许跨多个模块进行定制,形成多种RAG模式。
优点
- 增加功能模块,提供多样性和灵活性。
- 适应性强,可针对特定问题上下文替换或重组模块。
- 支持跨模块训练,进一步提升系统性能。
缺点
- 构建和维护模块化系统可能较为复杂。
- 需要仔细管理以确保模块间的协调和一致性。