Agentic RAG 与图任务编排

一个朴素的 RAG 系统流程是这样的:先由用户提出问题,然后系统基于用户提问进行召回,对召回结果进行重排序,最后拼接提示词后送给 LLM 生成答案。

图片

一部分简单场景下,朴素的 RAG 已经可以满足用户意图明确的场景的要求,因为答案已经包含在检索出来的结果中,只要交给 LLM 即可。然而在更多的情况下用户意图并不明确,无法直接通过检索找到答案,例如一些针对多文档的总结类提问需要进行多步推理 (Reasoning) 等等。这类场景就需要引入 Agentic RAG ,也就是在问答的过程中引入任务编排机制。

Agentic RAG,顾名思义,是基于 Agent 的 RAG。Agent 与 RAG 关系紧密,两者互为基石。Agentic RAG 和简单 RAG 的最大区别在于 Agentic RAG 引入了 Agent 的动态编排机制,因此可以根据用户提问的不同意图,引入反馈和查询改写机制,并进行“多跳”式的知识推理,从而实现对复杂提问的回答。

下面,我们先通过两个高级 RAG 来看看 Agentic RAG 的工作原理。首先是 Self-RAG (参考文献[1]),它的工作流程如下:

图片

Self-RAG 是一种引入了反思机制的 RAG。从知识库中检索出结果后,它会评估结果是否与用户提问相关。如果不相关,就要改写查询,然后重复 RAG 流程直到相关度评分达到要求。实现 Self-RAG 需要实现以下两大组件:

  1. 一套基于 Graph 的任务编排系统。

  2. 在 Graph 内执行的必要算子:比如在 Self-RAG 中,评分算子就至关重要。在原始论文中, 是需要自己训练一个打分模型来针对检索结果评分;在实际实现中也可以采用 LLM 进行评分,这样可以简化系统开发并且减少对各类环节依赖。

Self-RAG 是相对初级的 Agentic RAG,RAGFlow 中也已提供了相关实现。实践证明,Self-RAG 对于较复杂的多跳问答和多步推理可以明显提升性能。

再来看看另一种 Agentic RAG — Adaptive RAG (参考文献[2])。它可以根据用户提问的不同意图采用对应的策略:

  1. 开放域问答:直接通过 LLM 产生答案而无需依赖 RAG 检索。

  2. 多跳问答:首先将多跳查询分解为更简单的单跳查询,重复访问 LLM 和 RAG 检索器来解决这些子查询,并合并它们的答案以形成完整答案。

  3. 自适应检索:适用于需要多步逻辑推理的复杂问题。复杂的问答往往需要从多个数据源综合信息并进行多步推理。自适应检索通过迭代地访问 RAG 检索器和 LLM,逐步构建起解决问题所需的信息链。

如下图所示,Adaptive-RAG 的工作流程与 Self-RAG 类似,只是在前面增加了一个查询分类器,就提供了更多种对话的策略选择。

图片

从以上两种 Agentic RAG 例子可以看出,这类高级 RAG 系统都需要基于任务编排系统上提供以下功能:

  1. 复用已有的 Pipeline 或者子图。

  2. 与包含 Web Search 在内的外部工具协同工作。

  3. 可以规划查询任务,例如查询意图分类,查询反馈等等。

任务编排系统类似的实现主要有 Langchain 的 ️LangGraph 和 llamaIndex;Agent 的开发框架包括 AgentKit、Databricks 最新发布的 Mosaic AI Agent Framework 等等。任务编排系统需要基于图(Graph)来实现,图中的节点和边定义了应用的流程和逻辑。节点可以是任何可调用的算子,也可以是其他可运行组件(比如链接起来的多个算子或者 Agents),每个节点执行特定的任务。边定义了节点间的连接和数据流。图需要具备节点的状态管理功能,从而根据节点的跳转而不断更新状态。需要注意的是,这种基于图的任务编排框架并不是一个 DAG (Directed Acyclic Graph), 而是一个需要引入循环的编排系统。环是提供反思机制的基础,对于 Agentic RAG 的编排至关重要。没有反思机制的 Agent 只能提供类似工作流这样的任务编排而无法实现更高级的多跳和多步推理机制,没法真正像人类那样去思考性地解决问题。在吴恩达给出的四种 Agent 设计模式(参考文献[3])中:反思被放在头一个,其他三个都是工作流相关,分别是工具、规划,和多 Agent 协同。反思被单列出来是因为思考和推理都必须基于它来进行,而 Agentic RAG 正是反思机制在 RAG 的体现。

Agentic RAG 代表了信息处理方式的变革,为 Agent 本身引入了更多的智能。结合了工作流的 Agentic RAG 也有更广阔的应用场景。比如:在文档摘要中,Agentic RAG 会首先确定用户的意图是要求摘要还是要求对比细节。如果是前者,就通过 Agent 先获取每块内容的摘要再获取整体的摘要;如果是后者,就需要进一步路由,通过检索提取相应数据点,再把相关数据传递给 LLM。在客户服务支持中,Agentic RAG 可以理解客户更加复杂的提问,从而可以提供更加个性化的准确回复。在文献助手中,Agentic RAG 可以综合更多的文献、数据和研究结果,让使用者具备更全面的理解;在法律和医疗助手中,Agentic RAG 可以帮助理解和解释复杂的领域知识,提供更准确地见解;在内容生成应用中,Agentic RAG 可以帮助生成更高质量的、上下文相关的企业级长文档。

RAGFlow 将从 v0.8.0 开始原生支持基于图的任务编排系统,并支持以无代码的方式进行编辑;另一方面, RAGFlow 也在不断完善各类查询规划算子以简化 Agentic RAG 以及基于 Agentic RAG 的各类 Agent 应用的开发过程,真正从端到端解决企业级 RAG 应用的各类痛点。RAGFlow 一直在快速演进,欢迎关注、star,并积极参与到我们的项目中来!

项目地址:https://github.com/infiniflow/ragflow

参考文献:

  1. Self-RAG: Learning to retrieve, generate, and critique through self-reflection, arXiv preprint arXiv:2310.11511

  2. Adaptive-RAG: Learning to adapt retrieval-augmented large language models through question complexity, arXiv preprint arXiv:2403.14403

  3. https://www.deeplearning.ai/the-batch/issue-242/


END

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

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

相关文章

无线麦克风推荐哪些品牌,热门领夹无线麦克风哪个好,看本期文章

​在信息爆炸的今天,高品质的无线领夹麦克风能让声音更清晰响亮。技术发展带来多样化选择同时也带来选择困难。根据多年使用经验和行业反馈,我推荐一系列可靠、易用且性价比高的无线领夹麦克风,助你作出明智选择。还要不知道该怎么选无线领夹…

深度学习探索-基础篇-正则化篇

文章目录 一、正则化介绍1.1 正则化的简介1.2 正则化的方法介绍1.3 正则化的用途 二、正则化的详细介绍2.1 L1正则化2.2 L2正则化2.2.1 L2正则化的工作原理2.2.2 如何在训练中应用L2正则化2.2.3 L2正则化的效果 2.3 Weight Decay2.4 Dropout 一、正则化介绍 1.1 正则化的简介 …

AJAX 综合案例-day2

Bootstrap 弹框 功能:不离开当前页面,显示单独内容,供用户操作 步骤: 1. 引入 bootstrap.css 和 bootstrap.js 2. 准备 弹框标签 ,确认结构 3. 通过 自定义属性 ,控制弹框的 显示 和 隐藏 1. 通过属性…

【中南林业科技大学校园生存指南】学业指南

前言 本专栏所有内容来自同学们所提供的建议,已经征得收集者意见在此发布。 学业指南 关于学业指南的设想源于诸多任课教师对于课程细节的描述不够清晰明确。同学们在获取课程信息,如教师评价、课程覆盖范围及往年考试试卷时,往往依赖于高…

人工智能 -- AI常用算法

人工智能是一门致力于研究、开发和实现智能系统的学科。它通过模拟人类的认知和学习过程,使计算机系统能够执行类似于人类的智能活动。人工智能技术涵盖了多个领域,包括机器学习、深度学习、自然语言处理和专家系统等。这些技术被广泛应用于各个行业&…

08--LVS网站高并发解决方案

前言:LVS,工作稳定,抗负载能力强,属于运维基础,这里将lvs两种模式的部署方式在这里记录一下,并在示例完成后,补充一下基础概念。本章不可避免的涉及到一些网络方面知识,会形象简单的…

PostgreSQL源码分析——pg_waldump

PG中有个可以打印WAL日志信息的工具,pg_waldump,对于开发人员来说,掌握该工具是十分有必要的。 用法 具体用法这里不去详解,可见官网pg_waldump文档。 postgresslpc:~$ pg_waldump --help pg_waldump decodes and displays Pos…

C#.Net筑基-集合知识全解

01、集合基础知识 .Net 中提供了一系列的管理对象集合的类型,数组、可变列表、字典等。从类型安全上集合分为两类,泛型集合 和 非泛型集合,传统的非泛型集合存储为Object,需要类型转。而泛型集合提供了更好的性能、编译时类型安全…

华为数通——ACL

ACL基本介绍 ACL:访问控制列表,通过端口对数据流进行过滤,ACL判别依据是五元组:源IP地址,源端口,目的IP地址,目的端口、协议。(ACL工作于OSI模型第三层,是路由器和三层交换机接口的…

SpringBoot的配置文件和YAML文件的语法

1.SpringBoot的有两种格式的全局配置文件,使用任何一个功能都是一样的 注意:SpringBoot的全局配置文件名都是固定的application.xxx ① application.properties, 这个是默认Spring initializr默认自动生成的配置文件,也是我们属…

2024免费数据恢复工具EasyRecovery电脑必备软件

🎉 数据安全小能手,EasyRecovery最新功能揭秘 🔓 亲爱的小红书的朋友们!你们有没有因为不小心删除了重要文件而焦急万分?或者因为电脑突然崩溃,担心珍贵的资料丢失?别怕,今天我就来给…

HAL-DMA中断空闲接受不定长数据

title: HAL-DMA中断空闲接受不定长数据 tags: STM32HalCubemax 面对无规律长度的数据帧如何处理? 不定长数据接收可以使用每帧数据发送完成后会有一定的空闲时间"帧的时间间隔?" 如果你想每帧都要可以采用dma加空闲中断的方式空闲中断一次就是一帧数据…

while循环或for循环写九九乘法表

print("\n") i1 while i<9:j1while j<i:print(f"{j}*{i}{i*j}\t",end)j1print("\n")i1 print(\n) for i in range(1,10):for j in range(1,10):if j<i:print(f"{i}*{j}{i*j}\t",end)else:breakprint(\n)

岁月长河中的温柔等待

在那个年代&#xff0c;爱情往往像是一条静静流淌的小河&#xff0c;不动声色却又波澜不惊。在一个小村庄里&#xff0c;住着一对中年夫妻&#xff0c;人们叫他们李大叔和赵阿姨。他们的故事&#xff0c;就像是那个时代的缩影&#xff0c;承载着岁月的沧桑与深情的守候。 李大…

【CT】LeetCode手撕—160. 相交链表

目录 题目1- 思路2- 实现⭐160. 相交链表——题解思路 3- ACM 实现 题目 原题连接&#xff1a;160. 相交链表 1- 思路 模式识别&#xff1a;相交链表 ——> 判断是否相交 思路 保证 headA 是最长的那个链表&#xff0c;之后对其开始依次遍历 2- 实现 ⭐160. 相交链表—…

基于振弦采集仪的地下综合管廊工程安全监测技术研究

基于振弦采集仪的地下综合管廊工程安全监测技术研究 地下综合管廊工程是一项重要的城市基础设施工程&#xff0c;承载着城市供水、供电、供热、排水等重要功能。为了确保地下综合管廊工程的安全运行&#xff0c;需要进行有效的安全监测。本文将重点研究基于振弦采集仪的地下综…

【HarmonyOS NEXT】使用RSA非对称密钥分段加解密

加密 调用cryptoFramework.createAsyKeyGenerator、AsyKeyGenerator.generateKeyPair&#xff0c;生成RSA密钥类型为RSA1024、素数个数为2&#xff08;不填默认&#xff09;的非对称密钥对&#xff08;KeyPair&#xff09;。KeyPair对象中包括公钥PubKey、私钥PriKey。 如何生…

【中南林业科技大学校园生存指南】序 | 大学之道

前言 本专栏所有内容来自同学们所提供的建议&#xff0c;已经征得收集者意见在此发布。 由于刚开始做&#xff0c;故后续内容会在积累一定程度时发布&#xff0c;感谢支持。 序 回顾大学四年&#xff0c;我仔细梳理了每一刻&#xff0c;把它们凝结成文字&#xff0c;记录下我…

Socket编程之多进程模型

一、多进程模型概述 基于最初的阻塞网络 I/O &#xff0c;若服务器要为多个客户端提供支持&#xff0c;在较为传统的手段中&#xff0c;多进程模型是常用的选择&#xff0c;即为每个客户端都分配一个进程来处理其请求。 服务器的主进程主要负责对客户连接的监听&#xff0c;一旦…

JSON 对象

JSON 对象 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript编程语言的一个子集,但JSON是独立于语言的文本格式,代码中可以使用各种语言来解析和生成它。JSON格式通常用于数据交换、配置文件以…