大模型智能体
# 大模型智能体
【代理】基于LLM的自主Agent
# 介绍
# 定义
“自主主体是一个位于环境中的系统,也是环境的一部分,它感知环境,并随着时间的推移对其采取行动,以追求自己的议程,从而影响未来的感知。” ——Franklin and Graesser (1997)
“能够通过自主规划和指令完成任务”
# Agent体系结构设计
@LLM-Agent-Survey
语言模型(LLM)的最新进展已经证明了它们完成广泛任务的潜力。然而,仅基于LLM,由于其架构的限制,很难有效地实现自治代理。为了弥补这一差距,之前的工作开发了许多模块,以启发和增强LLM构建自主代理的能力。这里凝练了一个统一的框架来总结之前工作中提出的架构。具体来说,我们的框架的总体结构如下图所示,它由一个概要模块[profiling module]
、一个内存模块[memory module]
、一种计划模块[planning module]
和一个操作模块[action module]
组成。
概要模块的目的是识别代理的角色。
记忆和计划模块将代理置于动态环境中,使其能够回忆过去的行为并计划未来的行动。
行动模块负责将代理的决策转化为特定的输出。
在这些模块中,概要模块影响内存和计划模块,这三个模块共同影响动作模块。在下文中,我们将详细介绍这些模块。

# Profiling Module
# Agent配置生成策略
自主Agent通常通过承担特定角色来执行任务,例如编码员、教师和领域专家。Profiling模块旨在指示代理的角色配置文件,这些角色配置文件通常被写入提示中以影响LLM行为。 在现有的工作中,有三种常用的策略来生成代理配置文件。
手工制作方法【Handcrafting Method】:在该方法中,代理的配置文件是手动指定的。例如,如果一个人想设计不同性格的Agent,他可以用“你是一个外向的人”或“你是个内向的人”来描述Agent。手工制作方法在以前的许多工作中都被用来指示代理概要文件。
具体而言,Generative Agent通过名称、目标以及与其他Agent的关系等信息来描述Agent。MetaGPT、ChatDev和Self collaboration预先定义了软件开发中的各种角色及其相应职责,手动为每个代理分配不同的配置文件以促进协作。最近的一项工作表明,手动分配不同的人物角色会显著影响LLM的生成,包括毒性。通过指定特定的人物角色,与默认的人物角色相比,它们显示出更高的毒性。
一般来说,手工制作的方法非常灵活。然而,它可能是劳动密集型的,尤其是在与大量代理商打交道时。
LLM生成方法【LLM-generation Method】:在该方法中,代理配置文件是基于LLM自动生成的。通常,它首先提供手动提示,概述特定的生成规则,并阐明目标群体中Agent配置文件的组成和属性。此外,它可以指定初始Agent profile配置文件作为few-shot的例子。然后,这些配置文件作为基于LLM生成其他代理信息的基础。
例如,RecAgent首先通过手动制作年龄、性别、个人特征和电影偏好等细节,为少数Agent创建种子档案。然后,它利用ChatGPT基于种子信息生成更多的代理配置文件。当代理数量很大时,LLM生成方法可以节省大量时间,但它可能缺乏对生成的配置文件的精确控制。
数据集对齐方法【Dataset Alignment Method】:在该方法中,基于真实世界的数据集来指示代理配置文件。真实人类的基本信息被充分或选择性地用来描述Agent。
例如,
Out of one, many
中的代理基于真实世界调查数据集中的参与者人口统计背景进行初始化。数据集对齐方法可以准确地捕捉真实人群的属性,有效地弥合了虚拟世界和现实世界之间的差距。
# Profiling内容
除了profiling文件生成策略之外,另一个重要问题是如何指定用于分析代理的信息。信息的例子包括:
人口统计信息,它介绍了人口的特征(例如,年龄、性别和收入)
心理信息,它表明了Agent的个性
社会信息,它描述了Agent之间的关系。
对代理进行配置的信息的选择在很大程度上取决于具体的应用场景。例如,如果研究的重点是用户的社交行为,那么社交档案信息就变得至关重要。然而,建立简档信息和下游任务之间的关系并不总是简单的。一个潜在的解决方案是最初输入所有可能的配置文件信息,然后开发自动方法(例如,基于LLM)来选择最合适的方法。
# Memory Module
记忆模块在人工智能主体的构建中起着非常重要的作用。它存储从环境中感知到的信息,并利用记录的记忆来促进未来的行动。 记忆模块可以帮助Agent积累经验,自我进化,并以更一致、合理和有效的方式行事。本节提供内存模块的全面概述,重点介绍其结构、格式和操作。
# Memory Structure
基于LLM的自主主体通常包含来自人类记忆过程认知科学研究的原理和机制。人类记忆遵循一个总体的过程,从记录感知输入的感觉记忆,到短暂维持信息的短期记忆,再到长期巩固信息的长期记忆。在为人工智能代理设计记忆架构时,研究人员从人类记忆的这些方面获得灵感,同时也认识到能力的关键差异。人工智能代理中的短期记忆类似于Transformer架构的上下文窗口约束中支持的学习能力。长期内存类似于外部向量存储,代理可以根据需要快速查询和检索。因此,当人类通过强化逐渐将感知信息从短期存储转移到长期存储时,人工智能代理可以在其算法实现的记忆系统之间设计更优化的写和读过程。通过模拟人类记忆的各个方面,设计者可以创建利用记忆过程来提高推理和自主性的代理。在下文中,我们将介绍两种常用的内存结构。
统一记忆【Unified Memory】:在这种结构中,记忆被组织成一个单一的框架,短期记忆和长期记忆之间没有区别。该框架具有用于记忆读取、写入和反思的统一接口。
例如,Atlas基于通用密集向量存储文档记忆,这些向量是从双编码器模型生成的。Augmented LLM为其内存采用了统一的外部存储,可以通过提示进行访问。Voyager还利用了统一的内存体系结构,将不同复杂性的技能集中在一个中央库中。在代码生成过程中,可以根据技能的匹配和检索相关性对其进行索引。ChatLog维护统一的内存流,这允许模型保留重要的历史信息,并针对不同的环境自适应地调整代理本身。
混合记忆【Hybrid Memory】:混合记忆清楚地区分了短期和长期功能。短期成分暂时缓冲了最近的感知,而长期记忆则随着时间的推移巩固了重要信息。
例如,Generative agents采用双层存储器结构来存储代理的经验和知识,包括长期存储器和短期存储器。长期记忆被用来保持主体对整个世界的理解和概括,而短期记忆被用来保留主体对个别事件的理解和注释。AgentSim还实现了一种混合存储器体系结构。长期记忆利用向量数据库来有效地存储和检索每个代理的情景记忆。LLM用于实现短期记忆,并执行抽象、验证、校正和模拟任务。在GITM中,短期记忆存储当前轨迹,而长期记忆存储从成功的先前轨迹中总结的参考计划。长期记忆提供稳定的知识,而短期记忆允许灵活的计划。Reflexion利用短期滑动窗口来捕捉最近的反馈,并结合持久的长期存储来保留浓缩的见解。这种组合允许利用详细的即时体验和高级抽象。SCM选择性地激活最相关的长期知识,与短期记忆相结合,从而能够在复杂的上下文对话中进行推理。SWIFTSAGE使用小型LM来管理短期记忆以产生直觉和联想思维,同时使用LLM来处理长期记忆以产生深思熟虑的决策。
# Memory Formats
信息可以使用各种格式存储在记忆中,每种格式都具有独特的优势。例如,自然语言可以保留全面的语义信息,而嵌入可以提高记忆阅读的效率。在下文中,我们介绍了四种常用的内存格式。
自然语言【Natural Languages】:使用自然语言进行任务推理/编程可以实现灵活、语义丰富的存储/访问。例如,Reflexion将自然语言的经验反馈存储在滑动窗口中。Voyager使用自然语言描述来表示《我的世界》游戏中的技能,这些技能直接存储在内存中。
嵌入【Embeddings】:使用嵌入来存储信息可以提高记忆检索和阅读效率。例如,MemoryBank将每个内存段编码为嵌入向量,构建索引语料库以供检索。GITM将参考计划表示为嵌入,以便于匹配和重用。ChatDev将对话历史编码为矢量以供检索。
数据库【Databases】:外部数据库提供结构化存储,并且可以通过高效和全面的操作来操作记忆。例如,ChatDB利用数据库作为符号长期存储器。LLM控制器生成的SQL语句可以准确地对数据库进行操作。
结构化列表【Structured Lists】:另一种类型的存储器格式是结构化列表,在此基础上可以以更简洁高效的方式传递信息。例如,GITM将子目标的行动列表存储在层次树结构中。层次结构明确地捕捉了目标和相应计划之间的关系。RET-LLM最初将自然语言句子转换为三元组短语,然后将其存储在内存中。
以上,我们主要讨论记忆模块的内部设计。在下文中,我们将重点放在内存操作上,这些操作用于与外部环境交互。
# Memory Operations
有三种关键的记忆操作,包括阅读、写作和自我反思。在下文中,我们将更详细地介绍这些操作。
- 记忆读【Memory Reading】:记忆阅读的关键在于从记忆中提取信息。通常,信息提取有三个常用的标准,即最近性
(recency)
、相关性(relevance)
和重要性(importance)
。最近的、相关的和重要的记忆更有可能被提取出来。形式上,我们得出以下方程来提取信息:
其中q是查询,例如,代理应该处理的任务或代理所在的上下文。是所有记忆的集合。
、
和
是衡量记忆
的最近性、相关性和重要性的评分函数。需要注意的是,
只反映了记忆本身的特征,因此与查询无关。
是平衡参数。通过给它们分配不同的值,人们可以获得各种各样的记忆阅读策略。例如,通过设置
,许多研究只考虑记忆阅读的相关性得分
。通过指定
,Generative agents对上述三个度量进行同等加权,以从内存中提取信息。
记忆写【Memory Writing】。Agent可以通过在记忆中存储重要信息来获得知识和经验。在写过程中,有两个潜在的问题需要认真解决。
一方面,解决如何存储与现有存储器相似的信息(即存储器复制)至关重要。
另一方面,当内存达到其存储极限(即内存溢出)时,考虑如何删除信息是很重要的。
这些问题可以通过以下策略来解决。
内存重复。为了整合类似的信息,人们开发了各种方法来整合新的和以前的记录。例如,在GPT-4中,与同一子目标相关的成功动作序列存储在列表中。一旦列表的大小达到N(=5),则使用LLM将其中的所有序列浓缩为统一的计划解决方案。存储器中的原始序列被新生成的序列所替换。Augmented LLM通过计数累加聚合重复信息,避免冗余存储。Reflexion将相关反馈整合为高级见解,取代原始经验。
内存溢出。为了在信息充满时将其写入内存,人们设计了不同的方法来删除现有信息以继续记忆过程。例如,在ChatDB中,可以根据用户的命令明确删除存储器。RET-LLM使用固定大小的循环缓冲区作为内存,基于先进先出(FIFO)方案覆盖最旧的条目。
记忆反思【Memory Reflection】:这项行动旨在赋予Agents浓缩和推断更先进信息的能力,或自主验证和纠正自己的行为。它帮助Agent理解自己和他人的属性、偏好、目标和联系,从而指导他们的行为。以往的研究对各种形式的记忆反思进行了研究,即:
自我总结[Self-summarization]:反思可以用来将Agent的记忆浓缩为更高级的概念。在
Generative agents
中,代理能够将存储在记忆中的过去经历总结为更广泛、更抽象的见解。具体来说,代理首先根据其最近的记忆生成三个关键问题。然后,这些问题被用来查询记忆,以获得相关信息。基于所获得的信息,Agent产生五个见解,这些见解反Agent理人的高级思想。此外,反思可以分层发生,这意味着可以根据现有的见解产生见解。自我验证[Self-verification]:另一种形式的反思涉及评估Agent行为的有效性。在Voyager中,代理旨在完成Minecraft中的任务。在每一轮执行期间,代理使用GPT-4作为评论家来评估当前操作是否足以实现所需任务。如果任务失败,评论家会通过提出完成任务的方法来提供反馈。Replug采用训练方案来进一步使检索模型适应目标语言模型。具体来说,它利用语言模型作为评分函数来评估每个文档对减少语言模型困惑的贡献。通过最小化检索概率和语言模型得分之间的KL偏差来更新检索模型参数。这种方法有效地评估检索结果的相关性,并根据语言模型的反馈进行调整。
自我纠正[Self-correction]:在这种类型的反思中,代理可以通过结合来自环境的反馈来纠正其行为。在MemPrompt中,模型可以根据用户反馈调整对任务的理解,以生成更准确的答案。在
Describe, explain, plan and select
中,代理被设计为玩《我的世界》,它根据预定义的计划采取行动。当计划失败时,代理会重新思考其计划并对其进行更改以继续探索过程。同理心[Empathy]:记忆反思也可以用来增强Agent的移情能力。在RLP中,代理是一个聊天机器人,但它通过考虑人类的认知过程来生成话语。在每一轮谈话之后,Agent都会评估他的话对听众的影响,并更新他对听众状态的看法。
# Planning Module
当人类面对复杂的任务时,他们首先将其分解为简单的子任务,然后逐一解决每个子任务。规划模块使基于LLM的代理能够思考和规划解决复杂任务,使代理更加全面、强大和可靠。在下文中,我们将介绍两种类型的计划模块。
# Planning without Feedback
在这种方法中,代理在规划过程中不接收反馈。这些计划是以整体的方式产生的。以下是该方向的许多具有代表性的规划策略。

单路径推理[Single-path Reasoning]:在这种策略中,最终任务被分解为几个中间步骤。这些步骤以级联方式连接,每个步骤只导致一个后续步骤。LLM遵循这些步骤来实现最终目标。具体而言,思维链(CoT)提出在提示中输入用于解决复杂问题的推理步骤。这些步骤是激励LLM以循序渐进的方式进行计划和行动的例子。在这种方法中,计划是根据提示中示例的灵感创建的。Zero-shot CoT使LLM能够通过使用诸如“循序渐进地思考”之类的触发语句来生成任务推理过程。与CoT不同,该方法没有在提示中包含推理步骤作为示例。Re-Prompting涉及在生成计划之前检查每个步骤是否满足必要的先决条件。如果某个步骤未能满足先决条件,则会引入先决条件错误消息,并提示LLM重新生成计划。ReWOO引入了一种将计划与外部观测分离的范式,其中代理首先生成计划并独立获得观测,然后将它们组合在一起以得出最终结果。HuggingGPT首先将任务分解为许多子目标,然后基于Huggingface求解每个子目标。与CoT和Zero-shotCoT不同,它们以一次完成的方式完成所有推理步骤,ReWOO和HuggingGPT通过递归多次访问LLM来产生结果。
多路径推理[Multi-path Reasoning]:在这种策略中,生成最终计划的推理步骤被组织成树状结构。每个中间步骤可以具有多个后续步骤。 这种方法类似于人类的思维,因为个人在每个推理步骤都可能有多种选择。具体而言,自一致性CoT(CoT-SC)认为,每个复杂问题都有多种思维方式来推导最终答案。因此,它首先使用CoT来生成各种推理路径和相应的答案。随后,选择具有最高频率的答案作为最终输出。思想树(ToT)旨在使用树状推理结构生成计划。在这种方法中,树中的每个节点代表一个“思想”,它对应于一个中间推理步骤。这些中间步骤的选择是基于LLM的评估。使用广度优先搜索(BFS)或深度优先搜索(DFS)策略生成最终计划。与CoT-SC一起生成所有计划步骤相比,ToT需要为每个推理步骤查询LLM。在RecMind中,作者设计了一种自我启发的机制,其中还利用规划过程中丢弃的历史信息来推导新的推理步骤。在GoT中,作者将ToT中的树状推理结构扩展为图结构,从而产生了更强大的提示策略。在AoT中,作者设计了一种新的方法,通过在提示中加入算法示例来增强LLM的推理过程。值得注意的是,这种方法只需要查询LLM一次或几次。在LMZSP中,LLM被用作零样本规划者。在每个计划步骤中,他们首先生成多个可能的下一步,然后根据他们到可接受行动的距离来确定最后一步。
environmentally-aware
通过合并与提示中的查询类似的示例,进一步改进了LMZSP。RAP基于蒙特卡罗树搜索(MCTS)建立了一个世界模型来模拟不同计划的潜在效益,然后,通过聚合多个MCTS迭代来生成最终计划。外部规划师[External Planner]:LLM,即使具有显著的零样本规划能力,在许多情况下也不如传统规划者可靠,尤其是在面临特定领域的长期规划问题时。LLM+P将自然语言描述转换为正式的规划领域定义语言(PDDL)。然后,使用外部规划器计算结果,并最终由LLM转换为自然语言。同样,LLM-DP利用LLM将观测、当前世界状态和目标目标转换为PDDL格式。然后将该信息传递给外部符号规划器,该规划器有效地确定从当前状态到目标状态的最佳动作序列。MRKL是一种模块化的神经符号AI架构,LLM处理输入文本,将其路由到每个专家,然后将其通过LLM的输出。CO-LLM认为LLM擅长生成高级计划,但不擅长低级控制。他们使用启发式设计的低级计划器,根据高级计划稳健地执行基本操作。有了子任务领域的专家规划师,LLM就有可能在特定领域中导航复杂任务的规划。基于LLM的Agent的广义知识很难在所有领域中都能最好地执行任务,但将其与外部规划者的专家知识相结合可以有效地提高性能。
# Planning with Feedback
当人类处理任务时,成功或失败的经历会引导他们反思自己,并提高他们的计划能力。这些经验往往是在外部反馈的基础上获得和积累的。为了模拟这种人类能力,许多研究人员设计了规划模块,可以接收来自环境、人类和模型的反馈,显著提高了智能体的规划能力。
环境反馈[Environmental Feedback]:在许多研究中,Agent根据环境反馈制定计划。例如,ReAct将代理的动作空间扩展为动作和语言空间的集合。显式推理和动作是按顺序执行的,当来自动作的反馈没有正确答案时,将再次执行推理,直到获得正确答案。Voyager通过对三种类型的反馈进行操作来自我完善代理生成脚本,直到它通过自我验证并存储在技能库中。Ghost、DEPS可以接收来自环境的反馈,包括关于代理在环境中的当前状态的信息,以及关于所执行的每个动作的成功或失败的信息。通过整合这些反馈,代理可以更新他们对环境的理解,改进他们的策略并调整他们的行为。基于Zero-Shot Planners,Re-prompting使用预先条件错误信息来检测代理是否能够完成当前规划。它还使用先决条件信息来重新提示LLM完成闭环控制。Inner Monologue在指令中添加了三种类型的环境反馈:子任务的成功执行、被动场景描述和主动场景描述,从而实现了基于LLM的代理的闭环规划。Introspective Tips允许LLM通过环境反馈的历史进行内省。LLM Planner引入了一种基于基础的重新规划算法,当在任务完成过程中遇到对象不匹配和无法实现的计划时,该算法会动态更新LLM生成的计划。在Progprompt中,断言被合并到生成的脚本中,以提供环境状态反馈,从而在不满足操作的前提条件的情况下允许错误恢复。总之,环境反馈是规划成败的直接指标,从而提高了闭环规划的效率。
人的反馈[Human Feedback]:Agent可以在真实的人类反馈的帮助下制定计划。这样的信号可以帮助代理更好地与实际设置保持一致,也可以缓解幻觉问题。Voyager中提到,人类可以充当评论家,通过多模型反馈要求Voyager更改上一轮代码。OpenAGI提出了一种带有任务反馈的强化学习(RLTF)机制,该机制利用手动或基准评估来提高基于LLM的代理的能力。
模型反馈[Model Feedback]:语言模型可以作为批评者来批评和改进生成的计划。Self-Refine引入了自细化机制,通过迭代反馈和改进来提高LLM的输出。具体而言,LLM被用作生成器、反馈提供者和细化器。首先,生成器用于生成初始输出,然后反馈提供者为输出提供特定且可操作的反馈,最后,细化器用于使用反馈改进输出。LLM的推理能力通过生成器和评论家之间的迭代反馈回路得到了提高。Reflexion是一种通过言语反馈增强主体的框架,它引入了记忆机制。参与者首先生成动作,然后评估者生成评估,最后通过自我反思模型生成对过去经历的总结。摘要将存储在内存中,以通过过去的经验进一步提高演员的生成。世界模型通常是指代理对环境的内部表示,用于环境的内部模拟和抽象。它帮助Agent推理、规划和预测不同行动对环境的影响。RAP涉及将LLM同时用作世界模型和代理。在推理过程中,代理构建了一个推理树,而世界模型则提供奖励作为反馈。agent对推理树进行MCTS(Monte Carlo Tree Search,蒙特卡洛树搜索)以获得最优计划。类似地,REX引入了一种加速MCTS方法,其中奖励反馈由环境或LLM提供。Tips可以从其他专家模型的演示中学习。在MAD(多主体辩论)框架中,多个主体以“以眼还眼”的方式表达他们的论点,法官管理辩论过程以达成最终解决方案。MAD框架鼓励LLM中的发散思维,这有助于完成需要深入思考的任务。
总之,规划模块对于Agent解决复杂任务非常重要。虽然外部反馈总是有助于制定明智的计划,但它并不总是存在的。有反馈和无反馈的规划对于构建基于LLM的代理都很重要。
# Action Module
行动模块旨在将Agent的决定转化为具体结果。它直接与环境交互,决定代理完成任务的有效性。本节概述了行动模块,主要考察行动目标、战略、空间和影响力。
# Action Target
行动目标是指行动的目标,通常由真人或代理本身指定。三个主要行动目标包括任务完成、对话互动、环境探索。
任务完成[Task Completion]:动作模块的基本目标是以合乎逻辑的方式完成特定任务。不同场景中的任务类型各不相同,因此需要对动作模块进行必要的设计。例如,Voyager利用LLM作为行动模块,指导代理探索和收集资源,以完成Minecraft中的复杂任务。GITM将整个任务分解为可执行的动作,使代理能够逐步完成日常活动。Generative Agents类似地通过分层分解高级任务规划来执行可执行的动作序列。
对话互动[Dialogue Interaction]:基于LLM的自主代理与人类进行自然语言对话的能力至关重要,因为人类用户通常需要获得代理状态或完成与代理的协作任务。先前的工作已经提高了代理在不同领域的对话交互能力。例如,ChatDev在软件开发公司的员工之间进行相关对话。DERA以迭代的方式增强了对话交互。Multi-party chat利用不同主体之间的互动对话,从而鼓励他们对某个主题有相似的意见。
环境探索与互动[Environment Exploration and Interaction]:Agent能够通过与环境互动获得新知识,并通过总结最近的经验来增强自己。通过这种方式,智能体可以产生新的行为,这些行为越来越适应环境并符合常识。例如,Voyager通过允许代理在开放式环境中进行探索来进行持续学习。SayCan中的记忆增强强化学习(MERL)框架不断积累文本知识,然后基于外部反馈调整主体行动方案。类似地,GITM允许代理不断收集文本知识,从而根据环境反馈调整其行为。
# Action Strategy
行动策略是指代理产生行动的方法。在现有的工作中,这些策略可能是记忆回忆、多轮互动、反馈调整和融入外部工具。在下文中,我们将逐一详细介绍这些策略。
内存回收[Memory Recollection]:记忆回忆技术有助于Agent根据存储在记忆模块中的经验做出明智的决定。生成代理保持对话和经验的记忆流。在执行操作时,会检索相关的内存片段作为LLM的条件输入,以确保操作的一致性。GITM使用记忆来指导行动,比如向先前发现的位置移动。CAMEL构建了历史经验的记忆流,使LLM能够基于这些记忆产生知情的行动。
多轮互动[Multi-round Interaction]:该方法试图利用多轮对话的背景,让Agent将适当的反应确定为行动。ChatDevAgent理人根据他们与他人的对话历史采取行动。DERA提出了一种新的对话代理,在通信过程中,研究者代理可以提供有用的反馈来指导决策者代理的行动。在多智能体辩论(MAD)系统中,每个基于LLM的智能体参与迭代交互,交换挑战和见解,最终目的是达成共识。ChatCot采用多轮对话框架对思维链推理过程进行建模,通过对话互动无缝集成推理和工具使用。
反馈调整[Feedback Adjustment]:人类反馈或参与外部环境的有效性已被证明有助于Agent适应和加强其行动策略。例如,Voyager使代理能够在经历行动失败后改进其策略,或使用反馈机制验证成功的策略。交互式构建学习代理(ICLA)利用用户对初始行动的反馈来迭代增强计划,从而制定更精确的策略。SayCan采用了强化学习框架,在该框架中,智能体仅根据环境反馈不断调整动作,从而实现基于试错的自动化增强。
合并外部工具[Incorporating External Tools]:可以通过引入外部工具和扩展知识源来增强基于LLM的自主代理。
一方面,代理可以具备在训练或推理阶段访问和使用各种API、数据库、web应用程序和其他外部资源的能力。例如,Toolformer被训练来确定要调用的适当API、这些调用的时间以及将返回的结果集成到未来令牌预测中的最佳方法。ChemCrow设计了一种基于化学的LLM试剂,该试剂包含17种专家设计的工具,用于执行包括有机合成、药物发现和材料设计在内的任务。ViperGPT提出了一个代码生成框架,它将视觉和语言模型组装成能够返回任何给定查询结果的子例程。HuggingGPT使用LLM连接机器学习社区中的各种人工智能模型(例如,Hugging Face),以解决人工智能任务。具体而言,HuggingGPT提出了一种元学习方法来训练LLM生成代码片段,然后使用这些片段从外部社区中心调用所需的人工智能模型。
另一方面,Agent直接获得的知识的范围和质量可以在外部知识来源的帮助下扩大。在以前的工作中,外部知识源包括数据库、知识图、网页等。例如,Gorilla能够有效地提供适当的API调用,因为它在三个额外的机器学习中枢数据集上进行训练:Torch hub、TensorFlow hub和HuggingFace。WebGPT提出了一种扩展,可以在使用ChatGPT时将从网站检索到的相关结果合并到提示中,从而实现更准确、更及时的对话。ChatDB是一种人工智能数据库助手,它利用LLM控制器生成的SQL语句来准确地操作外部数据库。GITM使用LLM生成文本挖掘任务的可解释结果,该任务采用了一种新颖的文本挖掘管道,该管道集成了LLM、知识提取和主题建模模块。
# Action Space
基于LLM的Agent的动作空间是指代理可以执行的一组可能的动作。这源于两个主要来源:扩展行动能力的外部工具,以及Agent自己的知识和技能,如语言生成和基于记忆的决策。具体而言,外部工具包括搜索引擎、知识库、计算工具、其他语言模型和视觉模型。通过与这些工具对接,代理可以执行各种现实的操作,如信息检索、数据查询、数学计算、复杂的语言生成和图像分析。基于语言模型的智能体自我获取的知识可以使智能体能够规划、生成语言和做出决策,从而进一步扩大其行动潜力。
工具[Tools]:各种外部工具或知识源为代理提供了更丰富的操作能力,包括API、知识库、视觉模型、语言模型等。
API。利用外部API来补充和扩展操作空间是近年来流行的模式。例如,HuggingGPT使用搜索引擎,将查询转换为搜索请求以获取相关代码。WebGPT提出在响应用户请求时自动生成查询以从外部网页提取相关内容。TPTU与Python解释器和LaTeX编译器接口,以执行复杂的计算,如平方根、阶乘和矩阵运算。另一种类型的API是LLM可以基于自然语言或代码输入直接调用的API。例如,ToolFormer是一个基于LLM的工具转换系统,可以根据自然语言指令将给定的工具自动转换为具有不同功能或格式的另一个工具。API-Bank是一种基于LLM的API推荐代理,可以自动搜索并生成各种编程语言和领域的适当API调用。API-Bank还为用户提供了一个交互式界面,方便用户修改和执行生成的API调用。类似地,ToolBench是一个基于LLM的工具生成系统,可以根据自然语言需求自动设计和实现各种实用工具。ToolBench生成的工具包括计算器、单位转换器、日历、地图、图表等。所有这些代理都使用外部API作为其外部工具,并为用户提供交互式界面,以便轻松修改和执行生成或转换的工具。
知识库。连接到外部知识库可以帮助代理获得特定的领域信息,以生成更现实的操作。例如,ChatDB使用SQL语句查询数据库,以逻辑方式促进代理的操作。ChemCrow提出了一种基于LLM的化学试剂,旨在借助17种专家设计的工具完成有机合成、药物发现和材料设计领域的任务。MRKL系统,OpenAGI结合了各种专家系统,如知识库和规划者,调用它们以系统的方式访问特定领域的信息。
语言模型。语言模型也可以作为丰富动作空间的工具。例如,MemoryBank采用了两种语言模型,一种旨在对输入文本进行编码,而另一种负责匹配到达的查询语句,以提供辅助的文本检索。ViperGPT首先使用基于语言模型的Codex从文本描述中生成Python代码,然后执行该代码来完成给定的任务。TPTU结合了各种LLM来完成广泛的语言生成任务,如生成代码、生成歌词等。
视觉模型。将视觉模型与代理集成可以将动作空间扩展到多模态领域。ViperGPT利用GLIP等模型来提取视觉内容相关操作的图像特征。HuggingGPT提出使用视觉模型进行图像处理和生成。
Agent的自我认识[Agent’s Self Knowledge]:Agent的自获取知识也提供了多种行为,例如利用LLM的生成能力进行规划和语言生成,根据记忆做出决策Agent理人的自获得知识,如记忆、经验和语言能力,实现了各种无工具的行动。例如,Generative Agents维护所有过去对话的全面内存日志。在采取行动时,它检索相关的内存片段作为条件输入,以指导LLM自回归生成逻辑和一致的语言计划。GITM构建了一个经验的记忆库,比如发现的村庄或收集的资源。当采取行动时,它会在内存库中查询相关条目,例如回忆以前的村庄方向以再次向该位置移动。SayCan开发了一个强化学习框架,在该框架中,智能体完全基于环境反馈重复调整动作等动作,以实现自动试错改进,而无需任何人工演示或干预。Voyager利用LLM广泛的语言生成功能来合成自由形式的文本解决方案,如Python代码片段或根据当前需求定制的会话响应。同样,LATM使LLM能够利用Python代码来制作自己的可重用工具,从而培养灵活的解决问题的方法。CAMEL将所有历史经历记录在一个记忆流中。LLM然后从相关记忆中提取信息,自回归生成高级文本计划,概述预期的未来行动方案。ChatDev为LLM代理配备了对话历史记忆,以根据上下文确定适当的对话响应和行动Agent,Agent的内部知识通过记忆回忆、反馈调整和开放式语言生成等方法,实现了多样化的无工具行动。
# Action Influence
行动影响是指行动的后果,包括环境的变化、主体内部状态的改变、新行动的触发以及对人类感知的影响。在下文中,我们详细阐述了这些后果。
改变环境[Changing Environments]:动作可以直接改变环境状态,如移动代理位置、收集物品、建造建筑物等。例如,GITM和Voyager通过执行完成任务的动作序列来改变环境状态。
改变内部状态[Altering Internal States]:代理所采取的行动也可以改变代理本身,包括更新记忆、形成新计划、获取新知识等等。例如,在Generative Agents中,在系统内执行操作后更新内存流。SayCan使代理能够采取行动更新对环境的理解,从而适应后续行为。
触发新操作[Triggering New Actions]:对于大多数基于LLM的自治代理,动作通常是以顺序的方式进行的,即前一个动作可以触发下一个新动作。例如,Voyager试图在收集《我的世界》场景中的环境资源后建造建筑。生成代理首先将计划分解为子目标,然后进行一系列相关行动来完成每个子目标。
影响人类感知[Impacting Human Perceptions]:行动的语言、图像和其他形式直接影响用户的感知和体验。例如,CAMEL生成连贯、信息丰富、吸引会话主体的话语。ViperGPT产生逼真、多样化的视觉效果,并与图像生成任务相关。HuggingGPT可以生成视觉输出,如图像,将人类感知扩展到视觉体验领域。此外,HuggingGPT还可以生成多模式输出,如代码、音乐和视频,以丰富人类与不同媒体形式的互动。
# 💎 Construction of LLM-based Autonomous Agent
Model | Acc | Time | Profile | Memory-Operation | Memory-Structure | Planning | Action | CA | Paper | Code |
---|---|---|---|---|---|---|---|---|---|---|
WebGPT | 12/2021 | - | - | - | - | w/ tools | w/ fine-tuning | Paper (opens new window) | - | |
SayCan | CoRL-22 Oral | 04/2022 | - | - | - | w/o feedback | w/o tools | w/o fine-tuning | Paper (opens new window) | Code (opens new window) |
MRKL | 05/2022 | - | - | - | w/o feedback | w/ tools | - | Paper (opens new window) | - | |
Inner Monologue | CoRL-22 | 07/2022 | - | - | - | w/ feedback | w/o tools | w/o fine-tuning | Paper (opens new window) | Code (opens new window) |
Social Simulacra | UIST-22 | 08/2022 | GPT-Generated | - | - | - | w/o tools | - | Paper (opens new window) | - |
ReAct | ICLR-23 | 10/2022 | - | - | - | w/ feedback | w/ tools | w/ fine-tuning | Paper (opens new window) | Code (opens new window) |
MALLM | 01/2023 | - | Read/Write | Hybrid | - | w/o tools | - | Paper (opens new window) | - | |
DEPS | 02/2023 | - | - | - | w/ feedback | w/o tools | w/o fine-tuning | Paper (opens new window) | Code (opens new window) | |
Toolformer | 02/2023 | - | - | - | w/o feedback | w/ tools | w/ fine-tuning | Paper (opens new window) | Code (opens new window) | |
Reflexion | 03/2023 | - | Read/Write/ Reflection | Hybrid | w/ feedback | w/o tools | w/o fine-tuning | Paper (opens new window) | Code (opens new window) | |
CAMEL | 03/2023 | Handcrafting & GPT-Generated | - | - | w/ feedback | w/o tools | - | Paper (opens new window) | Code (opens new window) | |
API-Bank | 04/2023 | - | - | - | w/ feedback | w/ tools | w/o fine-tuning | Paper (opens new window) | Code | |
ViperGPT | 03/2023 | - | - | - | - | w/ tools | - | Paper (opens new window) | Code (opens new window) | |
HuggingGPT | 03/2023 | - | - | Unified | w/o feedback | w/ tools | - | Paper (opens new window) | Code (opens new window) | |
Generative Agents | UIST-23 | 04/2023 | Handcrafting | Read/Write/ Reflection | Hybrid | w/ feedback | w/o tools | - | Paper (opens new window) | Code (opens new window) |
LLM+P | 04/2023 | - | - | - | w/o feedback | w/o tools | - | Paper (opens new window) | - | |
ChemCrow | 04/2023 | - | - | - | w/ feedback | w/ tools | - | Paper (opens new window) | Code (opens new window) | |
OpenAGI | 04/2023 | - | - | - | w/ feedback | w/ tools | w/ fine-tuning | Paper (opens new window) | Code (opens new window) | |
AutoGPT | 04/2023 | - | Read/Write | Hybrid | w/ feedback | w/ tools | w/o fine-tuning | - | Code (opens new window) | |
SCM | 04/2023 | - | Read/Write | Hybrid | - | w/o tools | - | Paper (opens new window) | Code (opens new window) | |
Socially Alignment | 05/2023 | - | Read/Write | Hybrid | - | w/o tools | Example | Paper (opens new window) | Code (opens new window) | |
GITM | 05/2023 | - | Read/Write/ Reflection | Hybrid | w/ feedback | w/o tools | w/ fine-tuning | Paper (opens new window) | Code (opens new window) | |
Voyager | 05/2023 | - | Read/Write/ Reflection | Hybrid | w/ feedback | w/o tools | w/o fine-tuning | Paper (opens new window) | Code (opens new window) | |
Introspective Tips | 05/2023 | - | - | - | w/ feedback | w/o tools | w/o fine-tuning | Paper (opens new window) | - | |
RET-LLM | 05/2023 | - | Read/Write | Hybrid | - | w/o tools | w/ fine-tuning | Paper (opens new window) | - | |
ChatDB | 06/2023 | - | Read/Write | Hybrid | w/ feedback | w/ tools | - | Paper (opens new window) | - | |
S^3 | 07/2023 | Dataset alignment | Read/Write/ Reflection | Hybrid | - | w/o tools | w/ fine-tuning | Paper (opens new window) | - | |
ChatDev | 07/2023 | Handcrafting | Read/Write/ Reflection | Hybrid | w/ feedback | w/o tools | w/o fine-tuning | Paper (opens new window) | Code (opens new window) | |
ToolLLM | 07/2023 | - | - | - | w/ feedback | w/ tools | w/ fine-tuning | Paper (opens new window) | Code (opens new window) | |
MemoryBank | 07/2023 | - | Read/Write/ Reflection | Hybrid | - | w/o tools | - | Paper (opens new window) | Code (opens new window) | |
MetaGPT | 08/2023 | Handcrafting | Read/Write/ Reflection | Hybrid | w/ feedback | w/ tools | - | Paper (opens new window) | Code (opens new window) |
# Agent类别

# Embodied
# Embodied AI定义
非具身人工智能(Disembodied AI) 是指没有物理形式,只能被动接受人类采集、制作好的数据,进行分析、推理、决策等任务的人工智能系统。例如,图像识别、语音识别、自然语言处理等领域的应用。
具身人工智能(Embodied AI) 是指有物理形式,且与环境交互密切,主要依赖于自身的感知、运动、学习和推理能力进行任务的人工智能系统。例如,家用服务机器人、无人驾驶车辆、虚拟助手等领域的应用。
非具身人工智能和具身人工智能的区别在于是否具有与环境交互和影响的能力,以及是否需要依赖于外部数据或内部数据进行学习和决策。非具身人工智能更多地依赖于外部数据,而具身人工智能更多地依赖于内部数据。 非具身人工智能和具身人工智能的联系在于都是基于机器学习、深度学习、强化学习等方法来模拟、延伸和扩展人类智能的理论、方法、技术及应用系统。非具身人工智能和具身人工智能都是人工智能的子领域,也是通向通用人工智能(AGI)的不同途径。
# Embodied Agent定义
具身智能体(Embodied agent) 是一种具有物理形式,可以与环境交互的人工智能系统,例如机器人、虚拟代理或其他带有传感器和执行器的物理系统。具身智能体的研究目标是使人工智能系统能够像生物一样,通过与环境的互动来获取信息,学习和执行任务。
# 综述
# LLM-Agent-Survey
[2308.11432] A Survey on Large Language Model based Autonomous Agents (arxiv.org) (opens new window)
# 介绍
【出发点】
自治主体一直是学术界的一个突出研究课题。该领域先前的研究通常集中在孤立环境中训练知识有限的智能体,这与人类的学习过程有很大差异,从而使智能体难以实现类似人类的决策。最近,通过获取大量的网络知识,大型语言模型(LLM)在实现人类水平的智能方面表现出了巨大的潜力。这引发了研究基于LLM的自主代理的热潮。为了充分利用LLM的潜力,研究人员设计了适合不同应用的不同代理架构。 在本文中,我们对这些研究进行了全面的调查,从整体的角度对自主智能体领域进行了系统的回顾。
【研究内容】
代理构建:重点在于构建基于LLM的代理,为此我们提出了一个统一的框架,该框架包含了以前的大部分工作。对于Agent构建,我们提出了一个由四个组件组成的统一框架,即:
表示agent属性的概要模块 【profile module】
存储历史信息的内存模块 【memory module】
制定未来行动战略的计划模块 【planning module】
执行计划决策的行动模块 【action module】
通过禁用一个或多个模块,以前的大多数研究都可以被视为该框架的具体例子。在介绍了典型的代理模块后,我们还总结了常用的微调策略,以增强代理对不同应用场景的适应性。
代理构建:此外,我们还总结了基于LLM的人工智能代理在社会科学、自然科学和工程领域的各种应用。
代理评估:最后,我们讨论了基于LLM的人工智能代理常用的评估策略。重点是主观和客观策略。
未来发展:在前人研究的基础上,我们还提出了该领域的一些挑战和未来方向。
# 发展历程
长期以来,自主智能体一直被视为实现人工通用智能(AGI)的一条很有前途的道路,能够通过自主规划和指令完成任务。
在早期的范式中,决定Agent行动的政策功能是通过启发式方法构思的,随后通过环境参与进行细化。出现了一个明显的差距,其中这些功能往往无法复制人类水平的熟练程度,特别是在不受约束的开放领域环境中。这种差异可以追溯到启发式设计和训练环境提供的限定知识中固有的潜在不准确。
近年来,大型语言模型(LLM)取得了显著的成功,表明了它们在实现类人智能方面的潜力。这种能力来自于对综合训练数据集的利用,再加上大量的模型参数。在这种能力的推动下,近年来出现了一种蓬勃发展的趋势,其中LLM被用作创建自主代理的核心协调器。这种战略性就业旨在模仿类似人类的决策过程,从而为实现更复杂、更具适应性的人工智能系统提供途径。
沿着基于LLM的自主代理的方向,人们设计了许多有前景的模型,重点是增强LLM的基本能力,如记忆和规划,使其能够刺激人类行动并熟练地承担一系列任务。然而,这些模型是独立提出的,在全面总结和比较它们方面所做的努力有限。对现有的基于LLM的自主代理工作进行全面的总结分析至关重要,这对全面理解该领域具有重要意义,对未来的研究具有启示意义。
# 基于LLM的Autonomous Agent构建
基于LLM的自主代理有望根据LLM的类人能力有效地完成不同的任务。为了实现这一目标,有两个重要方面:
应该设计哪种架构来更好地使用LLM:在架构设计的背景下,我们对现有研究进行了系统的综合,最终形成了一个全面统一的框架。
如何学习架构的参数:我们总结了三种常用的策略,包括(1)从例子中学习,其中模型是基于精心策划的数据集进行微调的;(2)从环境反馈中学习,利用实时交互和观察;(3)从人类反馈中学习,利用人类专业知识和干预进行改进。如何使代理获得完成特定任务的能力。总结了基于是否微调LLM的agent能力获取策略。当将基于LLM的自主agent与传统的机器学习进行比较时,设计agent架构类似于确定网络结构,而agent能力获取类似于学习网络参数。
# Agent体系结构设计
参考@介绍-Agent体系结构设计

# Agent能力获取
在上面的部分中,我们主要关注如何设计代理架构,以更好地激发LLM的能力,使其能够像人类一样完成任务。体系结构充当代理的“硬件”。然而,仅仅依靠硬件是不足以实现有效的任务性能的。这是因为代理可能缺乏必要的特定任务的能力、技能和经验,而这些能力和经验可以被视为“软件”资源。 为了给代理人配备这些资源,已经制定了各种策略。通常,我们根据这些策略是否需要对LLM进行微调,将其分为两类。在下文中,我们将更详细地介绍它们中的每一个。
# 基于LLM的Autonomous Agent应用
# CoALA
[2309.02427] Cognitive Architectures for Language Agents (arxiv.org) (opens new window)
# 相关工作
# Zero-Shot Planners(2022 ICML)
# 背景
大型语言模型(LLM)学习的世界知识能否用于在交互环境中行动?在本文中,我们研究了用自然语言表达的高级任务(如“做早餐”)与一组可操作的步骤(如“打开冰箱”)相结合的可能性。虽然以前的工作侧重于从如何行动的明确的一步一步的例子中学习。
如果预先训练的LMs足够大并得到适当的提示,它们可以有效地将高级任务分解为中级计划,而无需任何进一步的训练。然而,由LLMs天真地产生的计划通常不能精确地映射到可接受的行动。
我们提出了一个程序,该程序以现有的演示为条件,并从语义上将计划转化为可接受的行动。我们在最近的VirtualHome环境中的评估表明,所得到的方法大大提高了LLM基线的可执行性。进行的人工评估揭示了可执行性和正确性之间的权衡,但显示了从语言模型中提取可操作知识的有希望的迹象。

# WebGPT
# 介绍
展示了一种新的长格式问答方法,其中对语言模型GPT-3进行了微调,以使用基于文本的Web浏览环境。这使得我们可以使用模仿学习和强化学习等一般方法来直接优化答案质量。
# 背景
在自然语言处理中,一个日益增长的挑战是长式问答(LFQA),即对开放式问题的回答生成一个段落长度的答案。LFQA系统有可能成为人们了解世界的主要方式之一,但目前落后于人类的表现。现有的工作往往侧重于该任务的两个核心组成部分--信息检索和综合。(为了使人类对事实准确性的评估更容易,模型必须在浏览时收集参考资料以支持他们的答案)
在这项工作中,我们利用这些组件的现有解决方案:我们将文档检索外包给Microsoft Bing Web Search API,并利用无监督的预训练通过微调GPT-3实现高质量的合成。我们没有试图改进这些因素,而是专注于使用更可靠的训练目标将它们结合起来。我们使用人的反馈来直接优化答案质量,使我们获得与人类具有竞争力的性能。
# 贡献
我们创建了一个基于文本的网络浏览环境,经过微调的语言模型可以与之交互。这使我们能够使用模仿学习和强化学习等一般方法以端到端的方式改进检索和合成。
我们生成带有参考的答案:浏览时由模型从网页中提取的段落。这对于允许标注者判断答案的事实准确性至关重要,而不需要参与困难和主观的独立研究过程。
# 方法概括
我们的模型主要是为了回答ELI5的问题,这是一个来自“Explain Like I’m Five”
子Reddit的问题数据集。我们收集了另外两种数据:
Demonstrations:人类使用我们的网络浏览环境回答问题的演示
Comparisons:对同一问题的两个模型生成的答案(每个答案都有自己的参考集合)的比较。答案的判断标准是事实的准确性、连贯性和总体实用性。
我们以四种主要方式使用这些数据:
使用Demonstrations的行为克隆(即有监督的微调)
使用Comparisons的奖励建模
针对奖励模型的强化学习 / 针对奖励模型的rejection sampling。
我们最好的模型使用了行为克隆和拒绝抽样的组合。
# 效果
我们还发现,当推理时间计算比较有限时,强化学习可以提供一些好处。我们用三种不同的方式评估我们最好的模型:
首先,我们将我们的模型的答案与我们的人类示威者就一系列悬而未决的问题所写的答案进行比较。我们模型的答案在56%的情况下是首选的,展示了基于文本的浏览器的人类级别的使用。
其次,我们将我们模型的答案(为了公平起见,去掉引用)与ELI5数据集提供的投票最高的答案进行比较。我们模型的答案在69%的情况下是首选的。
第三,我们在TruthfulQA上对我们的模型进行了评估,这是一个简短问题的对抗性数据集。我们的模型的答案有75%是正确的,54%的时间既正确又有信息量,超过了我们的基本模型(GPT-3),但没有达到人类的表现。
# 环境设计
以前关于问答的工作,如REALM和RAG,都集中在改进给定查询的文档检索上。相反,我们使用了一种熟悉的现有方法:现代搜索引擎(Bing)。这有两个主要优势。首先,现代搜索引擎已经非常强大,并为大量最新的文档建立索引。其次,它让我们可以专注于更高层次的任务--使用搜索引擎回答问题,这是人类可以做得很好的事情,语言模型也可以模仿。针对这种方法,我们设计了一个基于文本的网页浏览环境。向语言模型提示环境的当前状态的书面摘要,包括问题、当前光标位置处的当前页面的文本以及一些其他信息。

作为对此的响应,模型必须发出表1中给出的命令之一,该命令执行诸如运行Bing搜索、单击链接或滚动等操作。然后使用新的上下文重复此过程(因此,对前面步骤的唯一记忆就是摘要中记录的内容)。
当模型浏览时,它可以采取的操作之一是引用当前页面的摘录。当执行此操作时,页面标题、域名和摘录将被记录下来,以供以后用作参考。然后继续浏览,直到模型发出结束浏览的命令、达到最大操作数或达到引用的最大总长度。在这一点上,只要至少有一个引用,模型就会被提示问题和引用,并且必须组成其最终答案。

# 方法细节
# 数据采集
来自人类的指导是我们方法的核心。根据自然语言预训练的语言模型将不能使用我们基于文本的浏览器,因为它不知道有效命令的格式。因此,我们收集了人类使用浏览器回答问题的示例,我们称之为demonstrations。然而,仅靠演示培训并不能直接优化答案质量,而且不太可能远远超出人类的表现。因此,我们收集了同一问题的几对模型生成的答案,并询问人类他们更喜欢哪一个,我们称之为comparisons。对于演示和比较,绝大多数问题取自ELI5,这是一个长格式问题的数据集。为了多样性和实验,我们还混合了来自其他来源的少量问题,如TriviaQA。我们总共收集了大约6,000个演示,其中92%是关于ELI5的问题,以及大约21,500个比较,其中98%是关于ELI5的问题。
为了便于人类提供演示,我们为环境设计了一个图形用户界面。这基本上显示了与基于文本的界面相同的信息,并允许执行任何有效的操作,但更人性化。对于比较,我们设计了一个类似的界面,允许提供辅助注释和比较评级,尽管在训练中只使用最终的比较评级(更好、更差或同等好的总体)。无论是演示还是比较,我们都强调答案应该是相关的、连贯的,并由可靠的参考资料支持。
# 训练
使用预先训练好的模型对我们的方法至关重要。成功地利用我们的环境回答问题所需的许多潜在能力,如阅读理解和答案合成,都是语言模型的zero-shot能力。因此,我们对GPT-3型号系列的型号进行了微调,重点放在760M、13B和175B型号尺寸上。从这些模型出发,我们使用了四种主要的培训方法:
行为克隆(BC)。我们使用有监督的学习,以人类示威者发出的命令为标签,对演示进行了微调。
奖励模型(RM)。从去掉最后一个去嵌入层的BC模型开始,我们训练一个模型接受一个带有引用的问题和答案,并输出标量奖励。遵循Stiennon等人的观点。奖励表示ELO分数,其缩放使得两个分数之间的差值表示人类标签者优先于另一个分数的概率的对数。奖赏模型使用交叉熵损失来训练,以比较为标签。领带被视为50%的软标签。
强化学习(RL)。再次遵循Stiennon等人的观点。我们使用PPO(Proximal Policy Optimization)对BC模型进行了微调。对于环境奖励,我们在每集结束时获取奖励模型分数,并在每个令牌处将其添加到BC模型的KL惩罚中,以缓解奖励模型的过度优化。
拒绝抽样(best-of-n)。我们从BC模型或RL模型中抽取了固定数量的答案(4、16或64个)(如果未指明,我们使用BC模型),并选择奖励模型中排名最高的一个。我们将其用作针对奖励模型进行优化的可替换方法,不需要额外的训练,而是使用更多的推理时间计算。
训练的前三步与InstructGPT完全一致

我们对BC、RM和RL分别使用了互不相交的问题集。对于BC,我们保留了大约4%的演示作为验证集。对于RM,我们以一种特别的方式对比较数据集的答案进行采样,使用各种大小的模型(但主要是175B模型大小),使用各种方法和超参数的组合进行训练,并将它们组合到单个数据集。这是为了提高数据效率:出于评估目的,我们收集了许多比较,例如为了调优超参数,我们不想浪费这些数据。我们的最终奖励模型接受了大约16,000次比较的培训,其余的5,500次仅用于评估。对于RL,我们训练了来自ELI5的90%的问题和来自TriviaQA的10%的问题。为了提高样本效率,我们在每集的结尾插入了15集额外的仅回答问题的集,使用了与前一集相同的参考文献。我们之所以尝试这一点,是因为尽管采取的步骤要少得多,但回答问题比浏览问题能更好地解释奖励模型分数的变化,我们发现它将样本效率提高了大约2倍。我们还随机选择了最大浏览行为数,从20到100个范围内均匀抽样。
# 实验评估
以两种不同的方式在ELI5测试集上评估WebGPT:
我们比较了模型生成的答案和使用我们的网络浏览环境的demonstrators写的答案。对于这些比较,我们使用了与奖励模型培训所用的比较相同的程序。我们认为这是一个公平的比较,因为示范和比较的说明强调了一套非常相似的标准。
我们将模型生成的答案与来自ELI5数据集的参考答案进行了比较,后者是Reddit投票最高的答案。在这种情况下,我们关心的是生态有效性,因为我们详细的比较标准可能与现实生活中的用户的标准不匹配。我们也担心造成盲目,因为Reddit的答案通常不包括引文。为了缓解这些担忧,我们去掉了模型生成的答案中的所有引用和参考,聘请了不熟悉我们详细说明的新承包商,并给他们提供了一套更少的说明。

最好的175B best-of-64模型在usefullness和factual accuracy上都超过了真人。
# SayCan(2022 CoRL Oral)
# 介绍
# 背景
最近在训练大型语言模型(LLM)方面取得的进展已经产生了一些系统,这些系统可以根据提示生成复杂的文本,回答问题,甚至就广泛的主题进行对话。这些模型从从网络上挖掘的文本语料库中吸收了大量的知识,我们可能会想知道,这些模型中编码的日常任务知识是否可以被机器人用来在现实世界中执行复杂的任务。但是,具身代理人如何提取和利用逻辑推理模型的知识来完成实际的任务呢?这个问题提出了一个重大挑战。
LLM不以物理世界为基础,他们不观察他们的后代对任何物理过程的影响。这可能导致LLM不仅会犯在人们看来不合理或幽默的错误,而且还会以对特定物理情况而言无意义或不安全的方式解释指令。一个语言模型可能会用一个对机器人来说不可行或无用的合理叙述来回应。如果场景中没有真空或者机器人不能使用真空,那么“你可以尝试使用真空吸尘器”是不可能的。
# 研究思路
- 使用prompt engineering,LLM可能能够将高级指令分解为子任务,但是如果没有机器人能够给出其能力的上下文以及机器人和环境的当前状态,它就无法做到这一点。在这个例子的启发下,我们研究了如何提取LLMs中的知识,以使一个具体化的智能体(如机器人)能够遵循高级文本指令。该机器人配备了一套习得的“原子”行为技能,能够进行低级视觉运动控制。我们利用了这样一个事实,即除了要求LLM简单地解释一个指令之外,我们还可以用它来对个人技能在完成高级指令方面取得进展的可能性进行评分。然后,如果每项技能都有一个量化其从当前状态成功的可能性的启示函数
affordance function
(如学习价值函数),则其值可用于衡量技能的可能性。这样,LLM描述了每项技能有助于完成指令的概率,而affordance functions描述了每项技能成功的概率——将两者结合起来提供了每项技能成功执行指令的概率。Affordance functions使LLM意识到当前的场景,并且将完成限制到技能描述使LLM意识到机器人的能力。此外,这种结合产生了一个完全可解释的步骤序列,机器人将执行这些步骤来完成一个指令——一个通过语言表达的可解释的计划。
我们的方法SayCan在基于物理的任务中提取并利用LLMs中的知识:
LLM(Say)提供了一个任务基础来确定对一个高层次目标有用的行动
而习得的affordance functions(Can)提供了一个世界基础来确定根据计划执行什么是可能的。

LLM没有与他们的环境互动,也没有观察到他们反应的结果,因此没有扎根于这个世界。
SayCan通过预训练技能的价值函数为LLM提供基础,允许它们在机器人上执行真实世界的抽象长期命令。
# 效果
我们使用强化学习(RL)作为学习语言条件价值函数的一种方式,这些函数提供了世界上可能发生的事情的启示。我们在101个真实世界的机器人任务上评估了所提出的方法,这些任务涉及移动机器人在真实的厨房中以零射击的方式完成大量的语言指令。我们的实验验证了SayCan可以执行时间扩展的抽象指令。通过启示将LLM放在现实世界中,其性能几乎是non-grounded baselines的两倍。此外,通过评估不同LLM的系统性能,我们表明机器人的性能可以简单地通过增强底层语言模型来提高。
# 方法
给定一个高级指令,SayCan将来自LLM的概率(技能对指令有用的概率)与来自价值函数的概率(成功执行所述技能的概率)相结合,提供了该技能进一步执行用户所命令的高级指令的概率,以选择要执行的技能。这释放出一种既可能又有用的技能。通过将技能附加到响应并再次查询模型来重复该过程,直到输出步骤终止。

SayCan的关键思想是通过价值函数来建立大型语言模型,价值函数是捕获特定技能在当前状态下能够成功的可能性的函数。要实例化SayCan,我们必须为它提供一组技能,每个技能都有一个策略、一个值函数和一个简短的语言描述(例如,“捡起罐子”)。
训练了许多skill,这些skill每一个都是一个低级别的具体步骤(例如:拿瓶子),通过对不同步骤的组合和排列,可以完成特定场景下的任务。这些技能、价值函数和描述可以通过各种不同的方式获得。在我们的实现中,我们或者按照BC-Z方法用基于图像的行为克隆来训练个人技能,或者按照MTOpt用强化学习来训练个人技能。
不管技能的策略是如何获得的,我们都利用通过TD备份训练的价值函数作为该技能的启示模型。虽然我们发现BC策略在我们的数据收集过程的当前阶段实现了更高的成功率,但是RL策略提供的价值函数作为将控制能力转化为场景的语义理解的抽象是至关重要的。为了分摊训练许多技能的成本,我们分别利用多任务BC和多任务RL,其中不是训练每个技能的单独策略和价值函数,而是训练以语言描述为条件的多任务策略和模型。
虽然大型语言模型可以利用从大量文本中学到的丰富知识,但它们不一定会将高级命令分解为适合机器人执行的低级指令。如果一个语言模型被问到“机器人如何给我带来一个苹果”,它可能会回答“机器人可以去附近的商店给你买一个苹果”。尽管这个响应对于提示来说是一个合理的完成,但是对于可能具有有限且固定的能力集的具体化代理来说,它不一定是可操作的。因此,为了使语言模型适应我们的问题陈述,我们必须以某种方式告诉他们,我们特别希望将高级指令分解成一系列可用的低级技能。一种方法是仔细的提示工程,一种将语言模型哄向特定响应结构的技术。Prompt engineering在上下文文本(“Prompt”)中为模型提供了示例,这些示例指定了模型将模拟的任务和响应结构;然而,这并不足以将输出完全约束为被包含的代理的可接受的原始技能,并且实际上有时它会产生不可接受的动作或语言,这些动作或语言不是以容易解析成单独步骤的方式格式化的。
我们利用BC和RL策略训练过程来分别获得语言条件策略和值函数。为了完成我们所考虑的底层MDP的描述,我们提供了奖励函数以及策略和价值函数所使用的技能规范。如前所述,对于技能规范,我们使用一组简短的自然语言描述,表示为语言模型嵌入。我们利用稀疏奖励函数,如果语言命令被成功执行,则在一集结束时奖励值为1.0,否则为0.0。语言命令执行的成功由人来评定,其中给评定者一个机器人执行技能的视频,以及给定的指令。如果三个评分者中有两个同意这个技能成功完成,这个片段就被贴上了积极奖励的标签。
# 示例

基于当前观察,查询价值函数模块(a)以形成动作原语的价值函数空间。可视化“拾取”值函数,在(b)中“拾取红牛罐头”和“拾取苹果”具有高值,因为两个对象都在场景中,而在(c)中,机器人正在空白空间中导航,因此没有拾取动作接收高值。
# 算法
# RL Policies
RL模型使用类似于MT-OPT的体系结构,略有更改以支持自然语言输入。摄像机图像首先经过7个卷积层处理。语言指令由LLM嵌入,然后与机器人动作和状态的非图像部分连接,如抓手高度。为了支持异步控制,当机器人仍在从上一个动作移动时进行推理。该模型给出了前一个动作还有多少要执行。调节输入穿过FC层,然后在空间上平铺并添加到圆锥体。体积,然后再经过11个卷积层。输出通过Sigmoid选通,因此Q值始终在[0,1]内。
Training: 除了使用BC设置中的演示之外,我们还学习了用RL编写条件值函数的语言。为此,我们用模拟版本的技能和环境来补充我们的真实机器人机队。为了缩小模拟到真实的差距,我们通过RetinaGAN[16]对机器人图像进行转换,使其看起来更逼真,同时保留了类属对象结构。为了学习受语言限制的RL策略,我们在Everyday Robots模拟器中使用MT-OPT,使用所述模拟到真实的转换。我们利用仿真演示来引导仿真策略的性能,以提供初步的成功,然后在仿真中通过在线数据收集来不断提高RL性能。应用了标准图像增强(随机亮度和对比度)以及随机裁剪。640x512的输入图像从左到右填充了100像素,从上到下填充了40像素,然后再裁剪回640x512图像,以便在不限制视场的情况下允许随机的空间移动。我们使用类似于MT-OPT的网络体系结构。
RL模型使用16个TPUv3芯片进行培训,持续约100个小时,以及3000 CPU workers收集剧集,另有3000 CPU workers计算目标Q值。在TPU之外计算目标Q值允许TPU仅用于计算梯度更新。剧集奖励是稀疏的,总是0或1,因此Q函数使用对数损失进行更新。使用按优先级排序的经验回放来训练模型,其中调整剧集优先级以鼓励每项技能的回放缓冲训练数据接近50%的成功率。

# BC Policy
BC模型使用类似于BC-Z 的架构。语言指令由通用语句编码器嵌入,然后用于FiLM条件基于Resnet-18的架构。与RL模型不同,我们不提供以前的动作或夹爪高度,因为这对于学习策略是不必要的。将多个FC层应用于最终视觉特征,以输出每个动作分量(手臂位置、手臂方向、夹持器和终止动作)。
Training: 我们使用了68000个遥控演示,这些演示是用10个机器人组成的车队在11个月的时间里收集的。操作员使用VR头戴式控制器来跟踪他们的手的运动,然后将其映射到机器人的末端执行器姿态上。操作员也可以使用操纵杆来移动机器人的底座。我们使用276000个自主学习的策略集扩展了演示数据集,这些策略集后来被成功过滤并包含在BC培训中,从而产生了另外12000个成功集。为了额外处理数据,我们还要求评价者将情节标记为不安全(即,如果机器人与环境碰撞)、不期望的(即,如果机器人扰乱了与技能不相关的物体)或不可行的(即,如果技能不能完成或已经完成)。如果满足这些条件中的任何一个,则该发作被排除在训练之外。
为了在现实世界中大规模学习语言条件BC策略,我们在BC-Z的基础上构建并使用类似的策略网络架构。它用连续动作分量的MSE损失和离散动作分量的交叉熵损失来训练。每个行动部分的权重相等。使用了标准图像增强(随机亮度和对比度)以及随机裁剪。640 x 512的输入图像由左右100像素和上下40像素填充,然后裁剪回640 x 512的图像,以便允许随机的空间移动而不限制视野。为了在忽略训练性能降低的情况下获得更快的迭代速度,图像输入被下采样到一半大小(256×320个图像)。启示价值函数用全尺寸图像训练,因为半尺寸图像在学习Q(s,a,`π)时效果不好。BC模型使用16个TPUv3芯片进行训练,训练时间约27小时。

# Chain of Thought Reasoning
SayCan可以与最近改进LLM推理的工作相结合,例如思维链。普通SayCan的一个限制是它不处理涉及否定的任务。这是从下划线语言模型继承下来的,并在NLP社区进行了研究。然而,我们发现,通过使用思维链提示,我们可以在这方面改进SayCan。
# 评估
# 实验环境

我们在两个办公室厨房环境中使用一个移动机械手和一组对象操作和导航技能来评估SayCan。显示了环境设置和机器人。我们使用办公室厨房中常见的15个对象和5个具有语义意义的已知位置(两个柜台、一张桌子、一个垃圾桶和用户位置)。我们在两个环境中测试我们的方法:一个真实的办公室厨房和一个模拟厨房的环境,这也是机器人技能训练的环境。使用的机器人是来自日常机器人2的移动机械手,具有7个自由度的手臂和两指手爪。除非另有说明,LLM消融术使用的LLM为540B PaLM。
# 评价指标
为了理解所提出的方法的性能,我们测量两个主要指标。
计划成功率【plan success rate】:它衡量模型选择的技能对于指令是否正确,而不管它们实际上是否成功执行。我们要求3名人类评估者指出由模型生成的计划是否能够实现指令,如果3名评估者中有2名同意该计划有效,则该计划被标记为成功。请注意,对于许多指令,可能有多个有效的解决方案。例如,如果指令是“带一块海绵并扔掉汽水罐”,计划可以选择先带海绵或先扔掉汽水罐。
执行成功率【execution success rate】:它衡量完整的PaLM-SayCan系统实际上是否成功地执行了所需的指令。我们请3名人类评估员观看机器人执行。要求评定者回答问题“机器人是否完成了任务串指定的任务?”如果三分之二的评定者认为执行是成功的,我们就认为执行是成功的。
# 结果
PaLM-SayCan在培训环境中实现了84%的规划成功率和74%的执行成功率,在真实厨房中实现了81%的规划成功率和60%的执行成功率。否VF使用LLM中的最高分数技能,生成式(Gen .)使用生成式LLM,然后通过使用嵌入投射到最近的技能,BC NL使用带有自然语言指令的策略,BC USE使用带有通过使用嵌入投射到最近的技能的自然语言指令的策略。


# 局限性
虽然SayCan提出了一种可行的方法来将语言模型根植于代理的可提供性中,但是它有许多限制:
首先,我们期望这种方法继承LLMs的局限性和偏差,包括对训练数据的依赖性。
其次,我们观察到,即使SayCan允许用户使用自然语言命令与代理交互,系统的主要瓶颈是底层技能的范围和能力。为了说明这一点,我们在附录e中给出了典型的失败案例。扩展技能库并提高其稳健性的未来工作将减轻这一限制。
此外,在当前阶段,系统不容易对尽管报告了高值但个人技能失败的情况做出反应,尽管这可能通过适当提示语言模型进行纠正来解决。未来的工作还有许多其他潜在的途径。
# Inner Monologue(2022 CoRL)
最近的工作表明,大型语言模型(LLM)的推理能力可以应用于自然语言处理以外的领域,如机器人的规划和交互。这些具体化的问题需要智能体理解世界的许多语义方面:可用的技能,这些技能如何影响世界,以及世界的变化如何映射回语言。具体化环境中的LLMs规划不仅需要考虑做什么技能,还需要考虑如何以及何时做这些技能——答案会随着时间的推移而改变,以响应代理人自己的选择。
在这项工作中,我们研究了在没有任何额外训练的情况下,在这种具体化环境中使用的LLM可以在多大程度上推理通过自然语言提供的反馈来源。我们建议,通过利用环境反馈,LLM能够形成内心独白,使他们能够在机器人控制场景中进行更丰富的处理和规划。 我们调查各种反馈来源,如成功检测、场景描述和人际互动。我们发现,闭环语言反馈显著提高了三个领域的高级指令完成,包括模拟和真实的桌面重排任务和真实世界厨房环境中的长视野移动操作任务。

# Generative Agents(2023 UIST)
[2304.03442] Generative Agents: Interactive Simulacra of Human Behavior (opens new window)
# CoScript(2023 ACL)
# LLM-Planner(2023 ICCV)
# 概括
# 背景
人们一直希望构建多功能的具体代理(embodied agents),如机器人,能够遵循自然语言命令来完成不同的任务,并学会快速完成新任务。
当代语言驱动的代理仍然需要大量的标记示例(语言指令对和黄金轨迹)来学习每项任务,这是非常昂贵的,并阻碍了真正通用的代理的开发。
最近,一系列开创性的工作显示了GPT3等大型语言模型(LLM)作为嵌入式人工智能代理的少数计划器的非凡潜力。配备了基于LLM的规划者的代理已经开始通过一些培训示例展示学习新任务的能力。尽管作为概念的证明显示出了巨大的前景,但现有的工作仍然存在重大的局限性,可能会阻止更大规模的应用超出其有限的评估。例如,SayCan是将LLM用于具体指令跟随的开创性工作之一,它在只有15种对象类型的两个环境中进行了评估。假设代理能够预先列举所有可接受的技能(即[动作,对象]对),因此可以使用LLM对技能进行排名。当将代理部署到新环境时,这种假设在部分可观察的环境中很容易被打破。在具有更多对象的更复杂的环境中,成本也可能迅速累积,因为代理需要调用LLM来评估每一步的每一项可接受技能;同时效率降低。
最后,大多数现有工作使用LLM从语言指令生成单个静态计划,然后在整个计划上执行。然而,同一语言指令的最佳计划取决于环境;不同的环境可能需要不同的计划。缺乏一种根据环境感知动态调整LLM计划的方法。
# 核心设计
LLM-Planner,一个重要的设计目标是能够在不同的、部分可观察的环境中处理各种任务,并能够根据环境的感知动态调整计划。因此,与SayCan不同的是,我们使用LLM直接生成计划,而不是对可接受的技能进行排名,从而消除了对环境有足够先验知识的需要,同时也大大减少了对LLM的调用次数。LLM Planner的另一个独特优势是它能够根据代理在当前环境中观察到的内容动态重新规划,从而产生更可靠的计划。
更具体地说,我们采用分层规划模型,该模型由高级规划器和低级规划器(a high-level planner and a low-level planner)
组成。
我们使用LLM生成高级计划(HLP),即代理需要按照指定的顺序实现的子目标序列,以实现语言指令指定的最终目标。
然后,底层规划器将每个子目标映射到一系列原始操作中,以在当前环境和状态下实现该子目标。
一个重要的观察结果是,给定一个高水平的计划,低水平的计划会有条件地独立于自然语言指令。它成为了经典的对象定位和导航问题(对于导航子目标)或简单地执行与正确对象的指定交互操作(对于交互子目标)。可以使用从模拟器合成的数据来训练低级规划器。
# 示例

遵循上下文学习范式,只使用少量配对示例。此外,不需要更新参数,节省了开发时间。对于图中的例子,在一集(t=0)的开头,给定一条自然语言指令,我们通过在其上下文中给LLM几个示例对(instruction,HLP)
,直接提示LLM生成HLP。我们还利用已建立的技术,如动态上下文示例检索和logit偏差,以进一步提高上下文学习性能。
虽然LLM生成的HLP乍一看已经是合理的,但它们仍然缺乏具体代理的一个基本方面——物理基础;即,生成的HLP需要基于代理所处的环境。 以前的方法训练了一个单独的模型,该模型将LLM计划转换为基于可接受行动。然而,在LLM计划可以与合理的可受理诉讼相匹配的假设下,这是可能的。如果LLM计划不包含在可接受的行动列表中(在不同的环境中就是这样),这将为这些代理创建一个不确定的行为。为了克服这个问题,我们提出了一种新的基于基础的重新规划算法,为LLM Planner提供了物理基础。具体来说,当代理执行初始HLP时,每当它采取了太多步骤来达到当前子目标或进行了太多失败的尝试时,我们都会再次动态提示LLM生成此时已完成的部分HLP的新延续。
基础(grounding):我们将迄今为止在环境中感知的对象列表添加到提示中,作为对当前环境的简单但有效的描述。
上图展示了我们基于基础的重新规划算法如何帮助代理克服无法实现的计划。对于t=5的例子,代理商找土豆的时间太长了。它用在环境中观察到的对象冰箱重新提示LLM,LLM Planner从头开始生成一个新的HLP(因为到目前为止还没有完成子目标),指导代理在冰箱中寻找土豆。通过引入一种结合环境反馈的方法,我们的目标是在环境和LLM之间创建一个闭环,LLM可以根据环境动态调整生成的高级计划。
# 效果
虽然大多数现有工作是在有限的环境下评估的(例如,有限的/已知的环境、短期任务或具有少量对象的简单环境),但我们在ALFRED上评估LLM Planner,这是一个具有不同的部分可观察环境和各种任务和对象的大规模数据集。我们通过将LLM Planner与感知模块和来自强基线模型HLSM的低级Planner集成来测试它。LLM Planner使用不到0.5%的配对训练数据,与HLSM相比,实现了具有竞争力的性能,并优于使用完整训练集训练的多个其他基线。在同样的少镜头设置下,现有的方法几乎无法成功完成任何任务。我们的工作通过利用大型语言模型和基础的力量,为开发多功能、高效采样的具体代理打开了一扇新的大门。
# 预备知识
# Vision-and-Language Navigation(VLN)
具体的指令(Embodied instruction)跟随通常也被称为视觉和语言导航(VLN),尽管它还涉及交互动作,并且通常比典型的VLN任务(例如Room2Room)具有更长的时间范围。为了与文献保持一致,我们将交替使用这两个术语。我们将主要关注标准ALFRED数据集,该数据集建立在AI2Thor模拟器之上,但我们的方法可以很容易地推广到其他数据集和环境。我们选择ALFRED主要是考虑其任务类型(7种不同的任务类型)和长期任务(平均每个任务50个动作)的多样性。
VLN任务定义如下:给定一条语言指令,代理需要在环境
中预测并执行一系列原始动作来适应任务。在像ALFRED这样的数据集中,指令
由高级目标
和(可选)逐步指令
列表组成。因此,VLN任务可以用元组
表示,其中
是目标测试。
我们考虑了VLN的分层规划模型,在最近的几项研究中对其进行了不同程度的探索,但没有一项研究考虑用于规划的少数镜头设置或LLM。在这个公式中,规划是以分层的方式建模的:
高级计划器将指令
映射到高级计划(HLP
中,其中每个子目标
被指定为
(high-level action, object)
。我们在ALFRED中将高级动作定义为可以完成单个目标条件的原始动作的集合。我们直接从ALFRED进行交互操作,并且只添加导航操作。因此,高级动作空间由1个导航动作(Navigation
)和7个交互动作(PickupObject、PutObject、OpenObject、CloseObject、ToggleOnObject、TogetleOffObject、SliceObject)
组成。类似的动作通常用于其他相关工作,如SayCan和LM零样本规划器。低级计划器将每个子目标映射为一系列基本动作
。最先进的VLN方法使用基于地图的低级规划器和简单的路径查找算法从地图中查找当前子目标中的目标对象。需要注意的是,一旦指定了高级计划
,低级计划就变得独立于指令
。更正式地说,
。低级计划器中涉及的所有组件要么是确定性的,要么是使用模拟器的合成数据进行训练的。不需要涉及语言指令的配对数据。
# 方法

利用LLM(如GPT-3(TEXT-DAVINCI003))作为 few-shot grounded high-level planning for embodied agents。诸如GPT-3之类的LLM经过预训练以生成自然语言。要使他们成为高级规划者:
第一步是设计一个适当的提示,引导他们制定高级计划。
上下文示例的选择对LLM的性能至关重要,最近的工作表明,为每个测试示例动态检索类似示例是有益的。我们采用k-近邻(kNN)检索器来选择上下文中的示例。我们还使用logit偏差来进一步将LLM的输出空间约束为允许的动作和对象集。
通过以上所有设计,我们已经获得了LLM Planner的静态版本,它已经可以生成合理的HLP。我们提出了一种新的Grounded Re-planning算法,以增强LLM对当前环境的接地能力,从而进一步提高HLP质量。
最后,我们讨论了如何将LLM Planner集成到现有的具体代理中,以使其具有few-shot planning功能。
# Prompt Design
虽然GPT-3在各种任务中被证明是一个强大的少量学习者,但它的力量只能通过精心设计的针对所需行为的提示来释放。最终的HLP质量可能对提示中的次要设计选择敏感(例如,HLP的呈现方式,有时甚至标点符号的选择)。因此,我们确定了提示的核心组件,并在基于留一交叉验证(LOOCV)的真实少镜头设置下系统地比较了不同的设计选择。
我们的最终最佳提示如上图所示。提示以任务的直观说明和允许的高级操作列表开始。然后是kNN检索器选择的上下文中的示例。当我们只向GPT-3提供高级目标指令时,我们使用“任务描述:[高级目标指令]”的格式。当我们包括分步指令时,在目标指令后面包括另一行“逐步指令:[分步指令]”。对于基于动态的重新规划,我们在任务描述之后添加已完成的子目标和迄今为止在环境中观察到的对象列表。最后,我们以相同的格式附加测试示例,并以“下一个计划:”结尾。
# In-context Example Retrieval
上下文中的示例是LLM任务特定信息的重要来源。不同的示例可以为当前任务提供不同的信息。直观地说,如果当前任务是“煮土豆”,那么演示“煮鸡蛋”的HLP的上下文示例可能比演示如何“清洁盘子”的示例更具信息性。具体而言,我们使用冻结的BERT基础模型来评估每个训练示例和当前测试示例之间的成对相似性。两个例子的相似性是基于其相应指令的BERT嵌入之间的欧几里得距离来定义的。对于每个测试示例,我们从我们拥有的一小组配对训练示例中检索K个最相似的示例,其中K是我们在真正的少镜头设置下调整的超参数。
# Grounded Re-planning
使用LLM Planner作为静态高级规划器,只在任务开始时预测HLP,已经显示出良好的数据效率和准确性。然而,如前所述,这种静态规划缺乏物理环境的基础,可能导致不正确的对象和无法实现的计划。当此类问题发生时,代理无法完成HLP中指定的当前子目标,这将导致两种可能的情况之一:1)无法执行一个动作(例如撞到墙上或无法与对象交互),或者2)花费了很长时间,仍然没有完成当前子目标(例如无休止地漫游)。直观地说,了解当前环境中的对象对于解决这两个问题非常有帮助。例如,在知道有冰箱的情况下,LLM可能会产生一个HLP,该HLP指示代理去冰箱,并试图在冰箱中找到土豆,因为它可能在语言模型预训练期间学到了食物可能储存在冰箱中的常识。
为此,我们提出了一种简单但有效的方法,通过将观察到的对象列表从环境中注入到提示中,来增强具有物理基础的LLM。我们还为这些观察到的对象添加了logit偏差,这样LLM Planner就可以在这些对象与任务相关的情况下,优先使用这些对象制定计划。
在此基础上,我们提出了一种基于基础的重新规划算法,以在完成任务的过程中动态更新HLP。这与大多数现有工作形成了鲜明对比,这些工作采用了类似的分层规划模型),该模型只预先预测固定的HLP,无论执行过程中发生什么,都会坚持这一点。在我们的算法中,在以下两种情况中的任何一种情况下都会触发重新规划:1)代理无法执行动作,或者2)在固定数量的时间步长之后。LLM Planner将根据观察到的对象生成已经完成的部分HLP的新延续,代理将继续执行新计划,这可能有助于它摆脱困境。

# Integration with Existing VLN models
我们现在讨论如何将LLM Planner与现有模型集成,以增强它们的少镜头规划能力。LLM Planner为集成提供了一个相当通用和灵活的界面。它只需要包含的代理提供一个对象列表,并具有一个低级计划器,可以将预测的HLP转化为低级动作。它对代理人的内部工作没有任何假设。为了评估LLM Planner的端到端任务完成性能,我们将其与满足这种接口的强基线方法HLSM集成。
# 实验

# Self-critique
一个自然的问题是:一个模型应该能够可靠地发现它自己输出中的缺陷吗?毕竟,如果它了解这些缺陷,它或许可以在一开始就避免它们。然而,至少有一个主要的原因使你仍然期望一个模型能够识别它自己的错误:识别错误比避免错误更容易。同样,验证解决方案比找到它们更容易。"
# 概要
该工作对大型语言模型在基本任务和相应的评论任务上进行联合微调。
对于基本任务,主要关注基于主题的摘要任务,即总结给定段落的某个特定方面。
评论任务是在给定一篇文章和一个主题的情况下,找出基于主题的摘要中的错误。
从预训练的基础模型开始,以自回归预测大型文本语料库中的下一个标记。我们所有的型号都是GPT-3。我们使用监督学习来微调预训练模型,以预测所有这些任务的人类标签。联合训练意味着基础模型和批判模型之间不存在能力不对称,因此我们期望基础模型“知道”的任何错误也会被批判模型“知道”。
模型联合训练的主要任务集
q、A和C分别代表提问、回答和评论的空间。在我们的例子中,它们都是有限令牌长度的文本。
主要贡献是:
模型编写的评论帮助人类找到他们可能会忽略的缺陷。
评论有用性与模型能力成正比。大型模型通常更善于自我批判,尽管有更难批判的答案。
大型模型可以使用评论来帮助提炼他们自己的答案。模型生成的评论帮助模型直接改进他们自己的答案。使用拒绝抽样(best-of-n)来发现好的评论,比没有评论直接精炼的基线有更大的改进。对于这两种细化,改进与模型大小成正比,小模型没有改进。
我们激励并测量Generator-discriminator-critique (GDC)之间的差距。我们提出了一种新的方法来比较一个模型的能力,以产生答案,区分答案的质量,并批评答案。使用这种方法,我们研究了基于主题的摘要和综合领域的扩展趋势。在我们的实验中,我们未能发现一个清晰的趋势,表明评论者的表现赶上了鉴别者的表现,这意味着更大的模型仍然具有他们没有表达为评论者的相关知识。未来的努力方向应该是研究和提高相对于歧视绩效的批评绩效。
我们从我们的辅助实验中发布我们的训练数据集和样本。我们发布了一个数据集,其中包含数万条人工撰写的评论、提炼、评论评估等等,用于训练我们基于主题的摘要模型。
# Selection-inference(2023 ICLR top-5%)
# 概要
【出发点】
大型语言模型(LLM)已经被证明能够对新任务进行令人印象深刻的少量概括。然而,它们在多步逻辑推理问题上仍然表现不佳。在这里,我们对逻辑推理的46个任务进行了全面的评估,这些任务探索了逻辑推理的不同方面。我们表明,语言模型往往在单步推理或蕴涵任务中表现相当好,但难以将多个推理步骤链接在一起以解决更复杂的问题。
执行多步骤、逻辑上有效的推理的能力是发现新知识和可解释性的基础。
选择-推理(SI)框架,该框架从神经符号文献中获得灵感,与端到端深度学习方法常见
“黑盒”计算相比,模块化结构的神经符号网络有利于产生中间计算的可解释轨迹。
模块的手工制作和专业性质往往使最终的系统变得脆弱,更难以扩展到新的领域。
【方法】
有鉴于此,我们提出了一个选择-推理(SI)框架,该框架利用预先训练的LLM作为通用处理模块,并在选择和推理之间交替,以生成一系列可解释的、导致最终答案的随意推理步骤。
【效果】
聚焦于ProofWriter和bAbI的10个推理任务的子集,我们表明,在5-shot generalisation setting中的SI框架内使用7B参数的仅解码器LLM,没有微调,与等效的普通基线相比,性能提高了100%以上。
在相同的设置中,相同的模型甚至在相同的任务套件中胜过大得多的280B参数基线。
此外,由SI框架产生的答案伴随着基于因果自然语言的推理轨迹,这对于系统的安全性和可信性具有重要的意义。
# AgentVerse
# MultiagentDebate
# Reflexion
大型语言模型(LLM)作为目标驱动的代理,越来越多地用于与外部环境(如游戏、编译器、API)交互。然而,由于传统的强化学习方法需要大量的训练样本和昂贵的模型微调,这些语言代理在试错中快速有效地学习仍然具有挑战性。
我们提出了Reflexion,这是一个新的框架,不是通过更新权重,而是通过语言反馈来增强语言代理。具体来说,Reflexion代理对任务反馈信号进行口头反思,然后在情节记忆缓冲区中保持自己的反射文本,以在随后的试验中诱导更好的决策。Reflexion足够灵活,可以结合各种类型(标量值或自由形式的语言)和反馈信号源(外部或内部模拟),并在不同任务(顺序决策、编码、语言推理)中获得比基线代理的显著改进。例如,Reflexion达到91%pass@1HumanEval编码基准测试的准确度,超过了之前达到80%的最先进的GPT-4。我们还使用不同的反馈信号、反馈掺入方法和代理类型进行消融和分析研究,并深入了解它们如何影响性能。

# 评估体系
与LLM本身类似,评估基于LLM的自主代理的有效性是一项具有挑战性的任务。本节介绍了两种常用的评估策略,即主观评估和客观评估。

# Subjective Evaluation
主观评估基于人类判断来衡量代理人的能力。它适用于没有评估数据集或很难设计定量指标的场景,例如评估代理的智能或用户友好性。在下文中,我们介绍了两种常用的主观评价策略。
人类注释[Human Annotation]:在这种方法中,人类评估人员直接对不同Agent产生的结果进行评分或排序。例如,在
Generative agents
中,作者使用了许多注释器,并要求他们就与代理能力直接相关的五个关键问题提供反馈。在Socially situated
中,作者通过要求人类对模型进行无害、诚实、乐于助人、参与和无偏见的评分来评估模型的有效性,然后比较不同模型的结果。在Social simulacra
中,作者要求注释者回答他们设计的模型是否能有效地帮助改进在线社区的规则设计。图灵测试[Turing Test]:在这种方法中,人类评估者需要区分代理人和真实人类产生的结果。如果在给定的任务中,评估人员无法将代理和人工结果分开,则表明代理可以在该任务中实现类似于人工的性能。在
Out of one, many
中,作者在自由形式的Partisan文本上进行了实验,并要求人类评估者猜测响应是来自人类还是基于LLM的代理。在Generative agents
中,人类评估者被要求识别行为是由代理人还是真实的人类产生的。在Emotionally numb or empathetic?
中,作者进行了一项研究,收集了LLM软件和人类受试者在不同情况下的情绪状态的人类注释。他们利用这些注释作为基线来评估LLM软件的情感稳健性。
基于LLM的代理通常是为人类服务的。因此,主观主体评价起着至关重要的作用,因为它反映了人的标准。然而,这种策略也面临着高成本、低效率和人口偏见等问题。为了解决这些问题,许多研究人员已经探索利用LLM作为代理人进行主观评估。例如,在ChemCrow中,研究人员使用GPT评估实验结果。他们同时考虑任务的完成情况和基本过程的准确性。ChatEval采用多个代理以辩论的方式评估候选模型产生的结果。我们相信,随着LLM的发展,这种评估方法可以更加可信,并在更广泛的应用中得到应用。
# Objective Evaluation
客观评估是指使用定量指标来评估基于LLM的自主代理的能力,这些定量指标可以随着时间的推移进行计算、比较和跟踪。与主观评估相反,客观指标旨在为代理人的表现提供具体、可衡量的见解。为了进行客观评估,有三个重要方面,即评估指标、协议和基准。在下文中,我们将更详细地介绍这些方面。
指标[Metrics]:为了客观评价代理人的有效性,设计适当的指标具有重要意义,这可能会影响评价的准确性和全面性。理想的评估指标应该准确地反映代理的质量,并在现实世界场景中使用时与人类的感受保持一致。在现有的工作中,我们可以得出以下具有代表性的评估指标。
任务成功度量:这些度量衡量代理完成任务和实现目标的能力。常见指标包括成功率、奖励/得分、覆盖率和准确性。值越高,表示任务完成能力越强。
人类相似性度量:这些度量量化了代理行为与人类行为非常相似的程度。典型的例子包括轨迹/位置准确性、对话相似性和模仿人类反应。相似性越高,表示人类模拟性能越好。
效率指标:与上述用于评估代理有效性的指标相比,这些指标评估代理效率。典型指标包括规划长度、开发成本、推理速度和澄清对话的数量。
协议[Protocols]:除了评估指标外,客观评估的另一个重要方面是如何利用这些指标。在之前的工作中,我们可以确定以下常用的评估协议:
真实世界模拟:在这种方法中,在游戏和交互式模拟器等沉浸式环境中评估代理。智能体需要自主执行任务,然后利用任务成功率和人类相似性等指标,根据智能体的轨迹和完成的目标来评估智能体的能力。该方法有望评估代理人在现实世界场景中的实际能力。
社会评估:该方法利用指标来评估模拟社会中基于代理交互的社会智力。已经采用了各种方法,如评估团队合作技能的协作任务、分析议论文推理的辩论,以及衡量社会能力的人类研究。这些方法分析连贯性、心理理论和社会智商等品质,以评估代理人在合作、沟通、同理心和模仿人类社会行为等领域的能力。通过将代理人置于复杂的互动环境中,社会评价为代理人更高层次的社会认知提供了有价值的见解。
多任务评估:在这种方法中,人们使用来自不同领域的一组不同任务来评估agent,这可以有效地衡量agent在开放领域环境中的泛化能力。
软件测试:在这种方法中,研究人员通过让代理执行软件测试任务等任务来评估代理,如生成测试用例、复制错误、调试代码以及与开发人员和外部工具交互。然后,可以使用测试覆盖率和错误检测率等指标来衡量基于LLM的代理的有效性。
基准[Benchmarks]:考虑到指标和协议,剩下的一个关键方面是选择适当的基准进行评估。过去,人们在实验中使用了各种基准。例如,许多研究人员使用ALFWorld、IGLU和Minecraft等模拟环境作为评估代理能力的基准。Tachikuma是一个基准,它利用TRPG游戏日志来评估LLM理解和推断与多个角色和新颖对象的复杂交互的能力。AgentBench为评估LLM作为不同环境中的自主代理提供了一个全面的框架。 它代表了对LLM作为代理人在不同领域应对现实世界挑战的首次系统评估。SocKET是一个全面的基准,用于评估LLM在58项任务中的社交能力,涵盖幽默和讽刺、情绪和感受、可信度等五类社会信息。AgentSims是一个评估基于LLM的代理的通用框架,可以灵活地设计代理计划、记忆和行动策略,并测量不同代理模块在交互环境中的有效性。ToolBench是一个开源项目,旨在支持开发具有通用工具使用能力的强大LLM。它提供了一个基于工具学习的LLM培训、服务和评估的开放平台。WebShop开发了一个基准,用于评估基于LLM的代理在产品搜索和检索方面的能力。该基准是使用118万个真实世界项目的集合构建的。Mobile Env是一个可扩展的交互平台,可用于评估基于LLM的代理的多步骤交互能力。WebArena提供了一个跨多个域的综合网站环境。其目的是以端到端的方式评估代理,并确定其完成任务的准确性。GentBench是一个基准,旨在评估代理在使用工具完成复杂任务时的能力,包括推理、安全性和效率。RocoBench是一个有六个任务的基准,评估不同场景下的多智能体协作,强调沟通和协调策略,以评估协作机器人的适应性和泛化能力。EmotionBench评估LLM的情绪评估能力,即他们在特定情况下的感受如何变化。它收集了400多个引发八种负面情绪的情况,并使用自我报告量表测量LLM和人类受试者的情绪状态。PEB是一个专门用于在渗透测试场景中评估基于LLM的代理的基准,包括来自领先平台的13个不同目标。它提供了一个跨不同难度级别的结构化评估,反映了代理在现实世界中面临的挑战。ClemBench包含五个对话游戏,用于评估LLM作为玩家的能力。E2E是测试聊天机器人准确性和有用性的端到端基准。
客观评估允许使用不同的度量对基于LLM的代理能力进行定量评估。虽然目前的技术不能完美地测量所有类型的代理能力,但客观评估提供了补充主观评估的基本见解。客观评估基准和方法的不断进展将进一步推动基于LLM的自主代理的开发和理解。
# 评估基准
# AgentBench
[2308.03688] AgentBench: Evaluating LLMs as Agents (opens new window)
https://github.com/THUDM/AgentBench
# 评价指标
# EM(问答评估)
衡量预测答案是否与标准答案完全一致,Exact Match是问答系统的一种常见的评价标准,它用来评价预测中匹配到正确答案(ground truth answers)的百分比。