如何构建出更好的大模型RAG系统?

news2024/11/15 8:32:16

ChatGPT爆火之后,以ChatPDF为首的产品组合掀起了知识库问答的热潮。

在过去一整年中,大多数人都在完成RAG系统到高级RAG系统的迭代升级。但是技术发展是迅速的,如何深入了解RAG的发展,做出更好的RAG系统,其实还是非常困难的。

在这里插入图片描述
大模型爆火后的RAG系统发展,大体可以将其分为3个阶段,初级、高级、超级。初级阶段更多的是搭建起系统的pipeline;高级阶段是在召回生成测修修补补,根据badcase反推流程上的优化技巧;超级对应了从Agentic RAG、RAG不存在了、多模态RAG、结构化RAG、GraphRAG、MemoryRAG等技术飞速发展的阶段。

S1 初级RAG
S1阶段处于23年元旦前后,最先在Github出现了一批尝试去复现chatpdf的项目,他们通过对知识库文档进行定长分块建立索引。然后使用用户query去索引中召回相关的文档片段,结合预定义的prompt模板,让LLM生成问题相关的答案。

其中用到的向量和LLM模型,闭源一般使用openai ada 002 + chatgpt。开源中文测的则比较稀缺,常见的如simbert/text2vec + chatglm v1 6b等。

大体的一个流程图如下:

在这里插入图片描述

S2 高级RAG
S2阶段横跨23年整年的时间,大体上可以分为模型测和策略测。

模型测

召回模型测:开源社区现在项链模型发力,一些针对QA分布的向量模型开源,如M3E,BGE等。

生产模型测:国产大模型百花齐放,百川、书生、千问、智谱等。

策略测

策略测在卷3大块的内容

1.如何保证更好的文档切分?这里诞生了很多的解析,切分,索引构建技巧。

解析测,简单的从纯文本识别,到后来更复杂的借助版式识别+OCR的方式,还要针对表格,图片等单独处理

切分方面,从滑动窗口定长切分到语义,模块化切分等。

索引构建的一些技巧主要是为了应对chunk切分后的信息丢失问题,常见的比如,保留前后块的索引,文档级别的索引构建等。

2.如何召回的更好?

召回测的一个出发点是,用来召回的query并非一定是用户的输入query。对此我们可以一下子想起来如query改写,hyde,子问题,step-back等常见策略。当然也有混合搜索这类不属于这个范畴的技巧。

3.如何生成的更好?

生成测的一个出发点是,用来生成的内容并非一定是召回的query。从这一点我们也可以想起来如召回内容压缩,内容rerank,溯源,map-reduce等一些策略。

在这里插入图片描述

模型微调测
RAG系统的主要模型还是嵌入模型+生成模型。因此二者的训练方式,也产生了几个不同的大类别。最简单的二者直接使用开源模型,称为Traning free的方式;如果是针对私有化的数据进行训练这2个模型,产生3种训练方式:

方式一:分别独立训练 (Independent Training)
方式二:顺序训练 (Sequential Training),又因为模块的先后,分为LLM First / Retriever First 2种
方式三:联合训练(Joint Training)
在这里插入图片描述

S3 超级RAG

S3阶段处于23年底一直到现在,这个阶段RAG的概念几乎是2个月变一次。

23年底,24年初,开源的大模型已经出现了如Yi-34B,Qwen-72B等具备长上下文能力且效果优异的大模型。RAG的发展注定需要往当时火热的Agent测靠拢。

Agent的核心为引擎+工具。引擎对整个流程做出决策,如是否调用某个知识库搜索知识,是否需要对结果进行反思重新迭 代等。一个简单的Agentic RAG系统如下图:

图片
图片来自:https://medium.com/@sulaiman.shamasna/rag-iv-agentic-rag-with-llamaindex-b3d80e09eae3

多模态RAG,结构化RAG,属于小而美的范畴。可能一方面是多模态还没有完全进入工业界,结构化RAG属于NL2SQL的范畴。对于这2个整体上与传统的RAG差异不大,区别在于,多模态流转的中间形态可能是图片,使用clip之类的图文检索模型召回,VL模型进行答案生成。结构化RAG的差异仅在召回测,使用sql、dsl等方式进行结构化数据库的召回。

24年上半年,部分厂商的RAG系统,在探索新的方向。如contextual.ai发文介绍他们的RAG2.0系统,虽然介绍博客的内容主要是联合训练。斯坦福的大佬们发布了RAPTOR,尝试通过层次的聚类来让RAG索引具备更高级的信息。

图片
图片来自:RAPTOR: RECURSIVE ABSTRACTIVE PROCESSING FOR TREE-ORGANIZED RETRIEVAL

越来越多的开源框架,在往Agentic RAG方面发展,当然最常见的还是结合self-reflection,self-rag,crag的Agentic RAG系统。

24年中,微软开源了GraphRAG的项目代码,无数的公众号在炒作这个图谱集合的RAG系统。相比于RAPTOR,GraphRAG在底层的chunk层更拉通,前者的聚类仅限于文档内,在逐级往上到文档间。而基于图谱的RAG在文档间的chunk之间可能会存在实体的连接,从而社区之类之后可以让聚类的社区信息,更好的跨不同的文档。整体上,确实能丰富RAG系统的索引构建,也可以结合传统的高级RAG,实现一个更好的hybird RAG系统。

图片
图片来自:From Local to Global: A Graph RAG Approach to Query-Focused Summarization

当然24年也有很多RAG不存在的说法,如很多的论文在评估Long Context(LC)大模型与RAG系统准确率的高低之时,RAG系统都处于下风。同时还有一些特殊的开闭源产品,比较常见的就是将知识融合进外挂参数中,最早的如Lamini的Memory Tunning,最近的如智源的MemoRAG。

在这里插入图片描述

本文作者:汪鹏 资深NLP技术专家和AI技术专家,拥有多年NLP落地经验。擅长结合用户场景,针对性地设计图谱、问答、检索、多模态、AIGC等相关的算法和落地方案。在Kaggle获得多枚奖牌,等级master。拥有公众号“NLP前沿”。

文章来源:IT阅读排行榜

本文摘编自《大模型RAG实战:RAG原理、应用与系统构建》,机械工业出版社出版,经出版方授权发布,转载请标明文章来源。

延伸阅读

在这里插入图片描述

《大模型RAG实战:RAG原理、应用与系统构建》

汪鹏 谷清水 卞龙鹏 著

多年大厂工作经验的资深AI技术专家撰写
指导读者深入理解RAG技术原理

学会RAG落地应用技巧

掌握RAG系统构建方法

快速掌握大模型应用开发

内容简介:

这是一本全面讲解RAG技术原理、实战应用与系统构建的著作。作者结合自身丰富的实战经验,详细阐述了RAG的基础原理、核心组件、优缺点以及使用场景,同时探讨了RAG在大模型应用开发中的变革与潜力。书中不仅揭示了RAG技术背后的数学原理,还通过丰富的案例与代码实现,引导读者从理论走向实践,轻松掌握RAG系统的构建与优化。无论你是深度学习初学者,还是希望提升RAG应用技能的开发者,本书都将为你提供宝贵的参考与指导。

在这里插入图片描述

本文来源:原创,图片来源:原创

责任编辑:王莹,部门领导:宁姗

发布人:白钰

购买地址:点此购买

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2160443.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

32岁前端干了8年,是继续做前端开发,还是转其它工作_ui设计师转开发

前端发展有瓶颈,变来变去都是那一套,只是换了框架换了环境。换了框架后又得去学习,虽然很快上手,但是那些刚毕业的也很快上手了,入门门槛越来越低,想转行或继续卷,该如何破圈? 这是一位网友的自…

使用SBP打AssetBundle时脚本引用丢失

1)使用SBP打AssetBundle时脚本引用丢失 2)在UE 5.3中连接Power节点为何10的3次幂等于1009 3)如何在Widget中倾斜一张纹理贴图 4)如何在打开关卡蓝图时更改游戏模式 这是第401篇UWA技术知识分享的推送,精选了UWA社区的热…

uni-app快速入门

目录 一、什么是 uni-app二、快速创建 uni-app 项目1.创建 uni-app2.运行 uni-app 三、uni-app 相对传统 H5 的变化1.网络模型的变化2.文件类型变化3.文件内代码架构的变化4.外部文件引用方式变化5.组件/标签的变化6.js的变化(1)运行环境从浏览器变成v8引…

MCU自动测量单元采集振弦式应变计测值的过程

振弦式应变计是一种广泛应用于土木工程、地质勘探等领域的高精度传感器,用于测量结构的应变变化。近年来,随着微控制器单元(MCU)的发展,自动化测量技术得到了极大的提升,使得振弦式应变计的测值采集更加高效和精确。本文将详细介绍…

关于 mybatis-plus-boot-starter 与 mybatis-spring-boot-starter 的错误

不是知道你是否 出现过这样的错误 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 经过各种度娘,无非就是让你检查三种情况 情况一:mapper.xml没有按照传统的maven架构进行放置 情况二:mybatis的配置信…

C语言实现简单凯撒密码算法

**实验2:传统密码技术 【实验目的】 通过本次实训内容,学习常见的传统密码技术,通过编程实现简单代替密码中的移位密码算法,加深对传统密码技术的了解,为深入学习密码学奠定基础。【技能要求】 分析简单代替密码中的移…

R语言机器学习遥感数据处理与模型空间预测技术及实际项目案例分析

随机森林作为一种集成学习方法,在处理复杂数据分析任务中特别是遥感数据分析中表现出色。通过构建大量的决策树并引入随机性,随机森林在降低模型方差和过拟合风险方面具有显著优势。在训练过程中,使用Bootstrap抽样生成不同的训练集&#xff…

LeetCode 每日一题 ---- 【2207. 字符串中最多数目的子序列】

LeetCode 每日一题 ---- 【2207. 字符串中最多数目的子序列】 2207.字符串中最多数目的子序列方法:贪心 一次遍历 2207.字符串中最多数目的子序列 方法:贪心 一次遍历 从题意中可以看出来,对于 pattern.charAt(0) 一定是插入到最左侧是最优…

什么是SSL证书?它能保护你的网络安全!

相信大家在浏览网页时经常会看到一些网址前面有个“小锁”图标,它代表的网站是安全的,而这背后的秘密就是SSL证书。那SSL证书到底是什么?它有什么用呢? 什么是SSL证书? SSL证书的全称是Secure Sockets Layer证书&…

php发送邮箱教程:如何实现邮件发送功能?

php发送邮箱性能优化策略?怎么使用PHPMail发送邮箱? 无论是用户注册验证、密码重置,还是系统通知,邮件发送都是不可或缺的一部分。AokSend将详细介绍如何使用PHP实现邮件发送功能,帮助开发者快速掌握这一技能。 php发…

高效驱动,掌控动力:TB67H400AFNG 马达驱动器

在如今智能设备和自动化应用领域中,驱动器的性能直接决定了系统的可靠性与效率。东芝的TB67H400AFNG有刷直流马达驱动器凭借其卓越的性能,成为众多行业解决方案中的关键部件。无论是工业控制、自动化设备还是消费类电子产品,TB67H400AFNG都能…

一小时拿下鸿蒙应用开发者高级证书!(二)

鸿蒙应用开发者高级认证,是华为自家研发的硬核操作系统,现在它在市场上的名声也越来越响亮。你手上要是有了鸿蒙的认证小本本,那就等于是掌握了这行里的独门秘籍,找工作的时候,妥妥的加分项。 一个小时刷刷题&#xf…

玩机进阶教程----MTK芯片杂牌机 小品牌机型以及其他mtk设备导出分区的另外一种方法解析

在前面多期博文中都是通过工具来导出分区 制作线刷包的。今天我们以另外一种方法备份系统分区。mtk芯片较多。具体机型适合哪种方法需要自测。多种方法多条思路。遇到机型善用工具。目前一些wifi网卡 点读笔以及有些其他mtk芯片设备。通常分区都较小。可以参考教程 通过教程了…

amr文件怎么转换成mp3?这几种方法超多人在用!

amr文件怎么转换成mp3?AMR音频格式,作为音频领域的一个相对边缘角色,其应用范围相对狭窄,这背后深藏着多重内在限制,首要挑战在于AMR的音质瓶颈,它难以逃脱声音失真与杂音干扰的阴影,这对于追求…

通过企业微信群机器人 发送群消息

1、添加群机器人,复制的webhook地址 2、 public static void main(String[] args) { String reqUrl "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key6xdexxxxxxxxxxxxxxxxxxxxxxxxxxx"; String title "填…

数据结构 - 查找算法

一.查找的概念 二.顺序表查找 特点: 1.记录的数据可以是无序的 2.当数据量较大时,查找效率低,需要依次遍历 /*** description: 顺序表查找算法,从后往前查找* param - a : 要操作的数组的指针* param - k…

OpenCV_自定义线性滤波(filter2D)应用详解

OpenCV filter2D将图像与内核进行卷积,将任意线性滤波器应用于图像。支持就地操作。当孔径部分位于图像之外时,该函数根据指定的边界模式插值异常像素值。 卷积核本质上是一个固定大小的系数数组,数组中的某个元素被作为锚点(一般…

安霸cv22平台移植采坑记录

主要分为3部分: 1.数据输入部分: 1.因原始测试代码只是单张测试图片(测试格式:安霸平台离线转的bin文件),现在的问题是:如何输入数据流?会不会涉及到字节对齐问题,如何…

ROS第六梯:ROS+VSCode+C++消息发布和订阅

第一步:创建ROS工作空间,并在工作空间下创建名为srr_pkg的功能包,具体步骤参考第二章。 第二步:在src下创建publisher.cpp作为发布节点代码文件,创建subscriber.cpp作为订阅节点代码文件: 主要步骤是&#…

这几个方法轻松压缩ppt文件大小,操作起来很简单的压缩PPT方法

这几个方法轻松压缩ppt文件大小。在当今信息化迅速发展的时代,PPT已成为工作和学习中必不可少的工具。然而,随着内容的增加,文件体积常常变得庞大,影响了分享和传输的便利性。过大的文件不仅占用存储空间,还可能导致演…