A survey on large language model based autonomous agents

发布于 2024-05-07  251 次阅读


基于大语言模型的自治Agent研究综述

论文链接

一个自主的代理人是一个系统,它位于环境中,是环境的一部分,随着时间的推移,它感知环境并对其采取行动,以追求自己的议程,并影响它在未来的感知。

在本文中,我们进行了全面的调查领域的LLM为基础的自主代理。具体来说,我们组织我们的调查的基础上,包括建设应用评估LLM为基础的自治代理三个方面。

对于Agent的构建,我们主要关注两个问题:
(1)如何设计Agent的体系结构以更好地利用LLM,
(2)如何激发和增强Agent完成不同任务的能力。
直观地说,第一个问题旨在为代理建立硬件基础,而第二个问题则集中在提供代理软件资源。

基于LLM的自主Agent构造

基于LLM的自主代理有望通过利用LLM的类人能力来有效地执行各种任务。为了实现这一目标,有两个重要的方面,即
(1)应该设计哪种体系结构来更好地使用LLM和
(2)给予设计的体系结构,如何使代理获得完成特定任务的能力。在体系结构的背景下,我们对现有的研究进行了系统的综合,最终形成了一个全面的统一框架。至于第二个方面,我们总结了代理能力获取的策略,根据他们是否微调LLM。

当比较基于LLM的自主Agent与传统的机器学习相比较,设计Agent体系结构类似于确定网络结构,而Agent能力的获取类似于学习网络参数。下面,我们将对这两个方面进行更详细的介绍。

Agent体系结构设计

图1

框架的总体结构如图1所示,它由剖析模块、存储模块、规划模块和动作模块组成。

配置模块的目的是确定代理的角色。记忆和规划模块将智能体置于动态环境中,使其能够回忆过去的行为并规划未来的行动。动作模块负责将智能体的决策转化为具体的输出。在这些模块中,分析模块影响记忆和规划模块,这三个模块共同影响行动模块。在下文中,我们将详细介绍这些模块。

分析模块

自主代理通常通过承担特定角色来执行任务,例如编码员,教师和领域专家。profiling模块旨在指示代理角色的配置文件,这些配置文件通常写入提示符中,影响LLM的行为。代理配置文件通常包括基本信息,如年龄,性别和职业,以及心理信息,反映代理的个性,以及社会信息,详细说明代理之间的关系。前人的工作主要有下面一些方法:

  • 手工制作方法

  • LLM生成方法

  • 数据集对齐方法

虽然大多数以前的工作独立地利用上述配置文件生成策略,但我们认为,将它们结合起来可能会产生额外的好处。

内存模块

存储模块在Agent体系结构设计中起着非常重要的作用。它存储从环境中感知的信息,并利用记录的记忆来促进未来的行动。记忆模块可以帮助智能体积累经验,自我进化,并以更一致,合理和有效的方式行事。本节提供内存模块的全面概述,重点介绍其结构、格式和操作。

内存结构

基于LLM的自主代理通常包含来自人类记忆过程的认知科学研究的原理和机制。人类记忆的一般发展过程是从记录感知输入的感觉记忆,到短暂保存信息的短期记忆,再到长时间巩固信息的长期记忆。在设计智能体记忆结构时,研究人员从人类记忆的这些方面获得灵感。具体来说,短期记忆类似于受Transformer架构约束的上下文窗口内的输入信息。长期记忆类似于外部向量存储,代理可以根据需要快速查询和检索。在下文中,我们将介绍两种常用的基于短期和长期记忆的记忆结构。

  • 统一内存
    这种结构只模拟了人类短时记忆,而短时记忆通常是通过在上下文中学习来实现的,记忆信息直接写入提示中。

  • 混合存储器
    这种结构明确地模拟了人类的短期和长期记忆。短期记忆暂时缓冲最近的感知,而长期记忆随着时间的推移巩固重要信息。

内存格式

除了存储器结构之外,分析存储器模块的另一个角度是基于存储器存储介质的格式,例如,自然语言记忆或嵌入记忆。不同的内存格式具有不同的优势,适用于各种应用。在下文中,我们介绍几种代表性的存储格式。

  • 自然语言
    在这种格式中,记忆信息,如代理行为和观察直接使用原始自然语言描述。这种格式具有几个优点。首先,记忆信息可以以灵活和可理解的方式表达。此外,它保留了丰富的语义信息,可以提供全面的信号来指导代理行为。

  • 向量(Embeddings)
    在这种格式中,记忆信息被编码成嵌入向量,这可以提高记忆检索和阅读效率。

  • 数据库
    在这种格式中,内存信息存储在数据库中,允许代理有效和全面地操纵内存。

  • 结构化列表
    在这种格式中,记忆信息被组织成列表,并且记忆的语义可以以高效和简洁的方式传达。

内存操作

记忆模块在允许智能体通过与环境交互来获取、积累和利用重要知识方面起着关键作用。智能体与环境之间的交互是通过三个关键的内存操作完成的:内存阅读、内存写和内存反射。在下文中,我们将更详细地介绍这些操作。

  • 内存阅读
    记忆阅读的目的是从记忆中提取有意义的信息,以增强智能体的行动。形式上,我们从现有的文献中得出以下关于记忆信息提取的等式:
    公式1

其中是q查询,例如,代理应该处理的任务或代理所处的上下文。M是所有记忆的集合。3个s分别是用于测量记忆 m 的新近性、相关性和重要性的评分函数。这些评分函数可以采用多种方法实现,例如S_rel可以基于LSH、ANNOY、HNSW、FAISS等实现,需要说明的是,S_imp只反映了内存本身的特征,因此与查询无关。qαβγ是平衡参数。通过赋予它们不同的值,人们可以获得不同的记忆阅读策略。

  • 内存写

记忆书写的目的是将感知到的环境信息存储在记忆中。在记忆中存储有价值的信息为将来检索信息性记忆提供了基础,使智能体能够更有效和理性地行动。在存储器写入过程中,有两个潜在的问题应该仔细解决。一方面,解决如何存储与现有存储器类似的信息(即,内存复制)。另一方面,重要的是考虑当存储器达到其存储极限(即,内存溢出)。在下文中,我们将更详细地讨论这些问题。(1)记忆复制为了整合类似的信息,人们开发了各种方法来整合新的和以前的记录。例如,在[7]中,与相同子目标相关的成功动作序列存储在列表中。一旦列表的大小达到N(=5),则使用LLM将其中的所有序列压缩到统一的计划解决方案中。存储器中的原始序列被新生成的序列替换。增强LLM [43]通过计数累积聚合重复信息,避免冗余存储(2)内存溢出。为了在存储器满的时候将信息写入存储器,人们设计了不同的方法来删除已有的信息以继续记忆过程。例如,在ChatDB [40]中,可以根据用户命令显式删除内存。RET-LLM [42]使用固定大小的内存缓冲区,以先进先出(FIFO)的方式存储最旧的条目。

  • 内存反射

记忆反射模仿人类见证和评估自己的认知,情感和行为过程的能力。当适应代理时,目标是为代理提供独立总结和推断更抽象,复杂和高级信息的能力。更具体地说,在生成代理[20]中,代理有能力将存储在内存中的过去经验总结为更广泛和更抽象的见解。开始,智能体根据其最近的记忆产生三个关键问题。然后,利用这些问题查询记忆,获取相关信息。在获得的信息的基础上,代理生成五个见解,这反映了代理的高层次的想法。例如,“Klaus Mueller正在写一篇研究论文”,“Klaus Mueller正在与图书管理员进行进一步的研究”和“Klaus Mueller正在与Ayesha Khan谈论他的研究”的低层次记忆可以诱导“Klaus Mueller致力于他的研究”的高层次洞察力。此外,反射过程可以分层发生,这意味着可以基于现有的见解来生成见解。在GITM [16]中,成功完成子目标的操作存储在列表中。当列表包含超过五个元素时,代理将它们总结为一个通用的抽象模式,并替换所有元素。在ExpeL [44]中,引入了两种方法来获取反射。首先,智能体比较同一任务中成功或失败的轨迹。其次,智能体从成功轨迹的集合中学习以获得经验。

规划模块

图2

当面对复杂的任务时,人类倾向于将其分解为更简单的子任务并单独解决它们。规划模块的目的是赋予代理人这样的人的能力,这是期望使代理人的行为更合理,强大,可靠。具体而言,我们总结了现有的研究基于智能体是否可以在规划过程中获得反馈,具体如下:

没有反馈的规划
  • 单路径推理
    在这种策略中,最终任务被分解为几个中间步骤。这些步骤以级联方式连接,每个步骤只导致一个后续步骤。LLM遵循这些步骤来实现最终目标。

  • 多路径推理
    在该策略中,用于生成最终计划的推理步骤被组织成树状结构。每个中间步骤可以具有多个后续步骤。这种方法类似于人类思维,因为个人在每个推理步骤中可能有多种选择。

  • 外部规划器。
    尽管LLM在零射击规划中表现出强大的力量,但有效地为特定领域的问题生成计划仍然具有很大的挑战性。为了应对这一挑战,研究人员转向外部规划者。这些工具都是开发良好的,并采用高效的搜索算法来快速识别正确的,甚至是最佳的计划。具体来说,LLM+P [57]首先将任务描述转换为正式的规划领域定义语言(PDDL),然后使用外部规划器来处理PDDL。最后,生成的结果通过LLM转换回自然语言。

有反馈的规划

在许多现实场景中,智能体需要进行长期规划来解决复杂的任务。当面对这些任务时,由于以下原因,上述没有反馈的规划模块可能不太有效:首先,从一开始就直接生成完美的计划是非常困难的,因为它需要考虑各种复杂的先决条件。因此,简单地遵循最初的计划往往会导致失败。此外,计划的执行可能会受到不可预测的过渡动态的阻碍,从而使初始计划不可执行。同时,在研究人类如何处理复杂任务时,我们发现个人可能会反复制定和修改他们的计划基于外部反馈。为了模拟人类的这种能力,研究人员设计了许多规划模块,在这些模块中,智能体可以在采取行动后收到反馈。反馈可以从环境、人类和模型中获得,这些将在下文中详细描述。

  • 环境反馈
    这种反馈是从客观世界或虚拟环境中获得的。例如,它可以是游戏的任务完成信号或智能体采取行动后的观察结果。SayPlan [31]利用来自场景图模拟器的环境反馈来验证和完善其战略制定。该模拟器擅长识别代理操作之后的结果和状态转换,促进SayPlan对其策略的迭代重新校准,直到确定可行的计划。

  • 人的反馈
    除了从环境中获取反馈外,直接与人类交互也是增强智能体规划能力的一种非常直观的策略。人的反馈是一种主观信号。它可以有效地使智能体与人类的价值观和偏好保持一致,也有助于缓解幻觉问题。在Inner Monologue [61]中,智能体的目标是在3D视觉环境中执行高级自然语言指令。它被赋予了主动征求人类对场景描述的反馈的能力。然后,智能体将人类反馈纳入其提示中,从而实现更明智的规划和推理。在上述情况下,我们可以看到,不同类型的反馈可以结合起来,以提高代理规划能力。

  • 模型反馈
    除了上述的环境和人类反馈,这是外部信号,研究人员还调查了利用内部反馈从代理本身。这种类型的反馈通常基于预先训练的模型生成。具体来说,[62]提出了一种自我完善机制。这个机制由三个关键部分组成:输出、反馈和细化。首先,代理生成输出。然后利用LLM对输出进行反馈,并指导如何对输出进行改进,最后通过反馈和改进对输出进行改进。这个输出-反馈-细化过程迭代直到达到一些期望的条件。

动作模块

行动模块负责将智能体的决策转化为具体的结果。该模块位于最下游位置,直接与环境交互。它受个人资料、记忆和计划模块的影响。本节从四个方面介绍了行动模块:(1)行动目标:行动的预期结果是什么?(2)行动生产:行动是如何产生的?(3)行动空间:什么是可用的行动?(4)行动影响:行动的后果是什么?在这些观点中,前两个侧重于行动之前的方面(“行动前”方面),第三个侧重于行动本身(“行动中”方面),第四个强调行动的影响(“行动后”方面)。

行动目标

智能体可以执行具有各种目标的动作。这里,我们提出几个有代表性的例子:(1)任务完成。在这种情况下,智能体的行为旨在完成特定的任务,例如在Minecraft中制作铁镐[38]或完成软件开发中的功能[18]。这些行动通常都有明确的目标,每一个行动都有助于最终任务的完成。在现有文献中,旨在实现这类目标的行动非常常见。(2)通信在这种情况下,采取行动与其他代理或真实的人进行通信,以共享信息或协作。例如,ChatDev [18]中的代理可以相互通信以共同完成软件开发任务。在内心独白中,智能体积极参与与人类的交流,并根据人类的反馈调整其行动策略。(3)环境勘探。在这个例子中,智能体的目标是探索不熟悉的环境,以扩大其感知,并在探索和利用之间取得平衡。例如,Voyager [38]中的智能体可能会在任务完成过程中探索未知技能,并通过试错法根据环境反馈不断完善技能执行代码。

动作生成

与普通的LLM不同,其中模型输入和输出直接关联,代理可以通过不同的策略和来源采取行动。下面,我们介绍两种常用的动作制作策略。(1)通过记忆回忆的行动。在该策略中,动作是根据当前任务从Agent内存中提取信息生成的。任务和提取的记忆被用作触发代理动作的提示。(2)通过遵循计划采取行动。在这种策略中,智能体按照预先生成的计划采取行动。例如,在DEPS [33]中,对于给定的任务,智能体首先制定行动计划。如果没有信号表明计划失败,代理将严格遵守这些计划。

动作空间

动作空间指的是智能体可以执行的一组可能的动作。一般来说,我们可以将这些操作大致分为两类:(1)外部工具和(2)LLM的内部知识。在下文中,我们将更详细地介绍这些操作。

  • 外部工具。
    虽然LLM已被证明在完成大量任务方面是有效的,但它们可能不适合需要全面专业知识的领域。此外,LLM也可能遇到幻觉问题,这些问题很难自己解决。为了缓解上述问题,代理被赋予调用外部工具执行动作的能力。在下文中,我们提出了几个有代表性的工具,已在文献中利用。
    (1) APIs.
    (2)数据库和知识库。
    (3)外部模型。

  • 内部知识
    除了利用外部工具外,许多代理商仅依赖LLM的内部知识来指导他们的行动。

行动影响

行动影响是指行动的后果。事实上,动作影响可以包含许多实例,但为了简洁起见,我们只提供几个示例。(1)不断变化的环境。智能体可以通过移动位置、收集物品、建造建筑物等动作直接改变环境状态。例如,在GITM [16]和Voyager [38]中,环境是由代理在其任务完成过程中的操作改变的。例如,如果智能体开采三个树林,那么它们可能会在环境中消失。(2)改变内部状态。智能体采取的行动也可以改变智能体本身,包括更新记忆、形成新计划、获取新知识等等。例如,在生成代理[20]中,内存流在系统内执行操作后更新。SayCan [78]使智能体能够采取行动来更新对环境的理解。(3)引发新的行动。在任务完成过程中,一个代理动作可以由另一个代理动作触发。例如,旅行者号[38]在收集了所有必要的资源后建造建筑物。

Agent能力获取

在上面的部分中,我们主要关注如何设计代理架构,以更好地激发LLM的能力,使其能够像人类一样完成任务。体系结构充当代理的"硬件"。然而,仅仅依靠硬件是不足以实现有效的任务性能。这是因为代理可能缺乏必要的特定于任务的能力,技能和经验,这些可以被视为“软件”资源。为了使代理拥有这些资源,已经设计了各种策略。一般来说,我们根据这些策略是否需要对LLM进行微调,将其分为两类。在下文中,我们将更详细地介绍它们中的每一个。

通过微调获得能力

增强代理完成任务的能力的一种简单方法是基于任务相关数据集对代理进行微调。通常,数据集可以基于人类注释、LLM生成或从现实世界的应用程序中收集来构建。在下文中,我们将更详细地介绍这些方法。

  • 使用人类注释数据集进行微调。
    为了微调代理,利用人工注释数据集是一种通用的方法,可以在各种应用场景中使用。在这种方法中,研究人员首先设计注释任务,然后招募工人来完成它们。

  • 使用LLM生成的数据集进行微调。
    构建人工注释数据集需要招募人员,这可能是昂贵的,特别是当需要注释大量样本时。考虑到LLM可以在广泛的任务中实现类似人类的功能,一个自然的想法是使用LLM来完成注释任务。虽然这种方法产生的数据集可能不像人类注释的那样完美,但它要便宜得多,并且可以用来生成更多的样本。

  • 使用真实世界的数据集进行微调。
    除了基于人类或LLM注释构建数据集外,直接使用真实世界的数据集来微调代理也是一种常见的策略。

无需微调的能力获取:

在传统机器学习时代,模型能力主要通过从数据集学习来获取,其中知识被编码到模型参数中。在LLM时代,可以通过训练/微调模型参数或设计精细提示(即,快速工程师)。在prompt engineer中,需要将有价值的信息写入提示符中,以增强模型功能或释放现有的LLM功能。在智能体时代,模型能力的获取主要通过三种策略实现:(1)模型微调,(2)即时工程,(3)设计合理的智能体进化机制(我们称之为机制工程)。机制工程是一个广泛的概念,涉及开发专门的模块,引入新的工作规则和其他策略,以提高代理的能力。为了清楚地理解模型能力获取策略上的这种转变,我们在图4中对它们进行了说明。在此基础上,介绍了Agent能力获取的激励工程和机制工程。

  • 提示工程

由于具有很强的语言理解能力,人们可以使用自然语言直接与LLMS进行交互。这引入了一种新的增强代理能力的策略,即可以使用自然语言描述所需的能力,然后使用它作为提示,以影响LLM的行动。

  • 机械工程。

与模型微调和快速工程不同,机制工程是一种独特的增强Agent能力的策略。在下文中,我们介绍了几种有代表性的机械工程方法。

(1)试错法
在这种方法中,代理首先执行一个动作,然后调用一个预定义的评论家来判断动作。如果行动被认为是不满意的,那么代理人的反应,包括批评者的反馈。在RAH [88]中,代理在推荐系统中充当用户助手。代理的关键角色之一是模拟人类行为并代表用户生成响应。为了实现这一目标,智能体首先生成预测响应,然后将其与真实的人类反馈进行比较。如果预测的响应和真实的人的反馈不同,评论家产生失败的信息,这是随后纳入代理的下一个动作。在DEPS [33]中,智能体首先设计一个计划来完成给定的任务。在计划执行过程中,如果操作失败,解释器将生成解释失败原因的具体细节。然后,代理人将这些信息合并起来重新设计计划。

(2)Crowd-sourcing
在[91]中,作者设计了一种辩论机制,利用群体的智慧来增强代理能力。开始,不同的代理对给定的问题提供单独的响应。如果他们的答复不一致,他们将被提示纳入其他代理的解决方案,并提供最新的答复。这个迭代过程一直持续到达成最终的共识答案。在这种方法中,每个代理的能力是通过理解和合并其他代理的意见。

3)经验积累。
在GITM [16]中,智能体一开始并不知道如何解决任务。然后,它进行探索,一旦成功完成任务,该任务中使用的动作将存储到代理内存中。在未来,如果智能体遇到类似的任务,则提取相关记忆以完成当前任务。在这个过程中,Agent能力的提高来自于专门设计的内存积累和利用机制。

(4)自我驱动的进化。
在LMA 3 [94]中,智能体可以自主地为自己设定目标,并通过探索环境和从奖励函数接收反馈来逐步提高其能力。遵循这种机制,智能体可以根据自己的偏好获取知识和发展能力。

  • alipay_img
  • wechat_img
我是小明,喜欢数学和编程
最后更新于 2024-05-07