[论文精读]Agent综述—— A survey on large language model based autonomous agents

A survey on large language model based autonomous agents


⏲️年份: 2024

👀期刊: Frontiers of Computer Science

🌱影响因子:3.4

📚数字对象唯一标识符DOl: 10.1007/s11704-024-40231-1

🤵作者: Wang Lei,Ma Chen,Feng Xueyang,Zhang Zeyu,Yang Hao,Zhang Jingsen,Chen Zhiyuan,Tang Jiakai,Chen Xu,Lin Yankai,Zhao Wayne Xin,Wei Zhewei,Wen Jirong

🏪单位:中国人民大学高瓴人工智能学院


👁️‍🗨️摘要:

长期以来,自主agent一直是学术和行业社区的研究重点。先前的研究通常集中于在孤立环境中用有限的知识训练agent,这与人类的学习过程显着不同,并使agent难以实现类似人类的决策。最近,通过获取大量的Web知识,大型语言模型(LLM)在人类水平的智能中已经显示出潜力,从而导致对基于LLM的自主agent的研究激增。

在本文中,我们对这些研究进行了全面的调查,从整体的角度对基于LLM的自主agent进行了系统评价。我们首先讨论基于LLM的自主agent的构建,提出了一个统一的框架,该框架涵盖了以前的许多工作。然后,我们概述了基于LLM的自主agent在社会科学,自然科学和工程中的不同应用。最后,我们深入研究了通常用于基于LLM的自主agent的评估策略。根据先前的研究,我们还提出了该领域的几个挑战和未来方向。

👀引言:

长期以来,自主agent被认为是实现人工通用智能(AGI)的有前途的方法,该方法有望通过自我指导的计划和行动来完成任务。在先前的研究中,agent基于简单和启发式的策略函数,并在孤立和受限的环境中学习。这种假设与人类的学习过程大不相同,因为人类的思想非常复杂,并且个人可以从更广泛的环境中学习。由于这些差距,从先前的研究中获得的agent通常远非复制人级决策过程,尤其是在不受约束的开放域环境中。

近年来,大型语言模型(LLMS)取得了显着的成功,表明在获得类似人类的智力方面具有巨大的潜力。此能力是在全面的培训数据集和大量模型参数中产生的。在这种能力的基础上,越来越多的研究领域采用了LLM作为中央控制者来构建自主agent以获得类似人类的决策能力。

与强化学习相比,基于LLM的agent具有更全面的内部世界知识,即使没有对特定领域数据进行训练,也可以促进更明智的agent行动。此外,基于LLM的agent可以提供自然语言界面与人相互作用,这更灵活和更具解释性。

沿着这个方向,研究人员开发了许多有希望的模型(有关该领域的概述,请参见图1),其中关键思想是为LLMS配备关键的人类能力,例如记忆和计划,使它们像人类一样行事,并有效地完成各种任务。以前,这些模型是独立提出的,较少在整体上总结和比较。但我们认为,对这个快速发展的领域的系统摘要对于全面理解它并有益于激发未来的研究具有重要意义。

在本文中,我们对基于LLM的自主agent领域进行了全面的调查。具体而言,我们对三个方面进行组织调查,包括基于LLM的自主agent的构建,应用和评估。

对于agent构建,我们将重点放在两个问题上,即(1)如何设计agent体系结构以更好地利用LLM,以及(2)如何激发和增强agent能力完成不同任务。从直觉上讲,第一个问题旨在为agent构建硬件基础,而第二个问题则是为agent提供软件资源。对于第一个问题,我们提出一个统一的agent框架,该框架可以涵盖以前的大多数研究。对于第二个问题,我们提供了有关agent能力获取的常用策略的总结。除了讨论agent构造外,我们还提供了基于LLM的自主agent在社会科学,自然科学和工程中的应用的系统概述最后,我们深入研究了评估基于LLM的自主agent的策略,重点是主观和客观策略。

总而言之,这项调查进行了系统的审查,并在基于LLM的自主agent的新兴领域中为现有研究建立了全面的分类法。我们的重点包括三个主要领域:agent的构建,应用和评估方法。从以前的大量研究中汲取灵感,我们确定了该领域的各种挑战,并讨论了潜在的未来方向。我们希望我们的调查可以为基于LLM的自主agent提供全面的背景知识,并鼓励进一步的开创性研究。

🌟基于LLM的自主agent构建:

基于LLM的自主agent将通过利用LLM类似人类的能力来有效执行各种任务。为了实现这一目标,有两个重要方面,即(1)应该设计哪些体系结构以更好地使用LLM(2)基于设计的体系结构,如何使agent获得完成特定任务的能力。在体系结构设计的背景下,我们以一个全面的统一框架的形式贡献了现有研究的系统综合。至于第二个方面,我们根据是否微调LLM来总结agent能力获取的策略。当将基于LLM的自主agent与传统机器学习进行比较时,**设计agent体系结构类似于确定网络结构,而agent能力的采集类似于学习网络参数。**在下文中,我们将更多地详细介绍这两个方面。

Agent结构设计

LLMS的最新进展表明了以提问(QA)形式完成各种任务的巨大潜力。但是,建立自主agent远不止提问,因为他们需要履行特定的角色、自主感知并从环境中学习,以像人类一样发展自己。为了弥合传统LLM和自主agent之间的差距,一个关键的方面是设计合理的agent体系结构,以帮助LLMS最大化其能力。沿着这个方向,以前的工作开发了许多模块来增强LLMS。在本节中,我们提出了一个统一的框架来汇总这些模块。在特定的情况下,图2说明了我们框架的总体结构,该结构由档案模块,记忆模块,规划模块和动作模块组成。档案模块的目的是确定agent的角色。记忆和计划模块将agent放置在动态环境中,使其能够回忆过去的行为并计划未来的行动。操作模块负责将agent的决策转化为特定的输出。在这些模块中,分析模块会影响记忆和计划模块,这三个模块会共同影响动作模块。在下文中,我们详细介绍了这些模块。
在这里插入图片描述

档案模块

自主agent通常通过假定特定的角色(例如编码人员,教师和领域专家)执行任务。分析模块旨在指示agent角色的概况,通常将其写入影响LLM行为的提示中。agent概况通常包含基本信息,例如年龄,性别和职业[20],以及心理学信息,反映了agent的个性以及社会信息,详细介绍了agent之间的关系[21]。agent个人资料信息的选择在很大程度上取决于特定的应用程序方案。例如,如果该应用程序旨在研究人类的认知过程,那么心理学信息将变得关键。在确定了agent的个人资料信息类型之后,下一个重要的问题是为agent创建具体的个人资料。现有文献通常采用以下三种策略。

手工制作方法:这种方法通过人工手动指定的方式来给agent设定其个人资料信息。例如,如果想设计具有不同性格的agent,可以使用“你是一个外向的人”或“你是内向的人”来介绍agent。手工方法已经在许多先前的工作中被用来表示agent的档案。例如,Generative agents通过诸如姓名、目标以及与其他agent的关系等信息来描述agent。MetaGPT[23]、ChatDev[18]和Self-collaboration[24]预先定义了软件开发中的各种角色及其相应的职责,手动为每个agent分配不同的档案,以促进协作。PTLLM[25]旨在探索和量化大语言模型生成的文本中所表现出的个性特征。这种方法通过使用个性评估工具(如IPIP-NEO[26]和BFI[27])手动定义各种agent角色,指导大语言模型生成多样化的回应。[28]通过手动提示大语言模型扮演不同的角色(如政治家、记者和商人)来研究大语言模型输出的毒性。总的来说,手工方法非常灵活,因为人们可以为agent分配任何档案信息。然而,它也可能非常耗时,特别是在处理大量agent时。

大语言模型生成方法:在这种方法中,agent的档案是基于大语言模型自动生成的。通常,它首先表明档案生成规则,阐明目标人群中的agent档案的构成和属性。然后,可以选择指定几个种子agent档案作为少量样本。最后,利用大语言模型生成所有agent的档案。例如,RecAgent[21]首先通过手动构建少量agent的背景(如年龄、性别、个人特质和电影偏好)来创建种子档案。然后,它利用ChatGPT根据种子信息生成更多的agent档案。当agent数量较大时,大语言模型生成方法可以节省大量时间,但它可能对生成的档案缺乏精确控制。

数据集对齐方法:在这种方法中,agent的档案是从现实世界的数据集中获得的。通常,可以首先将数据集中关于真实人类的信息整理成自然语言提示,然后利用这些信息来描述agent。例如,在[29]中,作者根据美国国家选举研究(ANES)参与者的人口统计背景(如种族/民族、性别、年龄和居住州)为GPT-3分配角色。他们随后研究GPT-3是否能够产生与真实人类相似的结果。数据集对齐方法能够准确捕捉真实人群的属性,从而使agent的行为更具意义,并反映现实世界的场景。

注:虽然大多数先前的工作独立地利用上述档案生成策略,但我们认为将它们结合起来可能会带来额外的好处。例如,为了通过agent模拟预测社会发展,可以利用现实世界的数据集为一部分agent构建档案,从而准确反映当前的社会状况。随后,可以手动为其他agent分配现实中不存在但可能在未来出现的角色,从而实现对未来社会发展的预测。除了这个例子之外,人们还可以灵活地结合其他策略。档案模块是agent设计的基础,对agent的记忆、规划和行动程序有着重大影响。

记忆模块

记忆模块在agent架构设计中发挥着非常重要的作用。它存储从环境中感知到的信息,并利用记录的记忆来促进未来的行动。记忆模块可以帮助agent积累经验,自我进化,并以更一致、合理和有效的方式行动。本节对记忆模块进行了全面概述,重点关注其结构、格式和操作。

记忆结构

基于大语言模型的自主agent通常借鉴认知科学研究中关于人类记忆过程的原则和机制。人类记忆遵循从感知记忆(记录感知输入)到短期记忆(暂时保持信息)再到长期记忆(在较长时间内巩固信息)的一般进程。在设计agent记忆结构时,研究人员从这些人类记忆的方面汲取灵感。具体来说,短期记忆类似于受Transformer架构限制的上下文窗口内的输入信息。长期记忆类似于agent可以按需快速查询和检索的外部向量存储。

接下来,我们介绍两种基于短期和长期记忆的常用记忆结构。

  • 统一记忆:这种结构仅模拟人类的短期记忆,通常通过上下文学习实现,记忆信息直接写入提示符。例如,RLP[30]是一个对话agent,它为说话者和倾听者维护内部状态。在每轮对话中,这些状态作为大语言模型的提示符,充当agent的短期记忆。SayPlan[31]是一个专门用于任务规划的具身agent。在这个agent中,场景图和环境反馈作为agent的短期记忆,指导其行动。CALYPSO[32]是一个为《地下城与龙》游戏设计的agent,可以协助地下城主创作和叙述故事。它的短期记忆建立在场景描述、怪物信息和之前的总结之上。DEPS[33]也是一个游戏agent,但它是为了《我的世界》开发的。该agent最初生成任务计划,然后利用这些计划提示大语言模型,后者进而生成完成任务的动作。这些计划可以被视为agent的短期记忆。在实践中,实现短期记忆相对简单,可以增强agent感知最近或与上下文相关的行动和观察的能力。然而,由于大语言模型上下文窗口的限制,很难将所有记忆放入提示符中,这可能会降低agent的性能。这种方法对大语言模型的上下文窗口长度和处理长上下文的能力要求很高。因此,许多研究人员转向混合记忆来缓解这一问题。然而,大语言模型有限的上下文窗口限制了将全面记忆纳入提示符的能力,这可能会损害agent的性能。这一挑战需要大语言模型具备更大的上下文窗口和处理扩展上下文的能力。因此,许多研究人员转向混合记忆系统以缓解这一问题。
  • 混合记忆:这种结构明确模拟人类的短期和长期记忆。短期记忆临时缓冲最近的感知,而长期记忆则随着时间的推移巩固重要信息。例如,Generative Agent[20]采用混合记忆结构来促进agent行为。短期记忆包含有关agent当前情境的上下文信息,而长期记忆存储agent过去的行动和想法,可以根据当前事件进行检索。AgentSims[34]也实现了混合记忆架构。提示符中提供的信息可以被视为短期记忆。为了增强记忆的存储能力,作者提出了一种利用向量数据库的长期记忆系统,便于高效存储和检索。具体来说,agent的日常记忆被编码为嵌入向量并存储在向量数据库中。如果agent需要回忆其之前的记忆,长期记忆系统将利用嵌入向量的相似性检索相关信息。这一过程可以提高agent行为的一致性。在GITM[16]中,短期记忆存储当前轨迹,而长期记忆保存从成功之前的轨迹中总结的参考计划。长期记忆提供稳定的知识,而短期记忆允许灵活规划。Reflexion[12]利用短期滑动窗口捕捉最近的反馈,并结合持久的长期存储以保留浓缩的见解。这种组合允许利用详细的即时体验和高级别的抽象。SCM[35]有选择地激活最相关的长期知识,与短期记忆相结合,以进行复杂上下文对话中的推理。SimplyRetrieve[36]利用用户查询作为短期记忆,并使用外部知识库存储长期记忆。这种设计提高了模型的准确性,同时保证了用户隐私。MemorySandbox[37]通过利用二维画布存储记忆对象来实现长期和短期记忆,这些记忆对象可以在各种对话中访问。用户可以在同一个画布上与不同的agent创建多个对话,通过简单的拖放界面共享记忆对象。在实践中,整合短期和长期记忆可以增强agent在复杂环境中完成任务所需的能力,包括进行长距离推理和积累宝贵经验。

注:细心的读者可能会发现,还可能存在另一种记忆结构,即仅基于长期记忆。然而,我们发现这种记忆类型很少在文献中被记录。我们的推测是,agent总是处于连续且动态的环境中,连续的行动显示出高度的相关性。因此,捕捉短期记忆非常重要,通常不能被忽视。

记忆格式

除了记忆结构之外,分析记忆模块的另一个方面是记忆存储介质的格式,例如自然语言记忆或嵌入记忆。不同的记忆格式具有各自的优势,适用于不同的应用场景。接下来,我们介绍几种具有代表性的记忆格式。

  • 自然语言:在这种格式中,记忆信息(如agent的行为和观察)直接使用原始自然语言进行描述。这种格式具有几个优点。首先,记忆信息可以以灵活且易于理解的方式表达。此外,它保留了丰富的语义信息,可以为指导agent行为提供全面的信号。在先前的研究中,Reflexion[12]在滑动窗口中以自然语言存储经验反馈。Voyager[38]使用自然语言描述在《我的世界》游戏中表示技能,这些描述直接存储在记忆中。
  • 嵌入向量:在这种格式中,记忆信息被编码成嵌入向量,这可以提高记忆检索和读取的效率。例如,MemoryBank[39]将每个记忆片段编码成一个嵌入向量,从而创建了一个可供检索的索引语料库。[16]将参考计划表示为嵌入向量,以便于匹配和重用。此外,ChatDev[18]将对话历史编码成向量以便检索。
  • 数据库:在这种格式中,记忆信息存储在数据库中,使agent能够高效且全面地操作记忆。例如,ChatDB[40]使用数据库作为符号记忆模块。agent可以利用SQL语句精确地添加、删除和修改记忆信息。在DB-GPT[41]中,记忆模块是基于数据库构建的。为了更直观地操作记忆信息,agent被微调以理解和执行SQL查询,使它们能够直接使用自然语言与数据库进行交互。
  • 结构化列表:在这种格式中,记忆信息被组织成列表,记忆的语义可以以高效且简洁的方式传达。例如,GITM[16]在层次树结构中存储子目标的动作列表。层次结构明确地捕捉了目标与相应计划之间的关系。RETLLM[42]最初将自然语言句子转换为三元组短语,然后将它们存储在记忆中。

注:这里我们仅展示了几种具有代表性的记忆格式,但需要注意的是,还有许多未被涵盖的格式,例如[38]中使用的编程代码。此外,需要强调的是,这些格式并非相互排斥;许多模型结合了多种格式,以同时利用它们各自的优势。一个显著的例子是GITM[16]的记忆模块,它采用了键值列表结构。在这种结构中,键由嵌入向量表示,而值由原始自然语言组成。使用嵌入向量可以高效地检索记忆记录。通过使用自然语言,记忆内容变得高度全面,使agent能够采取更明智的行动。

以上,我们主要讨论了记忆模块的内部设计。接下来,我们将关注记忆操作,这些操作用于与外部环境进行交互。

记忆操作

记忆模块允许agent通过与环境互动来获取、积累和利用重要知识。agent与环境之间的互动通过三个关键的记忆操作实现:记忆读取、记忆写入和记忆反思。接下来,我们将详细介绍这些操作。

  • 记忆读取:记忆读取的目标是从记忆中提取有意义的信息以增强agent的行动。例如,利用之前成功的行动来实现类似的目标[16]。记忆读取的关键在于如何从历史行动中提取有价值的信息。通常,有三个常用的标准用于信息提取,即最近性、相关性和重要性[20]。越近、越相关、越重要的记忆越有可能被提取。从现有文献中,我们总结出以下用于记忆信息提取的公式:
    m ∗ = a r g m i n m ∈ M ​ α s r e c ​ ( q , m ) + β s r e l ​ ( q , m ) + γ s i m p ​ ( m ) m^∗={argmin}_{m∈M}​αs^{rec}​(q,m)+βs^{rel}​(q,m)+γs^{imp}​(m) m=argminmMαsrec(q,m)+βsrel(q,m)+γsimp(m)
    其中,q 是查询,例如agent需要处理的任务或agent所处的上下文。M 是所有记忆的集合。 s r e c ​ ( ⋅ ) s^{rec}​(⋅) srec() s r e l ​ ( ⋅ ) s^{rel}​(⋅) srel() s i m p ​ ( ⋅ ) s^{imp}​(⋅) simp() 是用于衡量记忆的最近性、相关性和重要性的评分函数。这些评分函数可以使用各种方法实现,例如, s r e c ​ ( ⋅ ) s^{rec}​(⋅) srec() 可以基于局部敏感哈希(LSH)、近似最近邻(ANNOY)、分层导航小世界(HNSW)、Facebook AI Similarity Search(FAISS)等实现。需要注意的是, s i m p ​ ( ⋅ ) s^{imp}​(⋅) simp() 衡量的是记忆本身的重要性,只反映记忆本身的特性,因此与查询 q 无关。记忆的重要性判断可以根据多个因素和上下文来确定,例如**记忆内容的固有特性、记忆的使用历史、记忆的长期价值、记忆的内容和上下文以及专家评估或反馈等。**αβγ 是平衡参数。通过为它们分配不同的值,可以获得不同的记忆读取策略。例如,通过设置 α=γ=0,许多研究[16,30,38,42]仅考虑相关性评分用于记忆读取。通过设置 α=β=γ=1.0,[20] 平等地权衡上述三个指标以从记忆中提取信息。

  • 记忆写入:记忆写入的目的是将感知到的环境信息存储在记忆中。在记忆中存储有价值的信息为未来检索信息丰富的记忆提供了基础,使agent能够更高效、更理性地行动。在记忆写入过程中,需要谨慎处理两个潜在问题。一方面,必须解决如何存储与现有记忆相似的信息(即记忆重复)的问题。另一方面,当记忆达到存储限制时,需要考虑如何删除信息(即记忆溢出)。

    • 记忆重复:为了整合相似信息,人们开发了各种方法来整合新旧记录。例如,在[7]中,与同一子目标相关的成功行动序列存储在一个列表中。一旦列表的大小达到 N(=5),所有序列都通过大语言模型(LLM)压缩成一个统一的计划解决方案。记忆中的原始序列被新生成的序列替换。增强型大语言模型(Augmented LLM)[43] 通过计数累积聚合重复信息,避免冗余存储。

    • 记忆溢出:为了在记忆已满时写入信息,人们设计了不同的方法来删除现有信息,以继续记忆过程。例如,在 ChatDB[40] 中,可以根据用户命令显式删除记忆。RET-LLM[42] 使用固定大小的缓冲区作为记忆,以先进先出(FIFO)的方式覆盖最旧的条目。

  • 记忆反思:记忆反思模拟了人类见证和评估自己的认知、情感和行为过程的能力。当应用于agent时,其目标是为agent提供独立总结和推断更抽象、复杂和高级信息的能力。更具体地说,在Generative Agent[20]中,agent能够将其存储在记忆中的过去经验总结为更广泛、更抽象的见解。首先,agent根据其最近的记忆生成三个关键问题。然后,这些问题用于查询记忆以获取相关信息。在此基础上,agent生成五个见解,这些见解反映了agent的高级想法。例如,低级记忆“Klaus Mueller 正在撰写研究论文”、“Klaus Mueller 正在与图书管理员互动以推进他的研究”和“Klaus Mueller 正在与 Ayesha Khan 讨论他的研究”可以引发高级见解“Klaus Mueller 致力于他的研究”。此外,反思过程可以分层进行,即可以根据现有的见解生成见解。在 GITM[16] 中,成功实现子目标的行动存储在一个列表中。当列表包含超过五个元素时,agent将它们总结为一个共同且抽象的模式,并替换所有元素。在 ExpeL[44] 中,引入了两种方法供agent获取反思。首先,agent比较同一任务中的成功或失败轨迹。其次,agent从一系列成功轨迹中学习以获得经验。

传统大语言模型与agent之间的显著区别在于,后者必须具备在动态环境中学习和完成任务的能力。如果我们把记忆模块视为负责管理agent过去行为的模块,那么拥有另一个重要的模块来帮助agent规划未来的行动就变得至关重要了。接下来,我们将介绍研究人员如何设计规划模块。

规划模块

面对复杂任务时,人类倾向于将其分解为更简单的子任务,并逐一解决。规划模块旨在赋予agent这种人类能力,使其行为更加合理、强大和可靠。具体来说,我们根据agent是否能够在规划过程中接收反馈,对现有研究进行总结,详细内容如下:

  • 无反馈规划:在这种方法中,agent在采取行动后不会接收到能够影响其未来行为的反馈。以下是几种具有代表性的策略:

    • 单路径推理:在这种策略中,最终任务被分解为几个中间步骤。这些步骤以级联方式连接,每个步骤只导向一个后续步骤。大语言模型按照这些步骤实现最终目标。具体来说,思维链(Chain of Thought, CoT)[45]提出了将解决复杂问题的推理步骤输入到提示符中。这些步骤作为示例,启发大语言模型以逐步的方式进行规划和行动。在这种方法中,计划是基于提示符中的示例启发而创建的。零样本思维链(Zero-shot-CoT)[46]通过提示大语言模型使用诸如“逐步思考”这样的触发句子来生成任务推理过程。与CoT不同,这种方法没有将推理步骤作为示例包含在提示符中。重新提示(Re-Prompting)[47]涉及在生成计划之前检查每个步骤是否满足必要的先决条件。如果某个步骤未能满足先决条件,它会引入一个先决条件错误消息,并提示大语言模型重新生成计划。ReWOO[48]引入了一种将计划与外部观察分离的范式,agent首先独立生成计划并获得观察结果,然后将它们结合起来得出最终结果。HuggingGPT[13]首先将任务分解为许多子目标,然后基于Huggingface解决每一个子目标。CoT和Zero-shot-CoT以一次性的方式输出所有推理步骤,而ReWOO和HuggingGPT则通过多次访问大语言模型来产生结果。

    • 多路径推理:在这种策略中,生成最终计划的推理步骤被组织成树状结构。每个中间步骤可能有多个后续步骤。这种方法类似于人类思维,因为个体在每个推理步骤中可能有多种选择。具体来说,自一致性思维链(Self-consistent CoT, CoT-SC)[49]认为每个复杂问题都有多种思维方式来推导出最终答案。因此,它首先使用CoT生成各种推理路径和相应的答案。随后,选择出现频率最高的答案作为最终输出。思维树(Tree of Thoughts, ToT)[50]旨在使用树状推理结构生成计划。在这种方法中,树中的每个节点代表一个“想法”,对应一个中间推理步骤。这些中间步骤的选择基于大语言模型的评估。最终计划是使用广度优先搜索(Breadth-First Search, BFS)或深度优先搜索(Depth-First Search, DFS)策略生成的。CoT-SC一次性生成所有计划步骤,ToT需要为每个推理步骤查询大语言模型。在RecMind[51]中,作者设计了一种自我启发机制,在规划过程中利用被丢弃的历史信息来推导新的推理步骤。在GoT[52]中,作者将ToT中的树状推理结构扩展到图结构,从而产生了更强大的提示策略。在AoT[53]中,作者设计了一种新方法,通过在提示符中加入算法示例来增强大语言模型的推理过程。值得注意的是,这种方法只需要查询大语言模型一次或几次。在[54]中,大语言模型被用作零样本规划器。在每个规划步骤中,他们首先生成多个可能的下一步,然后根据它们与可接受动作的距离来确定最终的一个。[55]通过在提示符中加入与查询相似的示例,进一步改进了[54]。RAP[56]构建了一个世界模型,基于蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS)模拟不同计划的潜在收益,然后通过聚合多次MCTS迭代来生成最终计划。为了增强理解,我们在图3中提供了一个插图,比较了单路径和多路径推理的策略。
      在这里插入图片描述

    • 外部规划器:尽管大语言模型在零样本规划方面表现出强大的能力,但为特定领域的问题有效生成计划仍然极具挑战性。为了应对这一挑战,研究人员转向外部规划器。这些工具已经得到了很好的发展,并采用高效的搜索算法来快速识别正确甚至最优的计划。具体来说,LLM+P[57]首先将任务描述转换为形式化的规划领域定义语言(Planning Domain Definition Languages, PDDL),然后使用外部规划器处理PDDL。最后,由大语言模型将生成的结果转换回自然语言。类似地,LLM-DP[58]利用大语言模型将观察结果、当前世界状态和目标转换为PDDL,随后将转换后的数据传递给外部规划器,后者高效地确定最终的动作序列。CO-LLM[22]表明大语言模型擅长生成高层计划,但在低层控制方面存在困难。为了克服这一限制,采用了一个启发式设计的外部低层规划器,根据高层计划有效地执行动作。

  • 带反馈的规划:在许多现实场景中,agent需要进行长期规划以解决复杂任务。面对这些任务时,上述无反馈的规划模块可能由于以下原因效果不佳:首先,从一开始就直接制定完美的计划极为困难,因为它需要考虑各种复杂的前提条件。因此,单纯遵循初始计划往往会导致失败。此外,计划的执行可能会受到不可预测的转换动态的阻碍,使初始计划无法执行。同时,当我们观察人类如何解决复杂任务时,我们发现个人可能会根据外部反馈反复制定和修订计划。为了模拟这种人类能力,研究人员设计了许多规划模块,其中agent可以在采取行动后接收反馈。反馈可以从环境、人类和模型中获得,具体如下。

    • 环境反馈:这种反馈是从客观世界或虚拟环境中获得的。例如,它可能是游戏的任务完成信号,或者是agent采取行动后的观察结果。具体来说,ReAct[59]提出了使用思维-行动-观察三元组构建提示符。思维部分旨在促进高级推理和规划,以指导agent行为。行动代表agent采取的具体行动。观察对应于行动的结果,通过外部反馈获得,例如搜索引擎结果。下一个思维受到之前观察的影响,这使得生成的计划更具环境适应性。Voyager[38]通过结合三种环境反馈来制定计划,包括程序执行的中间进展、执行错误和自我验证结果。这些信号可以帮助agent为下一步行动制定更好的计划。与Voyager类似,Ghost[16]也将反馈纳入推理和行动过程中。这种反馈包括环境状态以及每次执行行动的成功和失败信息。SayPlan[31]利用来自场景图模拟器的环境反馈来验证和提炼其战略制定。该模拟器擅长识别agent行动后的结果和状态转换,帮助SayPlan迭代校准其策略,直至确定可行的计划。在DEPS[33]中,作者认为仅提供任务完成的信息通常不足以纠正规划错误。因此,他们提出告知agent任务失败的详细原因,使他们能够更有效地修订计划。LLM-Planner[60]引入了一种基于现实的重新规划算法,当在任务完成过程中遇到对象不匹配和无法实现的计划时,动态更新由LLM生成的计划。Inner Monologue[61]在agent采取行动后向其提供三种反馈:(1)任务是否成功完成,(2)被动场景描述,(3)主动场景描述。前两者由环境生成,使agent行动更加合理。
    • 人类反馈:除了从环境中获得反馈外,直接与人类互动也是增强agent规划能力的非常直观的策略。人类反馈是一种主观信号。它可以有效地使agent与人类价值观和偏好保持一致,也有助于缓解幻觉问题。在Inner Monologue[61]中,agent旨在在3D视觉环境中执行高级自然语言指令。它被赋予了主动征求人类对场景的描述这一反馈能力。然后,agent将人类反馈纳入其提示符中,实现更明智的规划和推理。在上述案例中,我们可以看到,不同类型的反馈可以结合使用以增强agent的规划能力。例如,Inner Monologue[61]收集了环境和人类反馈,以促进agent的规划。
    • 模型反馈:除了上述的环境和人类反馈这些外部信号之外,研究人员还研究了如何利用agent自身产生的内部反馈。这种反馈通常基于预训练模型生成。具体来说,[62]提出了一个自我完善机制。该机制包括三个关键组成部分:输出、反馈和完善。首先,agent生成一个输出。然后,它利用LLM对输出进行反馈,并提供如何完善它的指导。最后,通过反馈和完善来改进输出。这个输出-反馈-完善过程会一直迭代,直到达到某些期望的条件。SelfCheck[63]允许agent检查和评估其在各个阶段生成的推理步骤。然后,他们可以通过比较结果来纠正任何错误。InterAct[64]使用不同的语言模型(如ChatGPT和InstructGPT)作为辅助角色,如检查者和排序者,帮助主要的语言模型避免错误和低效的行动。ChatCoT[65]利用模型反馈来提高其推理过程的质量。模型反馈由一个监控agent推理步骤的评估模块生成。Reflexion[12]旨在通过详细的口头反馈增强agent的规划能力。在这个模型中,agent首先根据其记忆产生一个行动,然后,评估者以agent轨迹为输入生成反馈。与以往研究不同,以往的反馈是作为一个标量值给出的,而这个模型利用LLM提供更详细的口头反馈,为agent计划提供更全面的支持。

注:综上所述,无反馈的规划模块的实现相对简单。然而,它主要用于只需要少量推理步骤的简单任务。相反,带反馈的规划策略需要更精心的设计来处理反馈。尽管如此,它在处理需要长距离推理的复杂任务时要强大得多。

行动模块

行动模块负责将agent的决策转化为具体的结果。该模块位于最下游的位置,并直接与环境交互。它受到档案、记忆和规划模块的影响。本节从四个角度介绍行动模块:(1) 行动目标:行动的预期结果是什么?(2) 行动生成:行动是如何产生的?(3) 行动空间:可用的行动有哪些?(4) 行动影响:行动的后果是什么?在这些角度中,前两个关注行动之前的方面(“行动前”方面),第三个关注行动本身(“行动中”方面),第四个强调行动的影响(“行动后”方面)。

  • 行动目标:agent可以以各种目标执行行动。这里,我们介绍几个具有代表性的例子:

    • 任务完成:在这种情况下,agent的行动旨在完成特定任务,例如在《我的世界》中制作铁镐[38]或在软件开发中完成一个功能[18]。这些行动通常有明确的目标,每个行动都对最终任务的完成做出贡献。以这种目标为导向的行动在现有文献中非常常见。

    • 沟通:在这种情况下,行动是为了与其他agent或真实人类沟通,以共享信息或进行协作。例如,在ChatDev[18]中,agent之间可能会相互沟通,共同完成软件开发任务。在Inner Monologue[61]中,agent积极与人类沟通,并根据人类反馈调整其行动策略。

    • 环境探索:在这个例子中,agent旨在探索不熟悉的环境,以扩大其感知能力,并在探索和利用之间取得平衡。例如,在Voyager[38]中,agent可能会在其任务完成过程中探索未知技能,并通过试错根据环境反馈不断优化技能执行代码。

  • 行动生成:普通大语言模型的模型输入和输出是直接相关的,但agent可以通过不同的策略和来源采取行动。接下来,我们介绍两种常用的行动生成策略:

    • 通过记忆回忆采取行动:在这种策略中,行动是通过从agent记忆中提取信息来生成的。任务和提取的记忆被用作提示符,以触发agent行动。例如,在Generative Agents[20]中,agent维护一个记忆流,在采取每个行动之前,它从记忆流中检索最近的、相关的和重要的信息来指导agent行动。在GITM[16]中,为了实现一个低级子目标,agent查询其记忆,以确定是否有与任务相关的成功经验。如果之前完成过类似任务,agent将调用之前成功的行动来直接处理当前任务。在协作agent(如ChatDev[18]和MetaGPT[23])中,不同的agent可能会相互沟通。在这个过程中,对话中的对话历史被存储在agent的记忆中。agent生成的每个话语都受到其记忆的影响。

    • 通过遵循计划采取行动:在这种策略中,agent根据其预先生成的计划采取行动。例如,在DEPS[33]中,对于给定的任务,agent首先制定行动计划。如果没有信号表明计划失败,agent将严格遵循这些计划。在GITM[16]中,agent通过将任务分解为许多子目标来制定高层计划。基于这些计划,agent依次采取行动解决每个子目标,以完成最终任务。

  • 行动空间:行动空间是指agent可以执行的可能行动的集合。一般来说,我们可以将这些行动大致分为两类:(1)外部工具和(2)大语言模型的内部知识。接下来,我们更详细地介绍这些行动。

    • 外部工具:尽管大语言模型已被证明在完成大量任务方面是有效的,但它们可能不适用于需要全面专业知识的领域。此外,大语言模型也可能遇到幻觉问题,这些问题很难通过它们自己解决。为了缓解上述问题,agent被赋予了调用外部工具以执行行动的能力。接下来,我们介绍在文献中被利用的几种具有代表性的工具。
  • API:利用外部API来补充和扩展行动空间是近年来流行的一种范式。例如,HuggingGPT[13]利用HuggingFace上的模型来完成复杂的用户任务。[66,67]提出在响应用户请求时自动生成查询,以从外部网页中提取相关内容。TPTU[67]与Python解释器和LaTeX编译器接口进行互动以执行复杂的计算,如平方根、阶乘和矩阵运算。另一种类型的API是基于自然语言或代码输入,可以直接由大语言模型调用的API。例如,Gorilla[68]是一个经过微调的大语言模型,旨在为API调用生成准确的输入参数,并减轻在外部API调用过程中出现的幻觉问题。ToolFormer[15]是一个基于大语言模型的工具转换系统,可以根据自然语言指令自动将给定的工具转换为具有不同功能或格式的另一种工具。API-Bank[69]是一个基于大语言模型的API推荐agent,可以自动搜索并为各种编程语言和领域生成适当的API调用。API-Bank还为用户提供了一个交互式界面,方便用户轻松修改和执行生成的API调用。ToolBench[14]是一个基于大语言模型的工具生成系统,可以根据自然语言需求自动设计和实现各种实用工具。ToolBench生成的工具包括计算器、单位转换器、日历、地图、图表等。RestGPT[70]将大语言模型与遵循广泛接受的Web服务开发标准的RESTful API连接起来,使生成的程序更兼容于实际应用。TaskMatrix.AI[71]将大语言模型与数百万API连接起来,以支持任务执行。其核心是一个多模态对话基础模型,该模型与用户互动,理解他们的目标和上下文,然后为特定任务生成可执行代码。所有这些agent都利用外部API作为其工具,并为用户提供交互式界面,方便用户轻松修改和执行生成或转换的工具。

  • 数据库和知识库:整合外部数据库或知识库使agent能够获取特定领域的信息,以生成更现实的行动。例如,ChatDB[40]使用SQL语句查询数据库,以逻辑的方式促进agent的行动。MRKL[72]和OpenAGI[73]整合了各种专家系统,如知识库和规划器,以获取特定领域的信息。

  • 外部模型:以往的研究经常利用外部模型来扩大可能的行动范围。与API相比,外部模型通常处理更复杂的任务。每个外部模型可能对应多个API。例如,为了增强文本检索能力,MemoryBank[39]整合了两个语言模型:一个用于编码输入文本,另一个负责匹配查询语句。ViperGPT[74]首先使用基于语言模型实现的Codex,从文本描述中生成Python代码,然后执行代码以完成给定的任务。TPTU[67]整合了各种大语言模型,以完成广泛的自然语言生成任务,如生成代码、创作歌词等。ChemCrow[75]是一个基于大语言模型的化学agent,旨在执行有机合成、药物发现和材料设计等任务。它利用了十七个专家设计的模型来协助其操作。MM-REACT[76]整合了各种外部模型,如用于视频摘要的VideoBERT、用于图像生成的X-decoder和用于音频处理的SpeechBERT,增强了其在多样化多模态场景中的能力。

*   **内部知识:**除了利用外部工具外,许多agent仅依赖大语言模型的内部知识来指导其行动。现在我们介绍大语言模型的几个关键能力,这些能力可以支持agent合理且有效地行动。
  • 规划能力:以往的研究表明,大语言模型可以作为相当不错的规划器,将复杂任务分解为更简单的任务[45]。即使不将示例纳入提示符中,大语言模型的这种能力也可以被激发[46]。基于大语言模型的规划能力,DEPS[33]开发了一个《我的世界》agent,可以通过子目标分解来解决复杂任务。类似的agent,如GITM[16]和Voyager[38],也严重依赖大语言模型的规划能力来成功完成不同的任务。

  • 对话能力:大语言模型通常能够生成高质量的对话。这种能力使agent能够表现得更像人类。在以往的研究中,许多agent基于大语言模型强大的对话能力采取行动。例如,在ChatDev[18]中,不同的agent可以讨论软件开发过程,甚至可以对自己的行为进行反思。在RLP[30]中,agent可以根据听众对其话语的潜在反馈与听众进行沟通。

  • 常识理解能力:大语言模型的另一个重要能力是它们能够很好地理解人类常识。基于这种能力,许多agent可以模拟人类日常生活并做出类似人类的决策。例如,在Generative Agents中,agent能够准确理解其当前状态、周围环境,并基于基本观察总结高级想法。如果没有大语言模型的常识理解能力,这些行为无法可靠地被模拟。类似的结论也可能适用于RecAgent[21]和S3[77],其中的agent旨在模拟用户推荐和社交行为。

  • 行动影响:行动影响是指行动的后果。实际上,行动影响可以涵盖许多实例,但为了简洁起见,我们只提供几个例子。

    • 改变环境:agent可以通过行动直接改变环境状态,例如移动位置、收集物品和建造建筑物。例如,在GITM[16]和Voyager[38]中,agent在其任务完成过程中通过行动改变了环境。例如,如果agent砍伐了三棵树,那么这些树可能会从环境中消失。
    • 改变内部状态:agent采取的行动也可以改变agent本身,包括更新记忆、制定新计划、获取新知识等。例如,在Generative Agents[20]中,执行行动后系统内的记忆流会更新。SayCan[78]使agent能够采取行动以更新对环境的理解。
    • 触发新行动:在任务完成过程中,一个agent行动可能会被另一个行动触发。例如,Voyager[38]在收集到所有必要资源后开始建造建筑物。

Agent能力获取

在上述部分中,我们主要关注如何设计agent架构,以更好地激发大语言模型的能力,使其能够像人类一样完成任务。架构可以被视为agent的“硬件”。然而,仅依赖硬件是不足以实现有效的任务表现的。这是因为agent可能缺乏必要的特定于任务的能力、技能和经验,这些可以被视为“软件”资源。为了使agent具备这些资源,已经设计了各种策略。一般来说,我们根据是否需要对大语言模型进行微调,将这些策略分为两类。接下来,我们将详细介绍每一类。

通过微调获取能力: 通过基于任务相关的数据集对agent进行微调,是一种提升agent完成任务能力的直接方法。一般来说,这些数据集可以基于人类标注、大语言模型生成或从现实世界应用中收集来构建。接下来,我们将详细介绍这些方法。

  • **使用人类标注数据集进行微调:**使用人类标注的数据集对agent进行微调是一种通用的方法,可以在各种应用场景中使用。在这种方法中,研究人员首先设计标注任务,然后招募工作人员来完成这些任务。

    • 在CoH[79]中,作者的目标是使大语言模型与人类的价值观和偏好保持一致。与其他模型不同,这些模型以简单和符号化的方式利用人类反馈,而这种方法将人类反馈转化为自然语言形式的详细比较信息。大语言模型直接基于这些自然语言数据集进行微调。
    • 在RET-LLM[42]中,为了更好地将自然语言转化为结构化的记忆信息,作者基于人类构建的数据集对大语言模型进行微调,其中每个样本是一个“三元组-自然语言”对。
    • 在WebShop[80]中,作者从亚马逊网站收集了118万件真实产品,并将它们放置在一个模拟的电子商务网站上,该网站包含几个精心设计的人类购物场景。基于这个网站,作者招募了13名工作人员来收集真实人类行为数据集。最后,基于这个数据集,训练了基于启发式规则、模仿学习和强化学习的三种方法。尽管作者没有对基于大语言模型的agent进行微调,但我们认为本文提出的数据集在提升agent在Web购物领域的功能方面具有巨大潜力。
    • 在EduChat[81]中,作者旨在增强大语言模型的教育功能,如开放领域问答、作文评估、苏格拉底式教学和情感支持。他们基于涵盖各种教育场景和任务的人类标注数据集对大语言模型进行微调。这些数据集由心理学专家和一线教师手动评估和策划。
    • SWIFTSAGE[82]是一个受人类认知双重处理理论[83]影响的agent,它在解决复杂的交互式推理任务方面非常有效。在这个agent中,SWIFT模块是一个紧凑的编码器-解码器语言模型,它使用人类标注的数据集进行微调。
  • 使用大语言模型生成的数据集进行微调:构建人类标注的数据集需要招募人员,这可能会耗费大量资金,尤其是在需要标注大量样本时。鉴于大语言模型在许多任务中能够展现出类似人类的能力,一个自然的想法是利用大语言模型来完成标注任务。虽然通过这种方法产生的数据集可能不如人类标注的数据集完美,但它要便宜得多,并且可以用来生成更多的样本。例如,在ToolBench[14]中,为了增强开源大语言模型的工具使用能力,作者从RapidAPI Hub收集了16464个涵盖49个类别的真实API。他们利用这些API提示ChatGPT生成多样化的指令,涵盖了单工具和多工具场景。基于获得的数据集,作者对LLaMA[9]进行了微调,并在工具使用方面取得了显著的性能提升。在[84]中,为了赋予agent社交能力,作者设计了一个沙盒,并部署了多个agent进行互动。对于一个社交问题,中心agent首先生成初始回应。然后,它将回应分享给附近的agent以收集他们的反馈。根据反馈及其详细解释,中心agent修订其初始回应,使其更符合社交规范。在这个过程中,作者收集了大量的agent社交互动数据,然后利用这些数据来微调大语言模型。

  • **使用现实世界的数据集进行微调:**除了基于人类或大语言模型标注构建数据集外,直接使用现实世界的数据集对agent进行微调也是一种常见的策略。例如,在MIND2WEB[85]中,作者收集了大量现实世界的数据集,以增强agent在Web领域的功能。与以往的研究不同,这篇文章提出的数据集涵盖了多样化任务、现实场景和全面的用户交互模式。作者从137个涵盖31个领域的现实世界网站中收集了超过2000个开放式任务。利用这个数据集,作者对大语言模型进行微调,以提升其在Web相关任务上的表现,包括电影发现和票务预订等。在SQL-PALM[86]中,研究人员基于一个跨领域的大型文本到SQL数据集Spider对PaLM-2进行微调。所获得的模型在文本到SQL任务上实现了显著的性能提升。

无需微调的能力获取: 在传统机器学习时代,模型能力主要通过从数据集中学习获得,其中知识被编码到模型参数中。在大语言模型时代,模型能力可以通过训练/微调模型参数或设计巧妙的提示(即提示工程)来获取。在提示工程中,需要将有价值的信息写入提示中,以增强模型能力或释放现有的大语言模型能力。在agent时代,模型能力可以通过三种策略获取:(1) 模型微调,(2) 提示工程,和 (3) 设计适当的agent进化机制(我们称之为机制工程)。机制工程是一个广泛的概念,涉及开发专业模块、引入新的工作规则以及其他策略来增强agent能力。为了清晰地理解这些模型能力获取策略的转变,我们在图4中进行了说明。接下来,我们介绍用于agent能力获取的提示工程和机制工程。

在这里插入图片描述

  • **提示工程:**由于大语言模型具有强大的语言理解能力,人们可以直接使用自然语言与大语言模型进行交互。这引入了一种增强agent能力的新策略,即人们可以使用自然语言描述所需的能力,然后将其作为提示来影响大语言模型的行动。例如,在思维链(CoT)[45]中,为了赋予agent复杂任务推理的能力,作者在提示中以少量样本的形式呈现中间推理步骤。类似的技术也用于自一致性思维链(CoT-SC)[49]和思维树(ToT)[50]。在SocialAGI[30]中,为了增强agent在对话中的自我意识能力,作者用agent对听众和自身的心理状态来提示大语言模型,使生成的话语更具吸引力和适应性。此外,作者还将听众的目标心理状态纳入其中,使agent能够制定更具战略性的计划。Retroformer[87]提出了一个回顾性模型,使agent能够对其过去的失败进行反思。反思被整合到大语言模型的提示中,以指导agent未来的行动。此外,该模型利用强化学习迭代改进回顾性模型,从而优化大语言模型的提示。

  • 机制工程:与模型微调和提示工程不同,机制工程是一种独特的增强agent能力的策略。以下是几种具有代表性的机制工程方法:

    • 试错法:在这种方法中,agent首先执行一个行动,随后调用一个预定义的批评者来评判该行动。如果行动被认为不满意,agent则通过整合批评者的反馈来做出反应。在RAH[88]中,agent作为推荐系统中的用户助手。agent的一个关键角色是模拟人类行为并代表用户生成回应。为了实现这一目标,agent首先生成一个预测回应,然后将其与真实人类反馈进行比较。如果预测回应与真实人类反馈不同,批评者生成失败信息,随后将此信息整合到agent的下一个行动中。在DEPS[33]中,agent首先设计一个计划来完成给定的任务。在计划执行过程中,如果一个行动失败,解释者会生成具体细节来说明失败的原因。agent随后将这些信息整合进去,重新设计计划。在RoCo[89]中,agent在多机器人协作任务中首先为每个机器人提出一个子任务计划和一条3D航点路径。然后通过一系列环境检查(如碰撞检测和逆运动学)来验证计划和航点。如果任何检查失败,反馈将被附加到每个agent的提示中,并开始另一轮对话。agent利用大语言模型讨论并改进他们的计划和航点,直到通过所有验证。在PREFER[90]中,agent首先评估其在一部分数据上的表现。如果它未能解决某些示例,大语言模型将被用来生成反映失败原因的反馈信息。基于此反馈,agent通过迭代改进其行动来提升自身。
    • 众包:在[91]中,作者设计了一种辩论机制,利用众人的智慧来增强agent能力。首先,不同的agent对给定问题提供各自的回应。如果他们的回应不一致,他们将被提示整合其他agent的解决方案并提供更新的回应。这一迭代过程持续进行,直到达成最终共识答案。在这种方法中,每个agent的能力通过理解和整合其他agent的意见而得到提升。
    • 经验积累:在GITM[16]中,agent最初不知道如何解决任务。然后,它进行探索,一旦成功完成任务,用于该任务的行动就被存储到agent记忆中。在未来,如果agent遇到类似任务,相关的记忆将被提取出来以完成当前任务。在这个过程中,改进的agent能力来自于特别设计的记忆积累和利用机制。在Voyager[38]中,作者为agent配备了技能库,库中的每个技能都由可执行代码表示。在agent与环境的互动过程中,每个技能的代码将根据环境反馈和agent自我验证结果进行迭代优化。经过一段时间的执行后,agent可以通过访问技能库高效地完成不同的任务。在AppAgent[92]中,agent被设计成以类似人类用户的方式与应用程序互动,通过自主探索和观察人类演示来学习。在这个过程中,它构建了一个知识库,作为在手机上各种应用程序中执行复杂任务的参考。在MemPrompt[93]中,要求用户用自然语言提供关于agent解决问题意图的反馈,这些反馈存储在记忆中。当agent遇到类似任务时,它尝试检索相关记忆以生成更合适的回应。
    • 自我驱动进化:在LMA3[94]中,agent可以自主为自己设定目标,并通过探索环境和从奖励函数接收反馈来逐步提升自身能力。遵循这一机制,agent可以根据自己的偏好获取知识和发展能力。在SALLM-MS[95]中,通过将先进的大语言模型(如GPT-4)整合到多agent系统中,agent能够适应并执行复杂任务,展现出先进的沟通能力,从而在与环境的互动中实现自我驱动进化。在CLMTWA[96]中,使用大语言模型作为教师,较弱的语言模型作为学生,教师可以生成并用自然语言向学生解释,通过心理理论提高学生的推理能力。教师还可以根据干预的预期效用,为学生个性化解释,并在必要时进行干预。在NLSOM[97]中,不同的agent通过自然语言沟通和协作来解决单个agent无法解决的任务。这可以被视为一种自我驱动学习形式,利用多个agent之间的信息和知识交流。然而,与其他模型(如LMA3、SALLM-MS和CLMTWA)不同,NLSOM允许根据任务需求和其他agent或环境的反馈动态调整agent的角色、任务和关系。

注:在比较上述agent能力获取策略时,我们可以发现,微调方法通过调整模型参数来提升agent能力,能够整合大量的特定于任务的知识,但仅适用于开源的大语言模型。无需微调的方法通常基于巧妙的提示策略或机制工程来增强agent能力。它们可以用于开源和闭源的大语言模型。然而,由于大语言模型输入上下文窗口的限制,它们无法整合过多的任务信息。此外,提示和机制的设计空间极为庞大,这使得找到最优解并非易事。

在上述部分中,我们详细介绍了基于大语言模型的agent的构建,重点关注了架构设计和能力获取这两个方面。我们在表1中展示了现有工作与上述分类法的对应关系。需要注意的是,为了完整性,我们还纳入了几项研究,这些研究虽未明确提及基于大语言模型的agent,但与这一领域密切相关。

在这里插入图片描述

🎨基于LLM的自主Agent应用:

由于大语言模型具有强大的语言理解、复杂任务推理和常识理解能力,基于大语言模型的自主agent在多个领域展现出显著的潜力。本节对以往的研究进行了简洁的总结,并根据其在三个不同领域的应用对它们进行了分类:社会科学、自然科学和工程学(见图5左侧的全球概览)。

在这里插入图片描述

社会科学

社会科学是科学的一个分支,致力于研究社会以及社会中个体之间的关系。基于大语言模型的自主agent可以通过其令人印象深刻的人类般理解、思考和解决问题的能力来推动这一领域的发展。以下,我们讨论几个可能受到基于大语言模型的自主agent影响的关键领域。

心理学

对于心理学领域,基于大语言模型的agent可以用于进行模拟实验、提供心理健康支持等[102–105]。例如,在[102]中,作者为大语言模型分配了不同的档案,并让它们完成心理学实验。从结果来看,作者发现大语言模型能够生成与涉及人类参与者的研究所一致的结果。此外,还观察到较大的模型往往比其较小的同类模型提供更准确的模拟结果。一个有趣的发现是,在许多实验中,像ChatGPT和GPT-4这样的模型可能会提供过于完美的估计(称为“超准确性失真”),这可能会影响下游应用。在[104]中,作者系统地分析了基于大语言模型的对话agent对心理健康支持的有效性。他们从Reddit收集了120篇帖子,发现这些agent可以帮助用户按需应对焦虑、社交孤立和抑郁。同时,他们也发现这些agent有时可能会产生有害内容。

政治学与经济学

基于大语言模型的agent也可用于研究政治学和经济学[29,105,106]。在[29]中,基于大语言模型的agent被用于意识形态检测和预测投票模式。在[105]中,作者专注于通过基于大语言模型的agent的帮助,理解政治演讲的话语结构和说服要素。在[106]中,基于大语言模型的agent被赋予了特定的特质,如才能、偏好和个性,以探索人类在模拟场景中的经济行为。

社会模拟

过去,对人类社会进行实验往往成本高昂、不道德,甚至不可行。随着大语言模型的蓬勃发展,许多人探索利用基于大语言模型的agent构建虚拟环境,以模拟社会现象,如有害信息的传播等[20,34,77,79,107–110]。例如,Social Simulacra[79]模拟了一个在线社交社区,并探索了利用基于agent的模拟来帮助决策者改进社区规定的潜力。[107,108]研究了基于大语言模型的agent在社交网络中不同行为特征的潜在影响。生成式agent[20]和AgentSims[34]在虚拟城镇中构建了多个agent,以模拟人类的日常生活。SocialAI School[109]利用基于大语言模型的agent模拟和研究儿童发展过程中的基本社会认知技能。S3[77]构建了一个社交网络模拟器,专注于信息、情感和态度的传播。CGMI[111]是一个多agent模拟框架。CGMI通过树结构保持agent的个性,并构建了认知模型。作者使用CGMI模拟了一个课堂场景。

法学

基于大语言模型的agent可以在法律决策过程中作为辅助工具,促进更明智的判断[112,113]。盲审判断[113]利用几种语言模型模拟多位法官的决策过程。它收集了各种意见,并通过投票机制整合结果。ChatLaw[112]是一个基于大语言模型的著名中文法律模型。它支持数据库和关键词搜索策略以缓解此类模型中普遍存在的幻觉问题。此外,该模型还采用自注意力机制,通过减轻参考不准确的影响来增强大语言模型的能力。

研究助手

除了在专业领域的应用外,基于大语言模型的agent越来越多地被用作社会科学广泛领域的多功能助手[105,114]。在[105]中,基于大语言模型的agent提供了多方面的帮助,从生成简洁的文章摘要和提取关键关键词,到撰写详细的研究脚本,展示了它们丰富和简化研究过程的能力。同时,在[114]中,基于大语言模型的agent作为写作助手,展示了它们为社会科学家发现新的研究问题的能力,从而为该领域的探索和创新开辟了新的途径。这些例子突显了基于大语言模型的agent在提高社会科学效率、创造力和广度方面的潜力。

自然科学

自然科学是科学的一个分支,关注对自然现象的描述、理解和预测,基于观察和实验的实证证据。随着大语言模型的蓬勃发展,基于大语言模型的agent在自然科学中的应用越来越受欢迎。以下,我们介绍许多具有代表性的领域,基于大语言模型的agent可以在这些领域发挥重要作用。

文档和数据管理

自然科学的研究通常涉及大量文献的收集、整理和综合,这需要大量的时间和人力资源。基于大语言模型的agent在语言理解和使用互联网及数据库等工具进行文本处理方面表现出强大的能力。这些能力使agent在与文档和数据管理相关的任务中表现出色[75,115,116]。在[115]中,agent可以高效地查询和利用互联网信息,完成诸如问答和实验计划等任务。ChatMOF[116]利用大语言模型从人类编写的文本描述中提取重要信息。然后,它制定计划,应用相关工具来预测金属-有机框架的性质和结构。ChemCrow[75]利用化学相关数据库,既验证化合物表示的准确性,又识别潜在危险物质。这一功能通过确保所涉及数据的准确性,增强了科学调查的可靠性和全面性。

实验助手

基于大语言模型的agent能够独立进行实验,使它们成为支持科学家研究项目的有价值工具[75,115]。例如,[115]介绍了一个创新的agent系统,该系统利用大语言模型自动化科学实验的设计、计划和执行。该系统在接收到实验目标作为输入后,访问互联网并检索相关文档以收集必要信息。随后,它利用Python代码进行必要的计算并执行后续实验。ChemCrow[75]整合了17个精心开发的工具,专门用于协助研究人员进行化学研究。一旦接收到输入目标,ChemCrow为实验程序提供有价值的建议,同时强调与提议实验相关的任何潜在安全风险。

自然科学教育

基于大语言模型的agent能够与人类流畅地交流,通常被用于开发基于agent的教育工具[115,117–119]。例如,[115]开发了基于agent的教育系统,以促进学生对实验设计、方法和分析的学习。这些系统的目标是增强学生的批判性思维和解决问题的能力,同时促进对科学原理的更深入理解。Math Agents[117]可以帮助研究人员探索、发现、解决和证明数学问题。此外,它还可以与人类交流,帮助他们理解和使用数学。[118]利用CodeX[119]的能力自动解决并解释大学级别的数学问题,这些可以作为教育工具来教导学生和研究人员。CodeHelp[120]是一个编程教育agent。它提供了许多有用的功能,如设置课程特定的关键字、监控学生查询并向系统提供反馈。EduChat[81]是一个专门针对教育领域的基于大语言模型的agent。它通过对话为教师、学生和家长提供个性化、公平和富有同理心的教育支持。FreeText[121]是一个利用大语言模型自动评估学生对开放式问题的回答并提供反馈的agent。

工程学

基于大语言模型的自主agent在协助和增强工程研究及应用方面展现出巨大潜力。本节回顾并总结了基于大语言模型的agent在几个主要工程领域的应用。

土木工程

在土木工程领域,基于大语言模型的agent可用于设计和优化复杂的结构,如建筑、桥梁、大坝和道路。[122]提出了一个人类建筑师与agent协作在3D模拟环境中构建结构的交互式框架。交互式agent能够理解自然语言指令、放置模块、检测困惑、寻求澄清并整合人类反馈,显示出人类与人工智能在工程设计中协作的潜力。

计算机科学与软件工程

在计算机科学与软件工程领域,基于大语言模型的agent为自动化编码、测试、调试和文档生成提供了可能性[14,18,23,24,123–125]。ChatDev[18]提出了一个端到端框架,其中多个agent角色通过自然语言对话进行沟通和协作,以完成软件开发生命周期。该框架展示了高效且经济地生成可执行软件系统的潜力。ToolBench[14]可用于代码自动补全和代码推荐等任务。MetaGPT[23]抽象了产品经理、架构师、项目经理和工程师等角色,以监督代码生成过程并提升最终输出代码的质量。这使得低成本软件开发成为可能。[24]提出了一个基于大语言模型的代码生成的自我协作框架。在这个框架中,多个大语言模型被视为特定子任务的“专家”。他们根据指定的指令进行协作和互动,形成一个虚拟团队,相互促进工作。最终,虚拟团队协作解决代码生成任务,无需人工干预。LLIFT[126]利用大语言模型协助进行静态分析,特别是识别潜在代码漏洞。这种方法有效地平衡了准确性和可扩展性。ChatEDA[127]是为电子设计自动化(EDA)开发的agent,通过整合任务规划、脚本生成和执行,简化设计流程。CodeHelp[120]是为学生和开发人员设计的agent,协助他们调试和测试代码。其功能包括提供错误消息的详细解释、建议潜在修复方法,并确保代码的准确性。PENTESTGPT[128]是一个基于大语言模型的渗透测试工具,能够有效识别常见漏洞,并解释源代码以开发利用程序。DB-GPT[41]利用大语言模型的能力,系统地评估数据库中异常的潜在根本原因。通过实施思维树方法,DB-GPT使大语言模型能够在当前步骤失败的情况下回溯到前几步,从而提高诊断过程的准确性。

工业自动化

在工业自动化领域,基于大语言模型的agent可用于实现生产过程的智能规划和控制。[129]提出了一个将大语言模型与数字孪生系统相结合的新框架,以满足灵活生产的需要。该框架利用提示工程技巧,创建能够根据数字孪生提供的信息适应特定任务的大语言模型agent。这些agent可以协调一系列原子功能和技能,在自动化金字塔的不同层级完成生产任务。这项研究表明了将大语言模型整合到工业自动化系统中的潜力,为更敏捷、灵活和适应性强的生产过程提供了创新解决方案。IELLM[130]展示了大语言模型在石油和天然气行业中的作用案例研究,涵盖岩石物理学、声学反射测量和卷管控制等应用。

机器人技术与具身人工智能

近期的研究开发了更高效的强化学习agent,用于机器人技术和具身人工智能[16,38,78,131–138]。重点是增强自主agent在具身环境中的规划、推理和协作能力。具体来说,[135]提出了一个用于具身推理和任务规划的统一agent系统。在这个系统中,作者设计了高级命令以实现更好的规划,并提出了低级控制器将命令转化为行动。此外,还可以利用对话收集信息[136],以加速优化过程。[137,138]利用自主agent进行具身决策和探索。为了克服物理限制,agent可以通过利用多种技能生成可执行计划并完成长期任务。在控制策略方面,SayCan[78]专注于利用移动操作机器人研究广泛的操纵和导航技能。从厨房环境中常见的典型任务中汲取灵感,它提出了一个涵盖七个技能家族和十七个对象的551项技能的全面集合。这些技能包括各种动作,如抓取、放置、倾倒、抓握和操纵物体等。TidyBot[139]是一个旨在个性化家庭清洁任务的具身agent。它可以通过文本示例学习用户对物品放置和操纵方法的偏好。

为了促进基于大语言模型的自主agent的应用,研究人员还引入了许多开源库,基于这些库,开发者可以根据自己的定制需求快速实现和评估agent[19,108,124,140–153]。例如,LangChain[145]是一个开源框架,自动化编码、测试、调试和文档生成任务。通过整合语言模型与数据源并促进与环境的互动,LangChain通过自然语言沟通和多个agent角色之间的协作,实现高效且经济的软件开发。基于LangChain,XLang[143]配备了一整套工具、完整的用户界面,并支持三种不同的agent场景,即数据处理、插件使用和网络agent。AutoGPT[100]是一个完全自动化的agent。它设定一个或多个目标,将其分解为相应的任务,并循环执行这些任务,直到实现目标。WorkGPT[146]是一个类似于AutoGPT和LangChain的agent框架。通过向其提供指令和一组API,它与人工智能进行来回对话,直至完成指令。GPT-Engineer[125]、SmolModels[123]和DemoGPT[124]是专注于通过提示自动化代码生成以完成开发任务的开源项目。AGiXT[142]是一个动态人工智能自动化平台,旨在协调多个提供商之间的高效人工智能命令管理和任务执行。AgentVerse[19]是一个多功能框架,便于研究人员高效创建定制的基于大语言模型的agent模拟。GPT Researcher[148]是一个实验性应用程序,利用大型语言模型高效开发研究问题,触发网络爬虫收集信息,总结来源并汇总摘要。BMTools[149]是一个开源仓库,扩展了大语言模型的工具,并为社区驱动的工具构建和共享提供了平台。它支持各种类型的工具,启用使用多个工具同时执行任务,并提供通过URL加载插件的简单界面,促进对BMTools生态系统的轻松开发和贡献。

注: 利用基于大语言模型的agent支持上述应用也可能带来风险和挑战。一方面,大语言模型本身可能容易产生幻觉等问题,偶尔会提供错误答案,导致错误结论、实验失败,甚至在危险实验中对人类安全构成威胁。因此,在实验过程中,用户必须具备必要的专业知识和知识,以谨慎行事。另一方面,基于大语言模型的agent可能被用于恶意目的,如开发化学武器,需要实施安全措施,如人类对齐,以确保负责任和道德的使用。

总而言之,在上面的部分中,我们介绍了基于LLM的自主agent在三个重要领域中的典型应用。为了促进更清晰的理解,我们总结了以前的研究与它们在表2中各自的应用之间的关系。

在这里插入图片描述

💯基于LLM的自主agent评估:

主观评估

主观评估基于人类的判断来衡量agent的能力[20,22,29,79,158]。它适用于没有评估数据集或很难设计定量指标的场景,例如评估agent的智能或用户友好性。以下是两种常用的主观评估策略。

  • 人类标注:这种评估方法涉及人类评估者直接对各种agent生成的输出进行评分或排名[22,29,102]。例如,在[20]中,作者雇佣了许多标注者,要求他们对与agent能力直接相关的五个关键问题提供反馈。同样,[159]通过让人类参与者对模型在无害性、诚实性、帮助性、参与度和无偏见性方面进行评分来评估模型的有效性,随后比较不同模型之间的这些分数。在[79]中,要求标注者确定特定设计的模型是否能显著促进在线社区规则的发展。
  • 图灵测试:这种评估策略要求人类评估者区分由agent产生的输出和由人类创造的输出。如果在给定任务中,评估者无法区分agent和人类的结果,这就表明agent在这个任务上能够实现类似人类的表现。例如,在[29]中,研究人员对自由形式的党派文本进行实验,要求人类评估者猜测回应是来自人类还是基于大语言模型的agent。在[20]中,要求人类评估者识别行为是由agent生成的还是来自真实人类。在EmotionBench[160]中,收集人类标注以比较大语言模型软件和人类参与者在各种场景中表达的情绪状态。这种比较作为评估大语言模型软件情绪智力的基准,展示了一种细致的方法,以理解agent在模仿人类表现和情绪表达方面的能力。

注: 基于大语言模型的agent通常被设计为服务于人类。因此,主观agent评估发挥着关键作用,因为它反映了人类的标准。然而,这种策略也面临着成本高、效率低和人群偏差等问题。为了解决这些问题,越来越多的研究人员正在研究使用大语言模型本身作为中介来进行这些主观评估。例如,在ChemCrow[75]中,研究人员使用GPT评估实验结果。他们考虑了任务的完成情况和底层过程的准确性。同样,ChatEval[161]通过采用多个agent以结构化辩论的形式对各种候选模型生成的结果进行批评和评估,引入了一种新方法。这种创新性地使用大语言模型进行评估的方法有望在未来增强主观评估的可信度和适用性。随着大语言模型技术的不断发展,预计这些方法将变得越来越可靠,并找到更广泛的应用,从而克服直接人类评估的当前局限性。

客观评估

客观评估是指使用可以计算、比较和随时间跟踪的定量指标来评估基于大语言模型的自主agent的能力。与主观评估相比,客观指标旨在提供关于agent表现的具体、可衡量的见解。进行客观评估时,有三个方面非常重要,即评估指标、协议和基准。接下来,我们将详细介绍这些方面。

指标

为了客观评估agent的有效性,设计合适的指标至关重要,这可能会影响评估的准确性和全面性。理想的评估指标应精确反映agent的质量,并与在现实场景中使用它们时的人类感受保持一致。在现有工作中,我们可以总结以下具有代表性的评估指标。

  • 任务成功指标:这些指标衡量agent完成任务和实现目标的能力。常见指标包括成功率[12,22,57,59]、奖励/得分[22,59,122]、覆盖范围[16]和准确率[18,40,102]。更高的值表示更强的任务完成能力。
  • 人类相似性指标:这些指标量化agent行为在多大程度上接近人类行为。典型例子包括轨迹/位置准确率[38,162]、对话相似度[79,102]和模仿人类回应的能力[29,102]。更高的相似性表明更好的人类模拟表现。
  • 效率指标:与上述用于评估agent有效性的指标不同,这些指标旨在评估agent的效率。通常考虑的指标包括规划长度[57]、开发成本[18]、推理速度[16,38]和澄清对话次数[122]。
协议

除了评估指标外,客观评估的另一个重要方面是如何利用这些指标。在以往的工作中,我们可以识别出以下常用的评估协议。

  • 现实世界模拟:在这种方法中,agent在沉浸式环境中(如游戏和交互式模拟器)进行评估。agent需要自主执行任务,然后利用任务成功率和人类相似性等指标根据其轨迹和完成的目标来评估agent的能力[16,22,33,38,59,80,122,162,163,164]。这种方法旨在评估agent在现实世界场景中的实际能力。
  • 社会评估:这种方法利用指标根据agent在模拟社会中的互动来评估社会智能。采用的方法包括协作任务以评估团队合作技能、辩论以分析论证推理以及人类研究以衡量社交能力[34,98,102,165,166]。这些方法分析连贯性、心理理论和社会智商等品质,以评估agent在合作、沟通、同理心和模仿人类社交行为等领域的表现。通过将agent置于复杂的互动环境中,社会评估为agent的高级社会认知提供了宝贵的见解。
  • 多任务评估:在这种方法中,人们使用来自不同领域的多样化任务集来评估agent,这可以有效衡量agent在开放域环境中的泛化能力[29,80,153,163,165,166,167]。
  • 软件测试:在这种方法中,研究人员通过让agent执行软件测试任务(如生成测试用例、重现错误、调试代码以及与开发人员和外部工具交互)来评估agent[166,168,169,170]。然后,可以使用测试覆盖率和错误检测率等指标来衡量基于大语言模型的agent的有效性。

基准测试

鉴于指标和协议,一个关键的剩余方面是选择合适的基准来进行评估。在过去,人们在实验中使用了各种基准测试。例如,许多研究人员使用模拟环境,如 ALFWorld[59]、IGLU[122] 和 Minecraft[16,33,38] 作为基准来评估agent的能力。Tachikuma[164] 是一个利用 TRPG 游戏日志来评估大语言模型理解并推断与多个角色和新对象复杂互动能力的基准。AgentBench[167] 提供了一个全面的框架,用于在多样化环境中评估大语言模型作为自主agent的能力。它代表了首次对大语言模型作为agent在现实世界挑战中的系统性评估,涵盖多个领域。SocKET[165] 是一个全面的基准,用于在 58 个任务中评估大语言模型的社会能力,这些任务涵盖幽默和讽刺、情感和感受以及可信度等五类社会信息。AgentSims[34] 是一个多功能框架,用于评估基于大语言模型的agent,其中可以灵活设计agent的规划、记忆和行动策略,并在互动环境中衡量不同agent模块的有效性。ToolBench[149] 是一个开源项目,旨在支持开发具有通用工具使用能力的强大语言模型。它提供了一个开放平台,用于基于工具学习的训练、服务和评估大语言模型。WebShop[80] 开发了一个基准,用于评估基于大语言模型的agent在产品搜索和检索方面的能力。该基准是使用 118 万件真实商品构建的。MobileEnv[163] 是一个可扩展的互动平台,可用于评估基于大语言模型的agent的多步互动能力。WebArena[171] 提供了一个涵盖多个领域的综合网站环境。其目的是以端到端的方式评估agent,并确定其完成任务的准确性。GentBench[172] 是一个旨在评估agent能力的基准,包括其在使用工具完成复杂任务时的推理、安全性和效率。RocoBench[89] 是一个包含六个任务的基准,用于评估多agent合作在多样化场景中的能力,强调沟通和协调策略,以评估合作机器人中的适应性和泛化能力。EmotionBench[160] 评估大语言模型的情绪评估能力,即当面对特定情境时,其感受如何变化。它收集了 400 多种引发八种负面情绪的情境,并使用自我报告量表测量大语言模型和人类受试者的情绪状态。PEB[128] 是一个为评估基于大语言模型的agent在渗透测试场景中的能力而量身定制的基准,包含来自领先平台的 13 个多样化目标。它提供了一个结构化的评估,涵盖不同的难度级别,反映了agent在现实世界中的挑战。ClemBench[173] 包含五个对话游戏,用于评估大语言模型作为玩家的能力。E2E[174] 是一个端到端的基准,用于测试聊天机器人的准确性和有用性。

注: 客观评估通过各种指标促进了对基于大语言模型的agent能力的定量分析。尽管当前技术无法完美衡量所有类型的agent能力,但客观评估提供了补充主观评估的重要见解。基准测试和客观评估方法的持续进步将进一步促进基于大语言模型的自主agent的开发和理解。在上述部分中,我们介绍了基于大语言模型的自主agent评估的主观和客观策略。agent的评估在这个领域中发挥着重要作用。然而,主观和客观评估都有各自的优缺点。也许在实践中,应该将它们结合起来,以全面评估agent。我们在表 3 中总结了以往工作与这些评估策略之间的对应关系。

在这里插入图片描述

🌍相关综述:

随着大语言模型的蓬勃发展,出现了各种综合性的综述,提供了关于各个方面的详细见解。[176]广泛介绍了大语言模型的背景、主要发现和主流技术,涵盖了大量现有的工作。另一方面,[177]主要关注大语言模型在各种下游任务中的应用以及与它们部署相关的挑战。使大语言模型与人类智能对齐是一个活跃的研究领域,旨在解决诸如偏见和幻觉等问题。[178]汇编了现有的人类对齐技术,包括数据收集和模型训练方法。推理是智能的一个关键方面,影响决策、问题解决和其他认知能力。[179]介绍了大语言模型推理能力的最新研究现状,探讨了提高和评估其推理技能的方法。[180]提出语言模型可以通过增强推理能力和利用工具的能力得到提升,这种模型被称为增强型语言模型(Augmented Language Models, ALMs)。他们对ALMs的最新进展进行了全面的综述。随着大规模模型的使用越来越普遍,评估它们的性能变得越来越重要。[181]阐述了对大语言模型进行评估的问题,包括评估什么、在哪里评估以及如何评估它们在下游任务和社会影响中的表现。[182]也讨论了大语言模型在各种下游任务中的能力和局限性。

上述研究涵盖了大模型的各个方面,包括训练、应用和评估。然而,在本文之前,还没有工作特别关注迅速兴起且极具前景的基于大语言模型的agent领域。在本研究中,我们汇编了100篇与基于大语言模型的agent相关的文献,涵盖了它们的构建、应用和评估过程。

📚挑战:

角色扮演能力

与传统大语言模型不同,自主agent通常需要扮演特定角色(例如,程序员、研究员和化学家)以完成不同任务。因此,agent的角色扮演能力非常重要。尽管大语言模型可以有效模拟许多常见角色,如电影评论家,但仍有许多角色和方面它们难以准确捕捉。首先,大语言模型通常基于网络语料库进行训练,因此对于在网络上很少讨论或新出现的角色,大语言模型可能无法很好地模拟。此外,先前的研究[30]表明,现有的大语言模型可能无法很好地模拟人类认知心理特征,在对话场景中缺乏自我意识。解决这些问题的潜在方法可能包括微调大语言模型或精心设计agent提示/架构[183]。例如,可以首先收集真实人类数据用于不常见的角色或心理特征,然后利用这些数据微调大语言模型。然而,如何确保微调后的模型仍然能够很好地表现常见角色可能会带来进一步的挑战。除了微调,还可以设计定制的agent提示/架构来增强大语言模型在角色扮演方面的能力。然而,找到最优的提示/架构并不容易,因为它们的设计空间太大。

广义人类对齐

对于传统大语言模型,人类对齐已经讨论了很多。在基于大语言模型的自主agent领域,特别是当agent被用于模拟时,我们认为应该更深入地讨论这一概念。为了更好地服务于人类,传统大语言模型通常被微调以与正确的人类价值观对齐,例如,agent不应该计划制造炸弹以报复社会。然而,当agent被用于现实世界的模拟时,理想的模拟器应该能够诚实地描绘多样化的人类特征,包括具有错误价值观的特征。实际上,模拟人类负面方面可能更为重要,因为模拟的一个重要目标是发现和解决问题,而没有负面方面就意味着没有问题需要解决。例如,为了模拟现实世界的社会,我们可能不得不允许agent计划制造炸弹,并观察它将如何实施该计划以及其行为的影响。基于这些观察,人们可以采取更好的行动来阻止现实世界中类似的行为。受上述案例的启发,agent模拟的一个重要问题可能是如何进行广义人类对齐,即对于不同的目的和应用,agent应该能够与多样化的人类价值观对齐。然而,现有的强大语言模型(如ChatGPT和GPT-4)大多与统一的人类价值观对齐。因此,一个有趣的方向是如何通过设计适当的提示策略来“重新对齐”这些模型。

提示鲁棒性

为了确保agent的合理行为,设计者通常会在大语言模型中嵌入额外的模块,如记忆和规划模块。然而,这些模块的引入需要开发更复杂的提示,以便实现一致的操作和有效的沟通。先前的研究[184,185]强调了大语言模型提示的鲁棒性不足,因为即使是微小的更改也可能产生显著不同的结果。在构建自主agent时,这个问题变得更加突出,因为它们不仅包含一个提示,而是一个考虑所有模块的提示框架,其中一个模块的提示有可能影响其他模块。此外,不同的大语言模型之间的提示框架可能会有很大差异。开发一个适用于各种大语言模型的统一且有弹性的提示框架仍然是一个关键且未解决的挑战。解决上述问题的两种潜在方法是:(1) 通过试错手动构建基本的提示元素,或 (2) 使用GPT自动生成提示。

幻觉

幻觉是大语言模型的一个基本挑战,其特征是模型倾向于以高度自信的方式产生虚假信息。这一挑战不仅限于大语言模型本身,也是自主agent领域的一个重大问题。例如,在[186]中,观察到在代码生成任务中,面对简单的指令时,agent可能会表现出幻觉行为。幻觉可能导致严重的后果,如错误或误导性的代码、安全风险和伦理问题[186]。为了缓解这一问题,将人类纠正反馈直接纳入人机交互的迭代过程中是一个可行的方法[23]。关于幻觉问题的更多讨论可以参考[176]。

知识边界

基于大语言模型的自主agent的一个关键应用是模拟多样化的真实人类行为[20]。人类模拟的研究历史悠久,最近的兴趣激增可以归因于大语言模型取得的显著进展,它们在模拟人类行为方面表现出显著的能力。然而,重要的是要认识到大语言模型的力量并不总是有利的。具体来说,理想的模拟应该准确地复制人类知识。在这方面,大语言模型可能会表现出压倒性的能力,因为它们是在远远超出普通人可能知道的大量网络知识语料库上训练的。大语言模型的巨大能力可能会显著影响模拟的有效性。例如,在尝试模拟用户对各种电影的选择行为时,至关重要的是要确保大语言模型假设对这些电影没有先验知识。然而,有可能大语言模型已经获得了这些电影的信息。如果没有实施适当的策略,大语言模型可能会基于其广泛的知识做出决策,尽管现实世界中的用户事先无法访问这些电影的内容。根据上述例子,我们可以得出结论,对于构建可信的agent模拟环境,一个重要问题是如何限制大语言模型对用户未知知识的利用。

效率

由于其自回归架构,大语言模型通常具有较慢的推理速度。然而,agent可能需要多次查询大语言模型以执行每个行动,例如从记忆中提取信息、在采取行动前制定计划等。因此,agent行动的效率受到大语言模型推理速度的显著影响。

📚结论:

在这项调查中,我们系统地总结了基于LLM的自主agent领域的现有研究。我们从三个方面介绍并回顾了这些研究,包括对agent的构建,应用和评估。对于各个方面,我们提供了详细的分类法,以在现有研究之间建立联系,总结主要技术及其发展历史。除了审查先前的工作外,我们还提出了该领域的几个挑战,这些挑战有望指导潜在的未来方向。

首先需要了解得物网站的数据结构和爬取方式,得物网站比较复杂,需要使用Selenium+BeautifulSoup进行爬取。 以下是一个简单的得物爬虫Python代码实现(注:仅供学习参考,请勿用于商业用途): ```python import time from selenium import webdriver from selenium.webdriver.chrome.options import Options from bs4 import BeautifulSoup options = Options() options.add_argument('--no-sandbox') # 解决DevToolsActivePort文件不存在报错的问题 options.add_argument('window-size=1920x3000') # 指定浏览器分辨率 options.add_argument('--disable-gpu') # 谷歌文档提到需要加上这个属性来规避bug options.add_argument('--hide-scrollbars') # 隐藏滚动条, 应对一些特殊页面 options.add_argument('blink-settings=imagesEnabled=false') # 不加载图片, 提升速度 options.add_argument('--headless') # 无界面 driver = webdriver.Chrome(options=options) url = 'https://www.dewu.com/' driver.get(url) # 等待页面加载完成 time.sleep(3) # 模拟鼠标点击,展开商品列表 driver.find_element_by_xpath('//div[text()="全部商品"]').click() # 等待页面加载完成 time.sleep(3) # 获取页面源代码 html = driver.page_source # 解析页面 soup = BeautifulSoup(html, 'html.parser') # 获取商品列表 items = soup.find_all('div', {'class': 'item-card'}) for item in items: # 获取商品标题 title = item.find('div', {'class': 'title'}).text.strip() # 获取商品价格 price = item.find('div', {'class': 'price'}).text.strip() # 获取商品链接 link = item.find('a', {'class': 'item-link'})['href'] print(title, price, link) # 关闭浏览器 driver.quit() ``` 这里的代码仅仅是一个简单的爬虫示例,如果想要更加深入地了解得物网站的数据结构和爬取方式,需要结合具体的需求进行更加详细的分析和实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值