AgentGen:通过环境和任务生成增强基于大模型的 Agent 规划能力
基于大语言模型的智能体(LLM-based Agent)受到了广泛关注,并越来越受欢迎。此外,规划能力是 LLM-based Agent 的重要组成部分,它涉及与环境的交互和执行行动以完成规划任务,这通常需要从初始状态实现预期目标。
该研究通过 Instruction Tuning(即 Agent Training)来提高 LLM-based Agent 的规划能力。
最近关于 Agent Training 的研究表明,利用专家级轨迹数据(行动 - 观察对序列)对 LLM 进行 instruction tuning,可有效增强其规划能力。不过,现有的工作主要集中在从人工设计的规划任务和环境中合成轨迹。创建这些环境和任务需要耗费大量人力物力,因此无法生成足够丰富和广泛的轨迹用于智能体(Agent)训练。
为了解决这一局限性,该研究探索了自动合成各种环境和从易到难的渐进式规划任务的方法。研究者引入了一个名为 AgentGen 的框架,该框架首先利用 LLM 生成环境,后根据这些环境生成规划任务。具体来说,为了提高环境的多样性,建议由各种特定领域文本片段组成的灵感语料库作为合成环境的背景。
此外,为了增加生成的规划任务的难度多样性,提出了一种双向进化方法——BI-EVOL,它可以从较易和较难两个方向进化规划任务,合成难度曲线更平滑的任务集从而更有效地增强 LLM 的学习过程。
这些方法共同促进了用于指令调整的多样化轨迹数据的生成。在 AgentGen 的基础上,极大地扩展了可用于智能体(Agent)培训的环境和规划任务的数量。
来自 AgentBoard 的评估结果表明,AgentGen 极大地增强了 LLM 的规划能力。例如,经过 AgentGen 指令调整的 Llama-3.1-8B 在总体性能上优于 GPT-3.5。此外,经过 AgentGen 调整的 Llama-3.1-70B 模型在规划任务中取得了最先进的结果。
背景
最近,由于大型语言模型(LLMs)的进步,基于 LLM 的人工智能智能体(Agent)受到了广泛关注。一般来说,基于 LLM 的智能体(Agent)指的是利用 LLM 来感知环境、做出决策和执行行动,以替代或帮助人们完成某些特定任务。
此外,规划通常被视为基于 LLM 的智能体(Agent)最重要的应用之一,例如机器人规划、旅行规划等。在本研究中,规划被概念化为在给定环境中确定一连串可执行的行动以完成规划任务的系统过程,其定义是从初始状态过渡到实现指定目标条件的过程,同时考虑到约束条件和可用资源。
通过 instruction tuning LLM 来提高规划能力是一个重要的研究课题,被称为'agent training'。典型的智能体(Agent)训练过程可分为三个阶段:
- 准备环境和规划任务;
- 在这些规划任务上合成专家级轨迹(行动 - 观察对序列)。例如,利用最先进的 LLM(如 GPT-4)作为智能体(Agent),并根据奖励得分筛选轨迹;
- 利用合成轨迹数据对 LLM 进行指令调整。
最近,许多研究都证明了通过智能体(Agent)训练提高 LLMs 规划能力的有效性。尽管取得了成功,但这些研究的一个主要局限是,它们主要依赖于人工设计的环境和规划任务。
创建环境和规划任务的劳动密集性质阻碍了多样化和广泛轨迹数据的生成。更明确地说,设计多样化的环境需要定义一系列丰富实用的场景,而实施这些环境通常需要具备编程技能的人类专家的参与。
此外,制定任务通常需要创建一个难度逐步递增的任务集。由于这种限制,现有的 agent training 研究通常只使用少数几种环境进行数据合成。
方法
2.1 前置知识
规划问题可以用 Python 等编程语言或规划域定义语言(PDDL)等特定领域语言来实现。在基于 PDDL 的规划问题中,领域 PDDL 文件可视为环境 E,它定义了状态(谓词)和行动,并使用每个行动的前提条件和效果指定了过渡函数。初始状态和目标条件通常都定义为谓词的组合。
另一种广泛使用的用于构建规划问题的编程语言是 Python。在 OpenAI gym 中,规划问题将以 Python 类的形式实现,其中过渡函数以类的方法实现,通常命名为'step'或'update'函数。同时,目标 G 通常表示为表示任务目标的奖励函数,而初始状态 I 在名为'重置'的方法中定义。
生成规划任务的过程可以形式化为一个函数,其中 X 是输入空间(如指令或提示),元组 (E, T) 是所有可能的规划任务和环境的空间。根据定义,作者可以将其表示为 f(X),其中 T 是针对给定输入 X 生成的规划任务,E 是生成的环境。
作者的两阶段方法可进一步分解如下:
i)环境生成:在第一阶段,作者根据输入指令 X 生成环境 E。这可以表示为 E = GenEnv(X),其中 GenEnv 是环境生成函数,它将指令 X 作为输入并生成环境 E。
ii)任务生成:在第二阶段,作者以第一阶段生成的环境 E 为条件,生成任务 T。这可以表示为 T = GenTask(X, E),其中 GenTask 是任务生成函数,它将原始指令 X 和生成的环境 E 作为输入来生成任务 T。
2.2 环境生成
概述: 如图 2 所示,作者提出了一个复杂的环境生成框架,该框架由三个主要部分组成:


