RAG应用架构深度解析:从基础到进阶
本文详细介绍了RAG应用的经典架构与流程,包括数据索引阶段(加载、分割、嵌入、索引)和数据查询阶段(检索、生成),以及演进出的检索前处理与检索后处理。同时分析了RAG应用面临的五大挑战:检索召回精确度、大模型抗干扰能力、上下文窗口限制、RAG与微调选择及响应性能问题。最后阐述了RAG架构的三阶段演进:从Naive RAG到Advanced RAG再到Modular RAG,展示了RAG技术不断优化
本文详细介绍了RAG应用的经典架构与流程,包括数据索引阶段(加载、分割、嵌入、索引)和数据查询阶段(检索、生成),以及演进出的检索前处理与检索后处理。同时分析了RAG应用面临的五大挑战:检索召回精确度、大模型抗干扰能力、上下文窗口限制、RAG与微调选择及响应性能问题。最后阐述了RAG架构的三阶段演进:从Naive RAG到Advanced RAG再到Modular RAG,展示了RAG技术不断优化和灵活扩展的发展趋势。
前排提示,文末有大模型AGI-CSDN独家资料包哦!
一、RAG 应用的经典架构与流程
在了解了 RAG 的一些基本概念与简单的应用场景后,我们从技术层来看一个最基础、最常见的 RAG 应用的逻辑架构与流程。注意:在这张图中仅展示了一个最小粒度的 RAG 应用的基础原理,而在当今的实际 RAG 应用中,对于不同的应用场景、客观条件、工程要求,会有更多的模块、架构与流程的优化设计。
在通常情况下,可以把开发一个简单的 RAG 应用从整体上分为数据索引 ( Indexing )与数据查询( Query )两个大的阶段,在每个阶段都包含不同的处里阶段。这些主要的阶段用如下图表示:
1.1、数据索引阶段
既然RAG的核心之一是通过"检索"来增强生成,那么首先需要准备可以检索的内容。在传统的计算机检索技术中,最常用的是基于关键词的检索,比如传统的搜索引擎或者关系数据库,通过关键词的匹配程度来对知识库中的信息进行精确或模糊的检索,计算相关性,按照相关性的排序输出,但是在大模型的RAG应用中,最常见的检索方式是借助基于向量的语义检索来获得相关的数据块,并根据其相似度排序,最后输出最相关的前K个数据块(简称 top\_K )。因此,向量存储索引就成了RAG应用中最常见的索引形式。
向量是一种数学表示方法,它将文本、图像、音频等复杂信息转换为高维空间中的点,每个维度都代表一种特征或属性。这种转换使得计算机可以理解和处理这些信息,因为它们都是连续的多个数值。向量保留了词汇之间的语义关系。例如,相似的词在向量空间中距离较近,这样就可以进行语义相似度计算或进行聚类分析。
自然语言处理中用于把各种形式的信息转换成向量表示的模型叫嵌入模型。
基于向量的语义检索就是通过计算查询词与已有信息向量的相似度(如余弦相似度),找出与查询词在语义上最接近的信息。
数据索引阶段通常包含以下几个关键阶段。
(1)加载( Loading ): RAG应用需要的知识可能以不同的形式与模态存在,可以是结构化的、半结构化的、非结构化的、存在于互联网上或者企业内部的、普通文档或者问答对。因此,对这些知识,需要能够连接与读取内容。
(2)分割( Splitting ):为了更好地进行检索,需要把较大的知识内容(一个 Word / PDF 文档、一个 Excel 文档、一个网页或者数据库中的表等)进行分割,然后对这些分割的知识块(通常称为 Chunk )进行索引。当然,这就会涉及一系列的分割规则,比如知识块分割成多大最合适?在文档中用什么标记﹣个段落的结尾?
(3)嵌入( Embedding ):如果你需要开发 RAG 应用中最常见的向量存储索引,那么需要对分割后的知识块做嵌人。简单地说,就是把分割后的知识块转换为一个高维(比如1024维等)的向量。嵌入的过程需要借助商业或者开源的嵌入模型( Embedding Model )来完成,比如 OpenAI 的text-embedding-3-small 模型。
(4)索引( Indexing ):对于向量存储索引来说,需要将嵌入阶段生成的向量存储到内存或者磁盘中做持久化存储。在实际应用中,通常建议使用功能全面的向量数据库(简称向量库)进行存储与索引。向量库会提供强大的向量检索算法与管理接口,这样可以很方便地对输入问题进行语义检索。注意:在高级的 RAG 应用中,索引形式往往并不只有向量存储索引这一种。因此,在这个阶段,很多应用会根据自身的需要来构造其他形式的索引,比如知识图谱索引、关键词表索引等。
1.2、数据查询阶段
在数据索引准备完成后, RAG 应用在数据查询阶段的两大核心阶段是检索与生成(也称为合成)。
(1)检索( Retrieval ):检索的作用是借助数据索引(比如向量存储索引),从存储库(比如向量库)中检索出相关知识块,并按照相关性进行排序,经过排序后的知识块将作为参考上下文用于后面的生成。
(2)生成( Generation ):生成的核心是大模型,可以是本地部署的大模型,也可以是基于 API 访问的远程大模型。生成器根据检索阶段输出的相关知识块与用户原始的查询问题,借助精心设计的 Prompt ,生成内容并输出结果。
以上是一个经典 RAG 应用所包含的主要阶段。随着 RAG 范式与架构的不断演进与优化,有一些新的处理阶段被纳入流程,其中典型的两个阶段为检索前处理与检索后处理。
(1)检索前处理( Pre-Retrieval ):顾名思义,这是检索之前的步骤。在一些优化的 RAG 应用流程中,检索前处理通常用于完成诸如查询转换、查询扩充、检索路由等处理工作,其目的是为后面的检索与检索后处理做必要准备,以提高检索阶段召回知识的精确度与最终生成的质量。
(2)检索后处理( Post-Retrieval ):与检索前处理相对应,这是在完成检索后对检索出的相关知识块做必要补充处理的阶段。比如,对检索的结果借助更专业的排序模型与算法进行重排序或者过滤掉一些不符合条件的知识块等,使得最需要、最合规的知识块处于上下文的最前端,这有助于提高大模型的输出质量。
二、RAG 应用面临的挑战
尽管 RAG 用一种非常简洁且易于理解的方法,在很大程度上提高了大模型在专业领域任务上的适应性,极大地增强了大模型在大量应用(特别是企业级应用)上的输出准确性,但是日益丰富的应用场景给 RAG 应用带来了更多的挑战。当然,这些挑战也是促进 RAG 应用不断出现新的架构与优化方法的动力。目前,传统的 RAG 应用面临的挑战如下。
2.1、检索召回的精确度
RAG 思想是借助临时的语义检索来给大模型补充知识"营养",以便让大模型能够更好地生成高质量结果。检索出的外部知识块足够精确与全面就是后面生成阶段的重要保障。自然语言具有天然的复杂性,检索技术具有模糊性,检索出的知识块如果带有大量的无用、噪声数据甚至矛盾的信息,就会影响大模型的生成质量。
2.2、大模型自身对抗干扰的能力
对于检索出的上下文中携带的相关的外部知识块的干扰信息、多余信息矛盾信息等,大模型需要能够尽量推理,识别与区分,并能够很好地按照Prompt进行输出,因此大模型本身的能力是影响最终生成质量的重要因素。
2.3、上下文窗口的限制
大模型存在输人和输出上下文窗口的限制(最大 token 数量)。简单地说,你与大模型一次会话的数据量是存在大小限制的。如果你需要在一个大规模约外部知识库中检索出更多的相关知识块并将其交给大模型,就可能会打破这种窗口限制从而导致失败。如何在窗口限制内尽可能多地携带更多的知识块是RAG应用开发时需要注意的常见问题之一。
2.4、RAG与微调的选择
模型微调( Fine-tuning )是一种让大模型更好地适应领域与行业环境的常见方法。与 RAG 相比,微调把垂直领域的知识变成大模型的训练语料,把生成优化的时间提前到大模型使用前,简化了应用架构。那么对于 RAG 与微词,应该如何选择、配合、协调以便最大限度地提高大模型的输出能力呢?这也是很多人经常纠结的问题之一。
2.5、响应性能问题
与大模型直接输出相比, RAG 应用无疑增加了更多的处理步骤,且随着人们对 RAG 范式的研究深入,更复杂的 RAG 范式会带来更多的处理阶段(比如需要多次借助大模型完成选代优化)。这样优化的 RAG 范式虽然会带来更优质的输出结果,但同时与端到端的响应性能下降是矛盾的。那么在一些对延迟时间较敏感的企业级应用场景中,如何兼顾最终输出的质量与较短的响应延迟时间就成了开发者的一大挑战。
三、RAG应用架构的演进
3.1、Naive RAG (朴素RAG或经典RAG)阶段
这代表了最早的经典 RAG 思想。这个阶段的 RAG 遵循传统的基础顺序流程,包含3个主要的模块与阶段:索引、检索与生成。 Naive RAG 的特点是只保留最简单的过程 Node (节点)且顺序式执行。
3.2、 Advanced RAG (高级RAG)阶段
Advanced RAG 在 Naive RAG 的基础上对索引、检索与生成这3个主要阶段进行了增强,特别是在检索阶段,增加了检索前处理与检索后处理。
3.3、Modular RAG (模块化RAG)阶段
Native RAG 与 Advanced RAG 都是链式的、顺序式的 RAG 范式,而 Modular RAG 超越了这两种传统的 RAG 范式,展示了一种更灵活、更自由、具备高度扩展性的 RAG 范式。 Modular RAG 的基本思想如下:
将 RAG 应用中的各个阶段细分成了多个模块类(代表 RAG 应用中的一个核心流程,比如预检索)、模块(代表一个核心流程中的功能模块,比如预检索中的查询转换)与算法(代表模块的一种实现方法,比如查询转换可以有普通重写、后退式重写、 HyDE 重写等)。这些模块与算法之间不再有固定的选择与顺序流程,而是由使用者根据应用场景灵活组合,构造更适合自己的 RAG 工作流。
Modular RAG 的好处是具备了极强的扩展性与灵活性。一方面,随着研究的深入和更多优化理论的出现,可以出现更多的模块与算法;另一方面,使用作流。者可以根据自身的需要灵活地组合不同的模块和算法,构造更灵活的 RAG 工来实现更复杂的 RAG 工作流,从而实现特定的优化目标。
读者福利:倘若大家对大模型感兴趣,那么这套大模型学习资料一定对你有用。
针对0基础小白:
如果你是零基础小白,快速入门大模型是可行的。
大模型学习流程较短,学习内容全面,需要理论与实践结合
学习计划和方向能根据资料进行归纳总结
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
👉AI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉大模型视频和PDF合集👈
这里我们能提供零基础学习书籍和视频。作为最快捷也是最有效的方式之一,跟着老师的思路,由浅入深,从理论到实操,其实大模型并不难。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
更多推荐
所有评论(0)