探索RAG与Multi-Agent的结合:解决复杂任务的新方法

news2024/11/18 9:35:07

在这里插入图片描述

最近帮企业定制了一个langgraph+rag的项目,跟大家简单介绍一下设计架构和具体的应用。如果大家有兴趣,我也可以出一期视频,给大家详细介绍一下。我们会一步步探讨如何构建一个可以控的Agent,以执行RAG任务,并最终展示一个简短的演示。

什么是RAG?

RAG,全称Retrieval-Augmented Generation,是一种辅助AI语言模型生成基于外部信息文本的方法。在RAG中,我们将数据拆分成多个小块,然后将这些小块嵌入到低维空间并存储在向量存储中。当用户提出查询时,该查询也会嵌入到相同的低维空间,与向量存储中的信息进行比较,从而检索到相关的信息作为上下文,并与查询一起输入到语言模型中,生成基于上下文的最终答案。

什么是Agent?

智能代理是先进的AI系统,设计用于执行需要连续推理的复杂任务。它们可以预见未来的步骤,记住过去的对话,并使用不同的工具根据情况和需求调整其响应。

为什么我们需要控制Agent?

控制智能代理的原因在于代理自主性与过程控制之间的权衡。代理的自主性越高,我们对其控制就越少。使用常规代理时,我们无法控制它何时使用工具或以何种顺序使用工具,也无法控制其得出的结论,特别是在处理其内在机制中的幻觉或预训练知识时。然而,通过构建工作流程,我们可以定义解决问题的具体路径,从而对每一步进行全面控制,但这需要量身定制的解决方案,可能耗时且复杂。

构建可控的RAG代理的基本模块
语义相似性

在我们的嵌入空间中,嵌入数据的方式使得相似的词汇彼此接近。例如,“国王”和“王后”的距离会比“狗”近。利用这种语义相似性,我们可以在简单的RAG任务中,例如历史事件查询中,检索到相关的上下文并生成答案。

处理复杂问题

对于更复杂的问题,我们需要不同的方法来构建数据。例如,我们可以使用语言模型生成章节摘要,包含关键点和章节总结,增加找到解决此类问题的可能性。

多向量存储

为了精确处理复杂问题,我们可以建立多个向量存储,例如文本块存储、章节摘要存储和书籍引用存储。

构建可控RAG代理的工作流程

我们需要以下能力:
工具:代理需要具备检索和回答问题的工具。
推理能力:构建解决问题的流程。
过程控制:确保每一步按预期进行。
终止判断:知道何时停止代理的操作。
评估任务表现:评估任务完成的效果。

Agent Tools

我们需要三种检索工具:引用检索、章节摘要检索和文本块检索。此外,还需要一种回答工具,用于在中间步骤或最终生成答案时使用已有的上下文。

问题匿名化

为了避免预训练模型的偏见,我们可以将问题中的特定实体替换为变量,例如将“关羽是如何打败华雄的?”替换为“X是如何打败Y的?”,构建一般计划后再替换回原始名称。

代理工作流程

输入问题并匿名化。
使用计划器构建匿名问题的解决步骤。
去匿名化并分解为检索或回答工具。
任务处理器选择合适的工具进行操作。
根据上下文和计划进行重新规划,直到问题解决或达到终止条件。

终止条件

我们可以通过以下方法判断何时停止:
每一步询问语言模型当前上下文是否足够回答问题。
直到新信息量低于某个阈值。
限制图的递归次数,如达到100次遍历后停止。

评估

我们可以通过以下指标评估RAG任务的效果:
答案正确性:答案是否事实正确。
忠实度:生成的答案是否基于检索的信息。
答案相关性:答案与问题的相关性。
语义相似度:生成答案与标准答案的语义相似度。

总结

通过结合RAG和智能代理,我们能够解决复杂的任务,尽管可能需要权衡时间和成本,但在解决无法通过其他方法解决的任务时,这种方法具有显著优势。
如果您有任何问题或需要进一步的讨论,请随时联系我。谢谢!

常见问题
为什么不同时检索所有信息?

这是设计上的选择,同时检索所有信息可能会导致时间和成本的增加,且不一定需要所有的信息。例如,针对某些特定问题,代理可能只需要引用检索工具。

如何验证答案是否是幻觉?

我们可以使用语言模型作为判断工具,验证生成的答案是否基于原始上下文。

这种方法是否具有成本效益?

这取决于具体的使用场景。如果现有解决方案无法解决问题,而通过客户支持等方式需要花费数天时间,那么这种方法可以在几秒钟或几分钟内解决,从而节省时间和成本。
关注我,每天带你开发一个AI应用,每周二四六直播,欢迎多多交流。

在这里插入图片描述

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

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

相关文章

C#为复杂属性提供下拉式编辑框和弹出式编辑框

一.为属性提供编辑类 弹出式和下拉式是如何实现的呢,这需要为属性提供一个专门的编辑类。.Net为我们提供了一个System.Drawing.Design.UITypeEditor类,它是所有编辑类的基类,从他继承出了诸如ColorEditor、FontEditor的类,因此我们…

信刻光盘摆渡系统安全合规实现跨网数据单向导入/导出

在当今信息化、数字化时代,各种数据传输和储存技术发展迅速,各安全领域行业对跨网数据交互需求日益迫切,数据传输的安全可靠性对于整个过程的重要性不可忽视。应如何解决网络安全与效率之间的矛盾,如何安全合规地实现跨网数据单向…

Spring Cloud Gateway 之动态路由

前言 熟悉 Spring Cloud Gateway 的人都知道 Gateway 提供了鉴权、路由等功能,本篇我们重点分析的是 Gateway 的动态路由功能。 Gateway Actuator API 方法源码解析 Spring Cloud Gateway 的 Actuator 端点允许监视 Spring Cloud Gateway 应用程序并与之交互&…

k8s学习(三十八) 使用OpenTelemetry+jaeger实现链路追踪

文章目录 前言一、安装jaeger二、安装cert-manager三、安装OpenTelemetry Operator四、配置 OpenTelemetry Collector五、配置 Instrumentation六、编写java示例程序并测试调用链跟踪 前言 OpenTelemetry 可以用于从应用程序收集数据。它是一组工具、API 和 SDK 集合&#xff…

《黑神话:悟空》Steam全球评价出炉:18个语言区好评率超90%

《黑神话:悟空》Steam在线人数已经不断打破纪录,连续三天刷榜,目前最高成绩超过241万。这个成绩也稳坐总榜第二,同时也是单机游戏的历史第一。 除了游玩人数之外,该作的评价口碑也非常出色,根据媒体汇总的数…

Flutter->`Flutter` 通过`ffi`调用`Rust`编译生成的产物.so文件(Android)和.a文件(iOS)接口方法

flutter_rust_ffi Flutter 通过ffi调用Rust编译生成的产物.so文件(Android)和.a文件(iOS)接口方法; 拾用本文您将获取以下技能: Rust编译.so文件的能力;Rust编译.a文件的能力;Flutter调用.so文件的能力;Flutter调用.a文件的能力; 附加Buff: Flutter环境安装指南;Rust环境安…

游戏行业如此竞争激烈,个人开发者是否仍存机会?

在当今这个数字化时代,游戏行业以其庞大的市场规模、高速的增长速度以及无限的创意空间,吸引了无数开发者投身其中。然而,随着技术的进步、资本的涌入以及大型游戏公司的强势扩张,游戏行业的竞争日益激烈,似乎形成了一…

选择合适系统

选择合适系统 原厂SDK系统 硬件兼容性 ⭐⭐⭐⭐⭐软件功能完善度 ⭐⭐⭐⭐⭐开发使用难度 ⭐⭐⭐⭐⭐烧写工具 全志自家烧录器。 TinaSDK-4.0 TF卡系统镜像 tina_v851se-tinyvision_uart0.img 默认TinaSDK编译出来 支持ADB 和默认SDK兼容性最好 tina-4.0_cameratest_ti…

使用知识图谱,大幅提升RAG准确性

大家好,图形检索—增强生成(GraphRAG)的发展势头日益强劲,已成为传统向量搜索检索方法的有力补充。这种方法利用图数据库的结构化特性,将数据组织为节点和关系,从而增强了检索信息的深度和上下文关联性。 知…

Stablediffusion有哪几种模型,小白入门必看!

前言 在Stable Diffusion中,模型有好几种,不同插件有不同的模型,分别作用于不同的功能。 今天卧龙君就带着大家一起来了解一下。 大模型:Stable Diffusion StableDiffusion大模型,可以理解为绘画风格集合&#xff…

16:【stm32】I2C的使用一:I2C片上外设的使用

I2C 1、片上外设1.1:寄存器与内部结构 2、通过I2C向外发送数据2.1:I2C的初始化2.1.1:初始化SCL和SDA2.1.2:使能时钟PCLK1(APB1)2.1.3:配置I2C1的参数 2.2:发送数据2.2.1:…

P2P 文件共享:现代网络中的高效文件传输

在互联网的世界中,不同应用程序的数据传输方法各异。P2P文件共享(Peer-to-Peer File Sharing) 作为一种高效的文件传输方式,使得用户可以在没有中央服务器的情况下直接进行文件交换。本文将详细介绍P2P文件共享的基本原理、优势及…

【通俗理解】CNN复杂度——卷积神经网络的计算成本解析

【通俗理解】CNN复杂度——卷积神经网络的计算成本解析 关键词提炼 #CNN复杂度 #卷积神经网络 #计算成本 #输入数据尺寸 #卷积核大小 #卷积核数量 #复杂度公式 第一节:CNN复杂度的类比与核心概念【尽可能通俗】 1.1 CNN复杂度的类比 CNN的复杂度就像是烹饪一道大…

引擎切换pdf识别简历分析

文章目录 1.EasyCode生成interview_history的crud1.在模板设置中手动指定逻辑删除的值2.生成代码,进行测试 2.PDF识别关键字1.引入依赖2.代码概览3.PDFUtil.java4.keyword1.EndType.java2.FlagIndex.java3.WordType.java4.KeyWordUtil.java 3.策略模式实现引擎切换&…

QT-window记事本

QT-window记事本 一、演示效果二、核心代码三、下载连接 一、演示效果 二、核心代码 #include <QMessageBox> #include <QFileDialog> #include <QDebug> #include <QProcess> #include <QDesktopServices> #include <QDateTime> #includ…

孙宇晨:区块链领域的坚韧领航者,以智慧铸就行业基石

​ 在区块链领域&#xff0c;孙宇晨以其卓越的智慧与不懈的韧性&#xff0c;成为行业内备受瞩目的领军人物。从创立波场 TRON 到引领去中心化的变革&#xff0c;孙宇晨始终以坚定的信念和独特的战略眼光推动着区块链技术的发展。 孙宇晨的成功不仅仅是因为他对技术的深入…

叉车驾驶员状态监控系统,司机身份安全识别,强化监管能力建设!

人脸识别技术作为人工智能领域的一个重要分支&#xff0c;已经广泛应用于安全识别、个人化推荐、社交网络等多个领域。其基于计算机视觉、图像处理、人脸检测、特征提取和人脸识别等先进技术&#xff0c;能够实现对人脸图像的精准分析和识别。在叉车驾驶场景中&#xff0c;AI人…

windows mfc webview2 接收html信息

webview2导入到mfc参考&#xff1a; windows vs2022 MFC使用webview2嵌入网页-CSDN博客 webview2与js交互参考&#xff1a;WebView2教程(基于C)【四】JS与C互访&#xff08;上&#xff09;_window.chrome.webview.postmessage-CSDN博客 一、JS端发送和接收 JS中&#xff0c;…

12代装win7影响性能吗?12代酷睿装win7关闭小核提高性能方法

12代酷睿装win7影响性能吗&#xff1f;12代酷睿装win7在性能上有点损耗&#xff0c;可以关闭小核提高性能。有些小朋友不知道怎么关闭上核来提高性能&#xff0c;下面电脑系统城小编就教大家12代酷睿装win7关闭核提高性能方法。 12代酷睿装win7说明&#xff1a;关闭小核解锁更多…

【分布式】分布式Session共享

这里通过SpringSession来实现Session的共享&#xff0c;Session数据存储在Redis中 SpringSession的操作指南&#xff1a; https://docs.spring.io/spring-session/docs/2.5.6/reference/html5/guides/boot-redis.html 导入相关的依赖 <dependency><groupId>org.s…