LLM | 论文精读 | NeurIPS 2023 | SWIFTSAGE: 结合快思考与慢思考的生成智能体

论文标题:SWIFTSAGE: A Generative Agent with Fast and Slow Thinking for Complex Interactive Tasks

作者:Bill Yuchen Lin, Yicheng Fu, Karina Yang, Faeze Brahman, Shiyu Huang, Chandra Bhagavatula, Prithviraj Ammanabrolu, Yejin Choi, Xiang Ren

期刊:37th Conference on Neural Information Processing Systems (NeurIPS 2023)

DOI:10.1007/s11704-024-40231-1

email:yuhan.huang@whu.edu.cn

创作不易,恳请大家点赞收藏支持:)

---------------------------------------------------------------------------------------------------------------------------------

在人工智能领域,如何让智能体在复杂的互动任务中具备类似人类的推理和解决问题的能力是一个重大挑战。本文介绍了一种名为 SWIFTSAGE 的新型智能体框架,它灵感来自于人类认知的双重过程理论,通过结合行为克隆和大型语言模型(LLM)来提高任务完成的效率和效果。该框架由两个主要模块组成:SWIFT 模块(代表快速和直觉的思维)和 SAGE 模块(代表深思熟虑的推理)。

SWIFTSAGE 简介

SWIFTSAGE 的目标是通过结合快思与慢思两个模块,来实现复杂交互任务的高效解决。

  • SWIFT 模块:这是一个小型的编码-解码语言模型,通过模仿学习对其进行微调,用于模拟人类的直觉思维。它能够快速解码出下一个动作,适合简单且直接的任务。

  • SAGE 模块:使用类似于 GPT-4 的大型语言模型,模拟深度分析的推理过程。SAGE 模块分为两个阶段:规划阶段执行阶段。规划阶段负责生成高层次的任务建议,执行阶段则将这些建议转化为可执行的具体操作。

SWIFTSAGE 的创新之处在于使用启发式算法在这两个模块之间进行切换,以此来实现高效的任务执行。例如,SWIFT 模块在处理简单任务时快速出击,而当遇到复杂或意外情况时,系统会自动切换到 SAGE 模块进行深思熟虑的规划。

SWIFT 模块详细介绍

1. 模仿学习

SWIFT 模块是通过模仿学习来构建的智能体,旨在学习模仿各种训练场景中的“专家”或“神谕”智能体的行为。具体来说,模仿学习通过序列到序列(seq2seq)学习方式,让 SWIFT 模块能够在不同情境下生成相应的动作。

以往的方法,例如 TDT(Text Decision Transformer),通常只利用一跳历史(one-hop history)作为输入上下文,学习输出后续动作。虽然这种方法能够适应部分任务,但由于其动作历史上下文的限制,以及由于数据不平衡引起的有害偏差,导致表现存在一定局限性。

为了解决这些问题,SWIFT 模块采用了如下改进:

2. 扩展历史上下文及实际案例

我们将传统的一跳行为克隆(one-hop BC)扩展为多跳行为克隆(multi-hop BC),引入了一个滑动窗口机制来包含最近 K = 10 个动作的观测和奖励。除了最近的历史信息外,我们还包括了一个特殊字段,用于记录访问过的房间(且无重复)。这种方法的目标是为智能体提供更长的上下文,避免不必要的房间导航行为。

为了更好地理解 SWIFT 模块的运行机制,我们通过一个简单的案例来展示其模仿学习和多跳历史的使用。

案例描述:假设智能体的任务是“准备早餐”,其具体步骤包括从储物柜中取出盘子,从冰箱中取出鸡蛋,打开炉灶并煎鸡蛋,最后将煎好的鸡蛋装盘。

运行过程中的 Prompt:在这个任务中,SWIFT 模块需要处理多跳行为历史,以更好地理解任务的上下文和环境。以下是用于模仿学习的输入 Prompt 示例:

任务:准备早餐
时间:上一时间步
得分:上一时间步的得分
动作历史:[第 10 步动作 (+ 第 10 步奖励) -> 第 10 步观测, 第 9 步动作 (+ 第 9 步奖励) -> 第 9 步观测, ..., 第 1 步动作 (+ 第 1 步奖励) -> 第 1 步观测]
当前房间:厨房
物品库存:无
访问过的房间:{厨房, 储物柜, 冰箱}

在这个 Prompt 中,模型需要根据最近 10 步的动作历史(例如从储物柜取出盘子、打开冰箱等)以及当前的环境状态来预测下一个动作。例如,模型可能会选择“从冰箱中取出鸡蛋”作为下一个动作。

通过这种多跳历史的使用,SWIFT 模块可以综合考虑多个步骤的上下文,避免重复访问已经访问过的房间,优化任务的执行路径。

3. 平衡的模仿学习

为了避免因数据不平衡导致的偏差,在 seq2seq 学习中,我们对特定类型的任务和动作进行了下采样,以实现更平衡的训练数据集。最终,使用了具有 7.7 亿参数的 T5-large 模型,该模型具有指令跟随能力,构建了一个名为 SWIFT 的高效代理。尽管 SWIFT 模块的参数量仅为 TDT 的 1/15,但其表现却明显优于 TDT(11 亿参数),表现出了强大的模仿学习能力。

SAGE 模块详细介绍

1. 规划阶段

规划阶段,SAGE 模块通过向 LLM 提问来制定高层次计划。这些提问的目的是帮助智能体了解当前环境、任务要求以及潜在的挑战。具体包括五个关键问题:

  • Q1: 定位物体 (Locate Objects)

    • 问题:为了完成任务,我需要收集哪些物品?请逐一列出它们及其可能的位置。

    • 解释:这一问题帮助模型确定任务中涉及的所有物体,以及它们在环境中的可能位置。这是任务规划的基础,因为了解需要收集的物体可以帮助模型制定更好的执行计划。

  • Q2: 跟踪物体 (Track Objects)

    • 问题:是否有尚未收集的物体?

    • 解释:通过跟踪物体,模型能够判断当前任务的进展情况,确保所有必需的物体都已准备好,从而避免遗漏重要步骤。

  • Q3: 规划子目标 (Plan Subgoals)

    • 问题:为了最有效地完成任务,重要的子目标是什么?请逐一列出。

    • 解释:将复杂任务分解为多个子目标可以提高任务的可执行性。通过逐步实现每个子目标,模型能够更好地管理任务的复杂性。

  • Q4: 跟踪进度 (Track Progress)

    • 问题:根据这些子目标,我已经完成了哪些?我现在应该集中在哪个子目标上?

    • 解释:这一问题帮助模型跟踪任务的进展,明确哪些子目标已经完成,并指导模型集中精力完成接下来的子目标。

  • Q5: 处理异常 (Handle Exceptions)

    • 问题:我是否犯了任何错误,可能会妨碍我有效完成下一个子目标?如果有,我应该如何修复?

    • 解释:这一问题用于处理任务执行过程中可能出现的错误或异常情况,确保模型能够及时修正错误,从而避免任务失败。

实际运行中的 Prompt 示例

假设智能体的任务是“清理厨房”,模型需要根据环境状态回答上述五个问题。以下是一个完整的 prompt 示例:

任务:清理厨房
时间:当前时间步 t
得分:当前得分 S(t)
动作历史:[第 5 步动作 (+ 第 5 步奖励) -> 第 5 步观测, 第 4 步动作 (+ 第 4 步奖励) -> 第 4 步观测, ..., 第 1 步动作 (+ 第 1 步奖励) -> 第 1 步观测]
当前房间:厨房
物品库存:{扫帚, 垃圾袋}
访问过的房间:{厨房, 储物柜, 客厅}问题列表:
Q1: 为了完成清理厨房的任务,我需要收集哪些物品?
Q2: 是否有尚未收集的物体?
Q3: 为了最有效地完成清理厨房的任务,重要的子目标是什么?
Q4: 根据这些子目标,我已经完成了哪些?我现在应该集中在哪个子目标上?
Q5: 我是否犯了任何错误,可能会妨碍我有效完成下一个子目标?如果有,我应该如何修复?

在这个 prompt 中,SAGE 模块需要根据任务描述、当前的环境状态和动作历史,回答五个关键问题,从而制定一个高效的计划来完成清理厨房的任务。这样做有助于智能体更好地理解任务的整体情况,并进行合理的任务规划。

这些问题被设计为一个单一的 prompt,一次性提供给 LLM,确保 LLM 可以在综合考虑所有上下文信息后给出详细的高层次任务建议。这种一次性询问的方式比逐步交互更为高效。

2. 执行阶段

执行阶段,规划阶段生成的高层次目标比较抽象,需要将其转化为具体的操作。为了实现这一点,执行阶段使用了一套事先定义好的标准化动作模板,例如:

  • POUR(X, Y):将物体 X 倒入容器 Y,例如“将红色油漆倒入木杯中”。

  • TELEPORT(room):直接移动到某个房间,例如“TELEPORT(kitchen)”表示移动到厨房。

  • PICK(object):拾取某个物品并放入背包,例如“PICK(egg)”表示捡起鸡蛋。

  • OPEN(object):打开某个物体,例如“OPEN(freezer)”表示打开冰柜。

  • ACTIVATE(object):激活/打开某个物体,例如“ACTIVATE(stove)”表示打开灶台。

  • DEACTIVATE(object):关闭某个物体,例如“DEACTIVATE(light)”表示关闭灯光。

  • EXAMINE(object):仔细查看某个物体,例如“EXAMINE(light bulb)”表示检查灯泡。

  • MOVE(object, place):将某个物体移动到指定位置,例如“MOVE(pan, stove)”表示将平底锅移动到灶台上。

这些标准化动作模板使得模型能够将规划阶段的子目标转换为可直接执行的具体动作序列,并将这些动作存储在一个“动作缓冲区”中(称为 B = {Ât, Ât+1, ...}),这样模型可以一次性执行多个具体动作,减少了与 LLM 的交互频率,从而提高了执行效率。

SWIFT 与 SAGE 的集成

SWIFTSAGE 通过启发式算法有效地集成了 SWIFT 和 SAGE 两个模块。通常,SWIFT 模块因其快速的直觉推理能力,适合在任务初期进行高效探索,而当遇到以下几种情况时会切换到 SAGE 模块:

  • 卡住:连续多步没有获得奖励。

  • 无效:SWIFT 的预测动作在当前环境中无效。

  • 关键决策:例如需要给出实验结果的最终答案。

  • 意外情况:执行动作的观察结果与预期不符。

通过这种方式,SWIFTSAGE 能够在需要时无缝切换到深度规划模式,并在任务缓解后切换回快速反应模式,以实现更高效的任务解决。

评估与对比

在 30 项来自 ScienceWorld 基准测试的任务中,SWIFTSAGE 的表现显著优于其他方法,平均得分达到 84.7。相比之下,其他基准方法(如 SAYCAN、REACT 和 REFLEXION)的得分分别为 33.8、36.4 和 45.3。

  • 整体表现:SWIFTSAGE 在所有类型的任务(短、中、长)中表现出色,尤其是在较长和复杂任务中的表现尤为突出。

  • 有效性和效率:与基于 LLM 的其他方法相比,SWIFTSAGE 在推理过程中需要更少的计算资源。SAGE 模块通过一次生成多个动作,减少了 LLM 的调用次数,使得整个过程更加经济高效。

  • 异常处理:SWIFTSAGE 能够有效应对任务中的异常情况,例如在遇到故障设备时会重新规划,而不像其他方法一样陷入重复无效操作。

结论

SWIFTSAGE 通过结合 SWIFT 和 SAGE 两个模块,成功实现了复杂任务中的快速反应与深思熟虑的深度推理。这种结合了快思与慢思的框架为复杂交互任务提供了一种高效且具成本效益的解决方案,并展示了在任务解决效率和效果上的显著提升。SWIFTSAGE 的成功展示了结合小型语言模型和大型语言模型在复杂推理任务中的潜力,小型模型擅长识别特定模式,大型模型具有零样本泛化能力。然而,其评估环境仅限于模拟器,无法完全代表现实场景,且缺乏安全措施。未来需要开发更开放的环境、探索其在其他领域的泛化性,并研究更轻量的方法和智能切换机制。

未来的研究方向包括将 SWIFTSAGE 应用到更开放和复杂的环境中,并探索如何更好地在真实世界的物理环境中执行其生成的计划。结合小型语言模型的快速反应与大型语言模型的深度规划,SWIFTSAGE 为构建更通用的人工智能体提供了一个重要的方向。

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

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

相关文章

【Vue3】第二篇

Vue3学习第二篇 01. 事件处理02. 事件传参03. 事件修饰符04. 数组变化侦测05. 计算属性06. class绑定07. style绑定08. 侦听器09. 表单输入绑定10. 模板引用 01. 事件处理 在vue当中的事件处理和html、css中的不一样,它单独做了处理。 注意:用法中只是用…

【Android】浅析OkHttp(1)

【Android】浅析OkHttp(1) OkHttp 是一个高效、轻量级的 HTTP 客户端库,主要用于 Android 和 Java 应用开发。它不仅支持同步和异步的 HTTP 请求,还支持许多高级功能,如连接池、透明的 GZIP 压缩、响应缓存、WebSocke…

JUC并发编程面试题总结

文章目录 1、创建线程的三种方式2、线程的状态3、线程的上下文切换4、run和start的区别5、sleep和wait区别6、虚假唤醒,精确唤醒7、两阶段终止模式8、多线程下的线程安全问题9、如何解决线程安全问题10、synchornized的原理11、锁升级的机制12、锁消除13、批量重偏向…

Unity编辑器制作多级下拉菜单

Unity编辑器下拉菜单 大家好,我是阿赵。   在Unity引擎里面编写工具插件,有时候会用到一些特殊的菜单形式,比如下拉选项。 通过下拉菜单,给用户选择不同的选项。   如果只是一层的下拉列表,可以用EditorGUILayout.…

Nginx upstream

什么是Nginx upstream? Nginx 模块一般分为三大类:handler、filter和upstream。 利用 handler、filter 这两个模块,可以使 Nginx 轻松完成任何单机工作。 upstream 模块将使 Nginx 跨越单机的限制,完成网络数据的接收、处理和转…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-23

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-23 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-23目录1. Advancements in Visual Language Models for Remote Sensing: Datasets, Capabilities, and Enhancement Techniques摘…

Zig 语言通用代码生成器:逻辑,冒烟测试版发布二

Zig 语言通用代码生成器:逻辑,冒烟测试版发布二 Zig 语言是一种新的系统编程语言,其生态位类同与 C,是前一段时间大热的 rust 语言的竞品。它某种意义上的确非常像 rust,尤其是在开发过程中无穷无尽抛错的过程&#x…

高等数学-宋浩版2.0-映射

映射:X,Y为非空集合,存在法则F,对X(原像)中每个元素X,按法则F,在Y中有唯一元素与之对应,F为x到Y(镜像)的映射。f:X->Y X原像,Y像,x定义域,Df,Rf &#x…

python之多任务爬虫——线程、进程、协程的介绍与使用(16)

文章目录 1、什么是多任务?1.1 进程和线程的概念1.2 多线程与多进程的区别1.3 并发和并行2、python中的全局解释器锁3、多线程执行机制4、python中实现多线程(threading模块)4.1 模块介绍4.2 模块的使用5、python实现多进行程(Multiprocessing模块)5.1 导入模块5.2 模块的…

Caffeine本地缓存框架

Caffeine本地缓存框架 hi,我是阿昌,今天记录一下Java最强本地缓存Caffeine 1、缓存介绍 缓存(Cache),在软件无处不在。从底层CPU多级缓存,再到客户页面缓存,和服务器数据缓存,导出都存在着缓存的身影&am…

HBuilder X 中Vue.js基础使用2(三)

一、条件渲染 1、条件判断 v-if : 表达式返回真值时才被渲染 v-else :表达式返回为假时不被渲染 2、 分支条件判断 v-else-if :使用v-if , v-else-if 和 v-else 来表示其他的条件分支 3、显示隐藏 v-show v-show true 把节点显示 …

PortQry下载安装使用教程(超详细),Windows测试UDP端口

《网络安全自学教程》 PortQry是微软官方提供的一款TCP/IP连接「排障工具」,用来「检查」TCP/UDP「端口状态」。 平时检查端口状态,最常用的是telnet,但它是基于TCP协议的,无法检测「UDP端口」,这篇文章教大家如何在W…

Axure随机验证码高级交互

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:字母数字随机验证码高级交互 主要内容:4位字母数字随机验证码生成、错误提示与State状态同步 应用场景:登录验证码、其他类…

面试宝典(五):用三个线程按顺序循环打印123三个数字,比如123123123

要使用三个线程按顺序循环打印123三个数字,势必要控制线程的执行顺序,可以使用java.util.concurrent包中的Semaphore类来控制线程的执行顺序。 代码示例 import java.util.concurrent.Semaphore;public class SequentialPrinting123 {private static Se…

leetcode:34. 在排序数组中查找元素的第一个和最后一个位置(python3解法)

#1024程序员节 | 征文# 难度:中等 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(lo…

初识算法 · 前缀和(1)

目录 前言: 一维数组的前缀和 题目解析 算法原理 算法编写 二维数组的前缀和 题目解析 算法原理 算法编写 前言: ​本文的主题是前缀和,通过两道题目讲解,一道是一维数组的模板,一道是二维数组的模板。 链接…

【WebGIS实例】(18)MapboxGL 绘制矢量——线、面

前言 Mapbox GL JS 版本:3.6.0 该博客仅供学习参考,如果您是计划在实际项目中实现该功能,也推荐您直接使用已有的功能库: 官方案例:Draw a polygon and calculate its areamapbox-gl-draw:mapbox/mapbox-g…

基于Django+python的酒店客房入侵检测系统设计与实现

项目运行 需要先安装Python的相关依赖:pymysql,Django3.2.8,pillow 使用pip install 安装 第一步:创建数据库 第二步:执行SQL语句,.sql文件,运行该文件中的SQL语句 第三步:修改源…

HTTPS讲解

前瞻 HTTP与HTTPS的关系 HTTPS也是一个在应用层的协议,是在HTTP协议基础上的一个加密解密层 明文 密文 秘钥 明文->秘钥 加密 秘钥->明文 解密 例如:明文为7 秘钥为2 7^21015; 5就是密文例子: 因为http的内容是明文传输的,明文…

危险物品图像分割系统:一键训练

危险物品图像分割系统源码&数据集分享 [yolov8-seg-GFPN&yolov8-seg-CSwinTransformer等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global…