今天主要分享基于技术,产品快速去搭建 RAG 的应用。分享分为三个部分,第一就是背景介绍,回顾一下 RAG 技术出现了一年, RAG 到底叫什么,面临的挑战是什么?第二部分技术架构,在阿里云上如何去提供整体的 RAG 的解决方案,包括这个方案里有哪些能力辅助用户去搭建这个系统。第三部分是基于自研的引擎,包括开源组件,如何快速在阿里云上搭建整体的 RAG 的应用,服务整个的业务流程。
一、RAG背景&挑战
RAG 已经出来大概一年多。在这里它解决的问题是大模型本身带来的幻觉,包括知识有局限性,整个数据安全的问题,它的流程简单来说是三个部分,是构建索引,做整体的检索增强,最终用大模型生成最终的答案,以达到用大模型在企业内部包括企业to C、to B端应用的落地。
在构建 RAG 应用落地有一些问题,包括刚才所提到的效果的问题,效率的问题,成本的问题,拆解来看项目,可以分为功能性,功能性解决 RAG 如何去增强检索的效果,可以让检索的效果更加精准,通过构建开源组件或者是看到的框架去构建,经常会遇到例如检索出来的内容缺少,包括文档关键链路上的召回、未召回,文档切割导致上下文的文档缺少,这些都是在功能层面需要去解决的。
在非功能层面,是效率和成本这块的挑战,对于整体的大模型调用次数过多,导致整体调度链路推理时间太长,对话需要几秒甚至10秒的等待,用户层面是无法接受的。
二、RAG 技术架构
整体的解决方案的架构。解决方案是结合了阿里云大数据加 AI 的产品线去构建的逻辑的解决方案,整个RAG 系统结合了数据层面,结合了 AI 层面,结合了搜索层面的功能重建,所以它是多产品的组合。包括底层需要用到存储类的产品,存储相关检索需要用到的文档。在数据管理层面,需要经过数据处理后,生成结构化和非结构化的数据,如何去做原数据的管理,原数据数据的构建,也是需要用到我们像类似于 DIF 相关的一些能力。
在 RAG 系统里最重要最关键的一层是很多的不同的在各种各样的模型,包括了做向量化的模型,做切分的模型,做召回排序的模型,还有包括大模型的部分,提供了全维度的模型服务,除了这些还有很关键的检索的能力,阿里云上有很多不同的检索引擎,像ES等都提供相对的高性能的检索引擎来提供服务。我们如何去评测 RAG 的系统也有对应的方案去提供。
全链路的能力上来看,分为数据的接入,在线查询的部分,数据的接入部分主要就是如何去快速的把这个文档上传,如何去做这个数据的处理,把非循环数据结构化或者是拆分成工具化和结构化,如何去构建向量,是稠密的向量还是稀疏的向量?
在线阶段时,提供了整个的大模型的调用、解析、理解、分析,包括对于文档的检索,包括最终召回完的链路上如何去调用大模型,如何去构建提示工厂这些能力,最左边会提供整个的测评服务去测评整个系统如何能达到企业级的应用效果。
三、RAG 解决方案最佳实践
接下来是如何去基于阿里云的自研的引擎,包括开源的引擎去构建整个 RAG 的系统。基于 OPEM SEARCH 的自研引擎去构建RAG 的系统,在离线的链路中,通过整个的自研引擎是支持多种不同的文档类的上传和数据接入,包括当时会展示是通过拖拽式的, POC 方式拖拽几个文档,然后快速构建系统去看整体系统效果,支持 API 的方式,支持对接大数据引擎去接入整体的数据,接入了数据对内容进行抽取。
在自研引擎里是提供了多维度的数据抽取,包括数据理解的模型,包括类似于OCR的模型、文档解析的模型,那对于文档本身的切片,提供了模型类的切片,也提供了规则类的切片,在整个的产品内部,向量化也可以用开源的、自研的接入资源的模型,也可以用本身引擎提供向量化模型。在整个的检索链路问答链路上,支持多人对话,可以去提高整体的这样链路的效果,也提供了多轮对话模式,也提供单轮的对话模式,包括不同的的解析理解,传统的搜索链路如何去做几个检索,以结合现在大模型链路上去做检索。
在大模型本身链路上,在这个平台上提供了多个版本的模型,包括基于搜索链路优化过的模型,当然也满足客户对模型的定制化,在整体的链路上,支持用户自定义外部的大模型的调用链路,在大模型去做生成和检索。
看具体的步骤,第一步在整个的 OpenSearch的产品上做实例的开通,使用到OpenSearch的大语言模型版,开通实例后,第一步上传文档,是支持通过网页的拖拽式,比如说作 POC 场景的,直接就拖拽简单的文档上去尝试整个系统的效果,也支持大数据系统的对接、网页的一些导入。数据接入后,会去做数据的预处理,在这一步就会有很多模型的介入。会支持不同的模型,如何定义解析出来的数据结构,解析成结构化的数据存储到检索正财库或者倒排库,最终对整体检索,经过预处理的数据做整体的展示和检查,有源于传统数据的预处理阶段后,去调试整个 RAG 链路的工程,分了很多不同的模型,包括了大语言的模型,中间检索常用的向量模型,还有重排的模型的配置,对于预制的可以做不同的泄露的参数的调试,也提供了可视化的对话框的方式做不同版本模型的调试,包括自研的模型,左上角有自定义的大模型,可以进入客户的大模型的服务,现在市面上通用的 OPI 的接口,OPI 格式和接口的大模型服务,都是可以做整个的多轮调试。
调试完成后整个的 OPI 系统后,会做端到端的测评,基于不同的调试、不同模型的组合,可以上传测评的文档,通过测评文档的打分,包括输出,可以得到 RAG 链路测评的评分。最终生成在线业务的 API 来接入自身得业务系统。
API 从产品维度在后台动态调度承接流量,最终服务B端或者C端的应用,整个的流程是基于自研引擎快速搭建 RAG 应用整体端到端的流程。除了自研的引擎,也支持很多开源的组件,现在已经开源了端到端的的系统,可以下载到对应的代码,通过代码部署到模型服务的引擎上,来提供端到端外的 RAG 的搭建,在这个过程中每一步里用到了所有的模型测,引擎侧都可以是开源组件,像引擎侧的检索 ES ,自研开源的 havenask ,开源的faiss ,都是可以支持的。
模型测可以支持开源的通易,类似于开源的模型可以去构建相关的RAG的系统。整个的流程和自研的流程是类似的,就是从数据的上传到文档网解析,到模型构建索引,最终去检索整个的链路。
提供一开源代码一键式部署。除了说用到预制的镜像以外,如果用户自定义了开源的github上的代码,也可以通过镜像的方式一键的拉起系统,拉起系统后,可以去对接到自己任意的开源的检索引擎上,事例是检索引擎,也可以对接到阿里云的实例上,去构建自己的检索库。同时在左侧界面可以去选择自己的模型,包括开源的模型,包括其他的设置。
在文档上传的部分,为了方便调试,提供网页端的文档上传的接口,可以让用户快速去上传相关的文档,也支持通过 API 的方式快速的把需要去测试,包括去检索的文档上传到整个的系统上,通过对接的开源引擎的检索库里,去实时的看到对应的文档。开源的引擎上,提供的可视化组件,去观察或者去查询构建的库和它对应的数据。有了整个的库,后面就可以去基于自研或者是开源的大模型调试整个的 RAG 系统,是为了方便在界面上提供 oppotion 可以让用户去调试,所有代码是开展到github的,对于用户来说可以在github上,在代码层面去做更精细力度的调试,去生成整个系统的对外的open API ,除了配置层面的调试,在整个开源的界面上,也对接了阿里云的云监控的系统,它可以对于整个 RAG 链路上每一步的性能,包括效果去做单步的调试。左边截图是对接云监控整个性能维度的调试,每一步花费的时间都可以在整个的监控上看到,细腻度的去优化每节点性的问题。达到生产级别可用。右边截图是对效果的调试,每一步的调用、检索包括召回,到底生成的结果是什么?在哪一步出的错,在右边的图上面也有详细的展示,可以精细的去调整每一步的配置,得到更好的效果。
通过全链路调试后,最终可以提供对外在线的 API 的服务, 来支撑整个潮汐调用,通过整个底层计算资源的弹性,支持定时或者是基于业务的 QPS 的弹性能力,达到整个业务的成本最优的 RAG 的应用。