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

ops/2024/9/23 7:27:01/
英文名称: 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.ppmy.cn/ops/33970.html

相关文章

webpack配置、插件使用案例

概念 本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles&…

图文并茂手把手教你安装windows搭建sqlserver(SqlServer数据库安装保姆级教程)

sqlserver是什么 SQL Server 是由美国微软公司(Microsoft)开发的一款关系型数据库管理系统(RDBMS)。作为全球主流的数据库平台之一,SQL Server 设计用于高效管理和处理大量结构化数据,支持各种规模的应用场…

图像处理--空域滤波增强(原理)

一、均值滤波 线性滤波算法,采用的主要是邻域平均法。基本思想是使用几个像素灰度的某种平均值来代替一个原来像素的灰度值。可以新建一个MN的窗口以为中心,这个窗口S就是的邻域。假设新的新的像素灰度值为,则计算公式为 1.1 简单平均法 就是…

智慧旅游引领未来风尚,科技助力旅行更精彩:科技的力量推动旅游业创新发展,为旅行者带来更加便捷、高效和智能的旅行服务

目录 一、引言 二、智慧旅游的概念与特点 (一)智慧旅游的概念 (二)智慧旅游的特点 三、科技推动旅游业创新发展 (一)大数据技术的应用 (二)人工智能技术的应用 (…

每日一博 - 闲聊架构设计中的多级缓存设计

文章目录 方法论概述客户端缓存应用层缓存服务层缓存缓存设计的注意事项总结 思维导图戳这里 方法论概述 从客户端到服务层,缓存的应用广泛而重要。通过合理的缓存设计,能够有效地提高系统的性能并降低延迟。 客户端缓存 在客户端层面,浏览…

TCP 连接,一端断电和进程崩溃有什么区别?

TCP 连接,一端断电和进程崩溃有什么区别? 前言主机崩溃进程崩溃有数据传输的场景客户端主机宕机,又迅速重启客户端主机宕机,一直没有重启 总结 前言 有的小伙伴在面试腾讯的时候,遇到了这么个问题: 这个属…

贪吃蛇小游戏(c语言)

1.效果展示 屏幕录制 2024-04-28 205129 2.基本功能 • 贪吃蛇地图绘制 • 蛇吃食物的功能 (上、下、左、右方键控制蛇的动作) • 蛇撞墙死亡 • 蛇撞自身死亡 • 计算得分 • 蛇身加速、减速 • 暂停游戏 3.技术要点 C语言函数、枚举、结构…

three.js 中ShaderChunk的 uv_pars_vertex.glsl

1. three.js 中ShaderChunk的 uv_pars_vertex.glsl export default /* glsl */ #if defined( USE_UV ) || defined( USE_ANISOTROPY ) // 如果使用了UV坐标,或者什么什么; // 那我就声明一个 varying vUv 变量varying vec2 vUv;#endif #ifdef USE_MAP// 如果我们使…