论文阅读_使用有向无环图实现流程工程_AgentKit

news2024/12/29 9:08:05
英文名称: AgentKit: Flow Engineering with Graphs, not Coding
中文名称: AgentKit:使用图而非编码进行流程工程
链接: https://arxiv.org/pdf/2404.11483.pdf
代码: https://github.com/holmeswww/AgentKit
作者: Yue Wu, Yewen Fan, So Yeon Min, Shrimai Prabhumoye, Stephen McAleer, Yonatan Bisk, Ruslan Salakhutdinov, Yuanzhi Li, Tom Mitchell
机构: 卡内基梅隆大学, NVIDIA, 微软, 波士顿大学
日期: 2024-04-17
引用次数: 80

1 摘要

  • 目标:提出了 LLM 提示框架 AgentKit,用于构建能通过自然语言提示进行复杂“思考过程”的多功能代理。
  • 方法:AgentKit 使用节点作为基本构建块,每个节点包含一个特定子任务的自然语言提示。用户可以将这些节点像乐高积木一样堆叠起来,形成一个复杂的思考过程。
  • 结果:AgentKit 设计的代理在 WebShop 和 Crafter 上实现了最先进的性能。

2 相关知识

2.1 Agent

在不同的上下文中,"Agent" 可能有不同的含义。有时 "Agent" 被用来指代一个完整的系统,它可以解决复杂的问题,通过将大任务拆分成小块,并使用各种工具或 LLM 来处理这些小块。有时 "Agent" 用来指代这些小块,这些小块各自执行特定的任务,并协同工作以完成更大的任务。

在 Langchain 或类似的系统中,Agent 常被分为思考模块和行动模块。思考模块负责处理信息、做出决策和规划,而行动模块则负责执行这些决策和规划。这是一种根据角色和职责的分类,与具体工具或方法无关。

2.2 问题分析

在处理复杂问题或者提供多元化功能时,一个 Agent 执行完之后,可能需要多个 Agent 来进行后续操作。如果需要手动指定,则需要编写大量的逻辑来管理这些 Agent 之间的关系。当增加或修改功能时,会面临复杂的逻辑修改。

许多时候,行动模块的功能已经比较完善。如果我们能清晰地描述模块间的依赖关系,从而避免穷举;思考模块会根据当前的环境来构建解决问题的流程,并对这个流程进行反思和优化,那么整个链路就打通了。

3 读后感

前几天,和朋友讨论了如何让 Agent 自我构建知识体系,自我进化。刚好看到了这篇论文,作者对 Agent 结构进行了更为深入和丰富的思考,并提出了流程工程,或者思维工程的概念。

以前,Agent 的组合相对较简单。一种方法是通过程序限定当前步骤可以使用哪些 Agent,这需要大量人工干预。另一种方法是将当前环境和所有可用的 Agent 一起交给思考 Agent 自由选择,但这可能会引发许多错误,出及 token 的浪费。

这篇论文提出的方法,类似于使用强化学习通过精调 LLM 优化 Agent。不同之处在于本篇中知识存储在模型的外部,更具有可解释性。这两种方法各有千秋。

这篇论文针对思考和行动这两个目标,在结构上分别进行了优化:在行动方面,将每个子功能都抽象成模块,可灵活组合。同时,通过图形的方式建立并约束了模块之间的关系。在执行过程中,根据具体情况进行动态路由,而非预先设定好具体逻辑。在思考方面,结合了反思,分层规划,长短期记忆,并在探索过程中构建知识库,以优化 Agent 的调用过程。

4 引言

图 1:用户将任务分解为代表“思维过程”的子任务(节点),并为子任务(节点)创建提示。AgentKit 中的子任务(节点)可以以不同的方式设计和组装,以实现不同的功能,类似于乐高积木。

本文的主要贡献是提出了一个端到端多功能人工智能代理的自然语言“编码”框架。这个框架具备进行计划、反思和学习的能力。

具体方法是生成了一个有向无环图,该图由动态节点和依赖关系的集合构成。在执行过程中,遍历这个图,根据动态图的拓扑顺序计算每个节点的 LLM 结果。使用最后一个节点直接输出环境操作。为了提高功能性,可以通过编码在推理过程中动态添加和删除节点和依赖项,从而完成复杂的路由。

5 优化行动

首先,将“思维过程”定义为一系列相互关联的自然语言子任务。每个子任务都以节点形式呈现,这些节点通过有向无环图(DAG)中的依赖关系链接,以实现各种逻辑和连贯的过程。

每个节点都能够接触到中央数据库。用户可以通过此数据库将任务规范、指令和当前的游戏观察结果传递到图中的每个节点。此外,数据库还使节点能够存储持久信息(例如,计划或知识库),并将这些信息传递给未来的步骤。

图 -2 展示了子节点内部和外部的构造。

5.1 节点组件

对于每个节点 v,用户通过指定提示 q 和依赖项 D 列表来定义子任务。在节点内部,AgentKit 运行一个内置流,该流对输入进行预处理(Compose),LLM 使用预处理的输入和提示 q 进行查询,并选择性地对 LLM(After-query)的输出进行后处理,如:图 -2 的左侧所示。(图 -2 已经画得非常清楚,就不在此展开了,细节请见论文)

5.2 动态组件

为了支持如分支等高级功能,AgentKit 提供了 API,供用户在推理过程中可以动态地修改 DAG。如图 -2 的右侧显示,节点 n7 可以根据当前的状态,动态地在图中增加(或删除)组件。值得注意的是,所有这些修改都是临时性的,并且,禁止对已在此阶段的评估节点进行修改。

5.3 动态图遍历

使用了 Kahn 算法来遍历有向无环图的静态节点和动态添加/删除的节点。这种算法特别适用于拓扑排序。由于给定图可能存在多种拓扑排序,因此组件的动态添加/删除可能引发不确定性或意外行为。为了防止这种情况,采取了相应的保护措施,以捕捉潜在的意外行为。

6 优化思考

这里演示了 Crafter(Hafner,2021)游戏的代理,下面按图 -3 中的 a-d 分别说明。

6.1 总结并跟踪

图 3(a),在每一步,Agent 会总结并跟踪:1)观察(OTns-obs);2)计划和推理(OTns-plan);3)观察变化以推断基于前一动作是否成功(OT−1ns-action)。

6.2 具有短期反思的分层规划器

图 3(b),在步骤 T 中,所有的规划节点将 oT−1、oT 和手册 I 作为输入,并输出 3 个子目标和一个技能 sT。nreflect 反思最近 25 步的总结,而 nchallenge 和 ngate 决定是否保留(T - 1)的子目标或进行更新。

利用关于最重要的子目标的信息,代理会跟踪一个“技能”列表(nskills),提示 LLM 检索和创建新的技能,以构建一个技能库 S。

6.3 长期反思

图 3(c),每 3 个步骤,通过 LLM 提示技能 s 下的所有先前步骤来计算特定于技能的反馈。

Onfeed 将成为后续计划和行动决策的上下文。

6.4 在与知识库交互的过程中学习

图 3(d),代理使用两个精心设计的提示(节点):nunknown 和 nkb-add,维护未知信息列表 Lunk 和知识库 KB。在每个步骤 T 中,nkb-add 提示 LLM 通过理解最后两步的观察 oT−1 和 oT,从 Lunk 中识别信息。识别的信息被存储在知识库 KB 中。然后,nunknown 提示 LLM 列出当前子目标需要的缺失信息(来自说明手册和知识库)。缺失的信息列表随后被添加到 Lunk 中。

7 实验结果

8 相关论文

  • SPRING: Studying Papers and Reasoning to play Games

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

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

相关文章

5月3号作业

作业 16. 答案:c。 17. 答案: c。 18. 答案:a。 19. 答案:a。 20. 答案:c。 21. 答案:c。 22. 答案:d。 23. 答案:b。 第一个出队元素是5,说明5前面的元素全…

Day15-JavaWeb开发-Maven高级-分模块设计与开发继承与聚合私服

1. Maven高级-分模块设计与开发 2. Maven高级-继承与聚合 2.1 继承关系实现 2.2 版本锁定 2.3 聚合实现 3. Maven高级-私服 3.1 私服-介绍 3.2 私服-资源上传与下载 4. Web开发-完结

全方位了解 Meta Llama 3

本文将为您提供 Llama 3 的全面概览,从其架构、性能到未来的发展方向,让您一文了解这一革命性大语言模型的所有要点。 Meta Llama 发展历程 Llama 1 Llama 是由 Meta(FaceBook) AI 发布的一个开源项目,允许商用,影响力巨大。Lla…

让.NET 8 支持 Windows Vista RTM

众所周知,从 Windows 的每次更新又会新增大量 API,这使得兼容不同版本的 Windows 需要花费很大精力。导致现在大量开源项目已经不再兼容一些早期的 Windows 版本,比如 .NET 8 AOT编译命令行程序时生成的EXE,依赖以下三个函数&…

Raft共识算法笔记,MIT6.824,

处理leader和follow的一个重要思路是多数投票,确保系统中存在奇数个服务器(例如3台)。进行任何操作都需要来自多数服务器的同意,例如3台服务器中的2台。如果没有多数同意,系统会等待。为什么多数投票有助于避免脑裂问题…

【linux-IMX6ULL配置GPIO通用流程-以及时钟配置】

目录 1. GPIO模式控制流程1.1 LED、蜂鸣器、按键1.2 GPIO控制流程 2. 标准库的简要分析及实现:2.1 问题引入:2.2 代码实现: 3. 时钟配置总结:3.1 时钟树概要:3.2 IMX6ULL时钟概要及时钟树:3.3 IMX6ULL时钟配…

Spring Boot | Spring Boot 消息管理 ( 消息中间件 ) 、RabbitMQ“消息中间件“

目录: 一、"消息服务" 概述 :1.1 为什么要使用 "消息服务" ( 消息中间件 ) ?① 异步处理② 应用解耦③ 流量削峰④ 分布式事务管理 1.2 常用 "消息中间件" 介绍 :ActiveMQ ( 广泛应用于中小型企业 )RabbitMQ ( 没有特别要求的场景下…

XBoot:基于Spring Boot 2.x的一站式前后端分离快速开发平台

XBoot:基于Spring Boot 2.x的一站式前后端分离快速开发平台 摘要 随着信息技术的迅速发展,快速构建高质量、高可靠性的企业级应用成为了迫切需求。XBoot,作为一个基于Spring Boot 2.x的一站式前后端分离快速开发平台,通过整合微信…

CSS选择器、字体文本属性、三大特性、盒子模型等

目录 导入css简介HTML的局限性CSS-网页美化CSS语法规范CSS代码风格 选择器基础选择器复合选择器 CSS字体属性字体系列字体大小字体粗细文字样式字体复合属性 CSS文本属性文本颜色对齐文本装饰文本文本缩进行间距(即行高) CSS的引入方式emmet语法元素显示模式什么是?…

百度下拉框负面信息如何删除?

百度头条360等搜索引擎,作为人们获取信息的主要途径之一。然而,一些知名的企业或个人可能会面临在搜索的下拉框中出现负面信息的问题,这可能对其声誉和形象造成不良影响。小马识途营销顾问根据自身从业经验,针对这类情况提出以下建…

【R语言】描述性数据分析与数据可视化

我们处理的变量可以分为两类,一类是连续型变量,另一类叫做分类型变量,其中对于连续型变量,如果服从正态分布就用平均值填充NA,不服从正态分布就用中位数填充NA,对于分类型变量,不管是有序的&…

记服务器被挖矿的一次排查

1、top 查看进程使用情况,进程名为 kswapd0 用了180%的CPU,我的机器是2C的,所以基本上算是吃掉了所有的CPU资源,很明显罪魁祸首就是它。 2、执行命令 netstat -antlp | grep kswapd0 查询该进程的网络信息,发现一个与…

漫谈音频深度伪造技术

作为人工智能时代的新型媒体合成技术,深度伪造技术近年来在网络媒体中的涉及领域越发广泛、出现频次越发频繁。据路透社报道,2023年,社交媒体网站上发布50万个深度伪造的语音和视频。 1、深度伪造技术的五个方面 音频深度伪造技术&#xff…

Unity 性能优化之静态批处理(三)

提示:仅供参考,有误之处,麻烦大佬指出,不胜感激! 文章目录 前言一、静态批处理是什么?二、使用步骤1.勾选Static Batching2.测试静态合批效果 三、静态合批得限制1、游戏对象处于激活状态。2、游戏对象有一…

tomcat+maven+java+mysql图书管理系统1-配置项目环境

目录 一、软件版本 二、具体步骤 一、软件版本 idea2022.2.1 maven是idea自带不用另外下载 tomcat8.5.99 Javajdk17 二、具体步骤 1.新建项目 稍等一会,创建成功如下图所示,主要看左方目录相同不。 给maven配置国外镜像 在左上…

前端工程化06-JavaScript模块化CommonJS规范ES Module

7、JavaScript模块化 在js开发中,他并没有拆分的概念,并不像java一样他可以拆分很多的包,很多的类,像搭积木一样完成一个大型项目的开发,所以js在前期的时候并不适合大型后端的项目开发,但是这些问题在后来…

16_Scala面向对象编程_函数

文章目录 1.声明Scala函数2.访问伴生对象3.空对象直接用的方法4.构造对象--通过object获取单例对象--直接new--scala独有apply()方式--scala有参构造--scala构造方法两大类使用辅构造如下上述代码主构造为辅助构造方法甚至可以多个多个辅助构造形参内容不能重不使用辅助构造和使…

Linux文件类型及目录和文件的权限

一、Linux 文件类型 1、Windows文件类型 2、Linux文件类型 1普通文件类型 Linux 中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据 格式的文件(data);各种压缩文件.第一个属性为 - 2目录文件 就是目录, 能用 # cd 命…

【微服务】服务保护(通过Sentinel解决雪崩问题)

Sentinel解决雪崩问题 雪崩问题服务保护方案服务降级保护 服务保护技术SentinelFallback服务熔断 雪崩问题 在微服务调用链中如果有一个服务的问题导致整条链上的服务都不可用,称为雪崩 原因 微服务之间的相互调用,服务提供者出现故障服务的消费者没有…

Unity 热更--AssetBundle学习笔记 1.0【AB包资源加载工具类的实现】

合集 - Unity学习笔记(13)1.Unity学习笔记–基础2023-11-012.Unity学习笔记–入门2023-10-293.Unity学习笔记–数据持久化之PlayerPrefs的使用2023-11-194.Unity学习笔记–数据持久化XML文件(1)2023-11-205.Unity学习笔记–数据持久化XML文件(2)2023-12-…