RAG基础功能优化、以及RAG架构优化

RAG基础功能优化

对RAG的基础功能优化,我们要从RAG的流程入手[1],可以在每个阶段做相应的场景优化。

图片

从RAG的工作流程看,能优化的模块有:文档块切分、文本嵌入模型、提示工程优化、大模型迭代。下面针对每个模块分别做说明:

  • 文档块切分:设置适当的块间重叠、多粒度文档块切分、基于语义的文档切分、文档块摘要。

  • 文本嵌入模型:基于新语料微调嵌入模型、动态表征。

  • 提示工程优化:优化模板增加提示词约束、提示词改写。

  • 大模型迭代:基于正反馈微调模型、量化感知训练、提供大context window的推理模型。

此外,还可对query召回的文档块集合进行处理,比如:元数据过滤[7]、重排序减少文档块数量[2]。

RAG架构优化

2.1 Vector+KG RAG

经典的RAG架构中,context增强只用到了向量数据库。这种方法有一些缺点,比如无法获取长程关联知识[3]、信息密度低(尤其当LLM context window较小时不友好)。

图片

图2 跨chunk的关联知识向量库无法获取

那此题是否可解?答案是肯定的。一个比较好的方案是增加一路与向量库平行的KG(知识图谱)上下文增强策略。其技术架构图大致如下[4]:

图片

图3 基于KG+VS进行上下文增强

图3中query进行KG增强是通过NL2Cypher模块实现的。根据我的实践,我们可用更简单的图采样技术来进行KG上下文增强。具体流程是:根据query抽取实体,然后把实体作为种子节点对图进行采样(必要时,可把KG中节点和query中实体先向量化,通过向量相似度设置种子节点),然后把获取的子图转换成文本片段,从而达到上下文增强的效果。

LangChain官网提供了一个通过Graph对RAG应用进行增强的DevOps的例子,感兴趣的读者可以详细研究[5]。

2.2 Self-RAG

经典的RAG架构中(包括KG进行上下文增强),对召回的上下文无差别地与query进行合并,然后访问大模型输出应答。但有时召回的上下文可能与query无关或者矛盾,此时就应舍弃这个上下文,尤其当大模型上下文窗口较小时非常必要(目前4k的窗口比较常见)。

那有解决办法吗?答案又是肯定的,一个较好的解决方案是Self-RAG技术。由于篇幅所限,此处介绍其推理过程,训练过程需要借助GPT4进行辅助打标,就不展开说了。详细过程可参考我对Self-RAG的总结[6]。

图片

图4 RAG vs Self-RAG

如图4所示,右侧就是Self-RAG的工作流程。首先,根据query判断是否需要检索。如果需要,才检索若干passage,然后经一系列处理生成若干next segment候选。最后,对这些候选segment进行排序,生成最终的next segment。

Self-RAG的推理过程相对训练较简单,其算法内容如下:

图片

图5 Self-RAG推理算法

2.3 多向量检索器多模态RAG

本小节涉及三种工作模式[7],具体为:

  • 半结构化RAG(文本+表格)

  • 多模态RAG(文本+表格+图片)

  • 私有化多模态RAG(文本+表格+图片)

1)半结构化RAG(文本+表格)

图片

图6 半结构化RAG

此模式要同时处理文本与表格数据。其核心流程梳理如下[8]:

  1. 将原始文档进行版面分析(基于Unstructured工具[9]),生成原始文本 和 原始表格。

  2. 原始文本和原始表格经summary LLM处理,生成文本summary和表格summary。

  3. 用同一个embedding模型把文本summary和表格summary向量化,并存入多向量检索器。

  4. 多向量检索器存入文本/表格embedding的同时,也会存入相应的summary和raw data。

  5. 用户query向量化后,用ANN检索召回raw text和raw table。

  6. 根据query+raw text+raw table构造完整prompt,访问LLM生成最终结果。

2)多模态RAG(文本+表格+图片)

对多模态RAG而言,有三种技术路线[10],见下图:

图片

图7 多模态RAG

如图7所示,对多模态RAG而言有三种技术路线,如下我们做个简要说明:

  • 选项1:对文本和表格生成summary,然后应用多模态embedding模型把文本/表格summary、原始图片转化成embedding存入多向量检索器。对话时,根据query召回原始文本/表格/图像。然后将其喂给多模态LLM生成应答结果。

  • 选项2:首先应用多模态大模型(GPT4-V、LLaVA、FUYU-8b)生成图片summary。然后对文本/表格/图片summary进行向量化存入多向量检索器中。当生成应答的多模态大模型不具备时,可根据query召回原始文本/表格+图片summary。

  • 选项3:前置阶段同选项2相同。对话时,根据query召回原始文本/表格/图片。构造完整Prompt,访问多模态大模型生成应答结果。

3)私有化多模态RAG(文本+表格+图片)

如果数据安全是重要考量,那就需要把RAG流水线进行本地部署。比如可用LLaVA-7b生成图片摘要,Chroma作为向量数据库,Nomic's GPT4All作为开源嵌入模型,多向量检索器,Ollama.ai中的LLaMA2-13b-chat用于生成应答[11]。

参考资料

  1. Chatbots | ️ Langchain

  2. Rerankers and Two-Stage Retrieval | Pinecone

  3. Custom Retriever combining KG Index and VectorStore Index

  4. Enhanced QA Integrating Unstructured Knowledge Graph Using Neo4j and LangChain

  5. https://blog.langchain.dev/using-a-knowledge-graph-to-implement-a-devops-rag-application/

  6. AI pursuer:揭秘Self-RAG技术内幕

  7. Multi-Vector Retriever for RAG on tables, text, and images:Multi-Vector Retriever for RAG on tables, text, and images

  8. https://github.com/langchain-ai/langchain/blob/master/cookbook/Semi_Structured_RAG.ipynb?ref=blog.langchain.dev

  9. Unstructured | The Unstructured Data ETL for Your LLM

  10. https://github.com/langchain-ai/langchain/blob/master/cookbook/Semi_structured_and_multi_modal_RAG.ipynb?ref=blog.langchain.dev

  11. https://github.com/langchain-ai/langchain/blob/master/cookbook/Semi_structured_multi_modal_RAG_LLaMA2.ipynb?ref=blog.langchain.dev

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

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

相关文章

【IAP】FREERTOS堆大小影响到FLASH写入

最近在调LPC177X芯片IAP升级时发现,同一套代码,稍微加了点东西就导致写入失败,确认写入flash接口无误后 #define SRC_ADDR_NOT_MAPPED 4通过写入失败返回值,上网查阅资料 我在这里勾选了IRAM2区,也就是默认是可以使用…

兴达易控EtherCAT转Profibus网关让工业自动化变得轻松快捷

EtherCAT转Profibus网关(XD-ECPBM20)是一种用于实现不同通信协议间互联互通的设备。它主要用于工业控制系统中,能够将EtherCAT总线的数据传输转换为Profibus网络可接受的格式。这样的网关设备在工业自动化领域有着广泛的应用,因为…

【计算机网络】第七,八,九章摘要重点

第七章网络管理 1.计算机网络面临的两大威胁? 恶意程序有:计算机病毒,计算机蠕虫,特洛伊木马,逻辑炸弹,后门入侵和流氓软件。 2.安全的计算机网络四个目标: 机密性,端点鉴别&…

一文解析 Copycat Dex与 Bitcat Dex的区别

Copycat Dex和 Bitcat Dex都带一个 Cat 并且都是衍生品协议,很多人都会误认为这两个是同一个项目,实际不然。它们是面向两个不同赛道、不同资产类型的衍生品项目。 Copycat Dex和 Bitcat Dex都是衍生品 DEX,它们最本质的区别主要在于&#xf…

软件测试|使用Python提取出语句中的人名

简介 在自然语言处理(NLP)中,提取文本中的人名是一项常见的任务。Python作为一种流行的编程语言,拥有强大的NLP库和工具,使我们能够轻松地进行这项任务。在本文中,我们将使用Python示例来演示如何提取文本…

springboot vue线上部署项目注意跨域问题

springboot vue线上部署项目注意跨域问题 nginx配置 server {listen 8080;server_name localhost;charset utf-8;location / {root /home/user/cf/vue/dist;index index.html index.htm;try_files $uri $uri/ /index.html;add_header Access-Control-Allow-Origin *;add_heade…

MC使用Waterfall 跨服

前言 想弄一个跨服,目前这篇文章是边测试边写的,两个子服都是在同一个机器上运行的 如果两个子服在不同的网络,跨服的延迟就会比较高 两个子服 s1 和 s2 都是使用folia核心 版本1.20.1s1 端口: 25565s2 端口 : 25566 1.下载 Waterfall W…

Hello 2024补题

Wallet Exchange(Problem - A - Codeforces) 题目大意:A,B做游戏,它们的钱包里各有a,b个硬币,轮到它们操作时,它们可以扔掉自己或者对手钱包里的硬币,谁不能操作谁输,问…

Kafka的安装、管理和配置

Kafka的安装、管理和配置 1.Kafka安装 官网: https://kafka.apache.org/downloads 下载安装包,我这里下载的是https://archive.apache.org/dist/kafka/3.3.1/kafka_2.13-3.3.1.tgz Kafka是Java生态圈下的一员,用Scala编写,运行在Java虚拟机上&#xf…

【大数据】Flink 详解(九):SQL 篇 Ⅱ

《Flink 详解》系列(已完结),共包含以下 10 10 10 篇文章: 【大数据】Flink 详解(一):基础篇【大数据】Flink 详解(二):核心篇 Ⅰ【大数据】Flink 详解&…

Flutter之配置环境创建第一个项目

随着时代发展,使用Flutter开发的项目越来越多,于是踏上了Flutter开发之路。 作为一个Android开发人员,也只能被卷到与时俱进,下面一起创建一个Flutter项目吧。 一、Android开发,电脑上已经具备了的条件: …

msyql 异常,别干着急,70%的问题都在这里!

性能测试中,数据库的性能问题,可能会占到 70%,所以讲性能测试,数据库是一个非常非常重要的知识。但是,最近在讲 MySQL 数据库的时候,却遇到了一个尴尬。 前言 之前的小伙伴是需要手动安装 MySQL 数据库的&…

pc-lint plus和keil 调用库文件策略的不同

同样一个源文件(如"stm32h7xx.h"),keil会先从用户路径找文件,pc-lint会先从keil安装路径找源文件 1、问题 在使用pc-lint检测工程时碰到了一个问题 C:\Users\86151\AppData\Local\Arm\Packs\Keil\STM32H7xx_DFP\2.4.…

武理多媒体信息共享平台的架构设计与实现

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

Vue-23、Vue过滤器

1、效果 2、过滤器实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>过滤器</title><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.…

Linux C语言开发(二)C语言数据类型

目录 一.C语言概述 1.1 什么是C语言 1.2 C语言与Linux 1.3 C语言的特点 二.数据类型 2.1数据类型的分类 2.2整型 2.3 字符型 2.4 浮点型 2.5 枚举类型 2.6 数组类型 2.7 结构体类型 2.8 联合体类型 2.9 指针类型 2.10 空类型 2.11 static静态类型 2.12 extern…

HCIP -- 第六天作业

要求&#xff1a; 实现&#xff1a; 3路由策略干涉选路&#xff1a;[R3]ip ip-prefix c permit 13.1.1.0 24 抓住13网段 [R3]route-policy c permit node 10 创建路由策略为C 序号为10 [R3-route-policy]if-match ip-prefix c 匹配路由策略c [R3-route-policy]apply cost-type…

第七讲_css浮动

css浮动 1. 设置浮动2. 浮动的特点3. 浮动的影响4. 解决浮动的影响4.1 解决父元素高度塌陷的问题4.2 解决对兄弟元素影响问题 1. 设置浮动 浮动是通过float属性设置&#xff0c;float取值范围&#xff1a; none&#xff1a;不浮动&#xff0c;默认值。left&#xff1a;向左浮…

猫咪全罐喂养一个月多少钱?适合给猫咪全罐喂养的猫罐头推荐

不少铲屎官为了防止猫咪挑食和营养吸收不均衡&#xff0c;打算给猫咪进行全罐喂养&#xff0c;但是又担心全罐喂养花费太多钱了。猫咪全罐喂养一个月多少钱&#xff1f;别担心&#xff0c;咱们打工人的养猫攻略&#xff0c;花小钱办大事&#xff01;追求高性价比的猫罐头才是王…

推荐几款常用测试数据自动生成工具(适用自动化测试、性能测试)

一、前言 在软件测试中&#xff0c;测试数据是测试用例的基础&#xff0c;对测试结果的准确性和全面性有着至关重要的影响。因此&#xff0c;在进行软件测试时&#xff0c;需要生成测试数据以满足测试场景和要求。本文将介绍如何利用测试数据生成工具来快速生成大量的测试数据。…