Executable Code Actions Elicit Better LLM Agents翻译

摘要

大语言模型 (LLM) Agent能够执行广泛的操作,例如调用工具和控制机器人,在应对现实世界的挑战方面表现出巨大的潜力。LLM Agent通常被提示以通过生成预定义格式的 JSON 或文本来执行操作,这通常受到受限的操作空间(例如,预定义工具的范围)和受限的灵活性(例如,无法组合多个工具)的限制。这项工作提出使用可执行的 Python 代码将 LLM Agent的操作整合到统一的操作空间 (CodeAct) 中。与 Python 解释器集成后,CodeAct 可以执行代码操作并动态修改先前的操作或通过多轮交互根据新的观察发出新操作。我们对 APIBank 上的 17 个 LLM 和新设计的基准进行了广泛的分析,结果表明 CodeAct 优于广泛使用的其他替代方案(成功率高出 20%)。CodeAct 令人鼓舞的性能促使我们构建一个开源 LLM Agent,它通过执行可解释的代码与环境交互并使用自然语言与用户协作。为此,我们使用 CodeAct 收集了一个指令微调数据集 CodeActInstruct,其中包含 7k 条多轮交互。我们表明,它可以与现有数据一起使用,以改进面向Agent的任务中的模型,而不会损害其通用能力。CodeActAgent 是从 Llama2 和 Mistral 微调而来的,与 Python 解释器集成,并且经过独特定制,可以使用现有库执行复杂任务(例如,模型训练)并自主进行自我调试。

1.Introduction

在这里插入图片描述
  大语言模型 (LLM) 已成为自然语言处理 (NLP) 领域的关键突破。当添加允许访问 API 的操作模块时,其操作空间将扩展到传统文本处理之外,从而使 LLM 能够获得工具调用和内存管理等功能,并可用于控制机器人和进行科学实验等实际任务。
  我们探究:如何有效扩展 LLM Agent的动作空间以解决复杂的现实问题?许多现有研究已经研究了使用文本或 JSON 来生成操作(例如,图 1 左上角的工具使用)。然而,这两种方法通常都受到操作空间范围的限制(操作通常针对特定任务量身定制)和灵活性受限(例如,无法在单个操作中组合多个工具)。作为一种替代方法,一些研究展示了使用 LLM 生成代码来控制机器人或游戏角色的潜力。然而,它们通常依赖于预先指定的控制原语和手工设计的提示,更重要的是,它们难以根据新的环境观察和反馈动态调整或发出动作。
  这项研究提出了 CodeAct,这是一个通用框架,允许 LLM 生成可执行 Python 代码作为操作(图 1 右上)。CodeAct 旨在处理各种应用程序,并具有独特的优势
  (1)CodeAct 与 Python 解释器集成,可以执行代码操作并根据通过多轮交互收到的观察结果(例如,代码执行结果)动态调整先前的操作或发出新的操作。
  (2)代码操作允许 LLM 利用现有的软件包。CodeAct 可以使用现成的 Python 包来扩展操作空间,而不是手工制作特定于任务的工具。它还允许 LLM 使用大多数软件中实现的自动反馈(例如错误消息),通过自我调试其生成的代码来改进任务解决。
  (3)代码数据在当今的 LLM 预训练中被广泛使用。这些模型已经熟悉结构化编程语言,因此可以经济高效地采用 CodeAct。
  (4)与 JSON 和具有预定义格式的文本相比,代码天生就支持控制和数据流,允许将中间结果存储为变量以供重复使用,并组合多个工具以使用一段代码执行复杂的逻辑操作(例如,if 语句、for 循环),从而释放 LLM 利用其预训练的编程知识解决复杂任务的潜力。在图 1 中,使用 CodeAct 的 LLM(右上)可以通过 for 循环(即控制流功能)将相同的工具序列(例如,使用数据流功能将一个工具的输出作为输入传递给另一个工具)应用于所有输入,只需一个操作;而文本或 JSON 必须对每个输入采取行动(左上)。
  我们对 17 个 LLM(包括开源和专有 LLM)进行了广泛的实验,证实了 CodeAct 的上述优势(3 和 4)。为了证明优势(3),我们的第一个实验(§2.2)将 CodeAct 与涉及原子工具使用(即每个操作只使用一个工具)的基本任务的基线进行了比较,消除了 CodeAct 提供的控制和数据流优势。结果表明,对于大多数 LLM,CodeAct 实现的性能与基线相当或更好。CodeAct 的性能提升在复杂任务上更为突出,正如我们的第二个实验(优势 4)所证明的那样。我们策划了一个新的基准,该基准由 82 个人工设计的任务组成,这些任务通常需要在多轮交互中多次调用多个工具( M 3 T o o l E v a l M^3ToolEval M3ToolEval;§2.3)。该基准中的问题通常需要多个工具的复杂协调和组合。凭借其在控制和数据流方面的优势,CodeAct 在解决问题的成功率上实现了比基线高达 20% 的绝对提升,同时所需的操作减少了高达 30%。随着 LLM 能力的提升,这些性能增益也不断扩大(图 1 底部)。
  CodeAct 的出色性能激励我们开发一个开源 LLM Agent,该Agent可以通过 CodeAct 有效地采取行动,并通过自然语言与人类协作。为此,我们收集了一个指令微调数据集 CodeActInstruct,其中包含 7k 条高质量的 CodeAct 多轮交互轨迹(§3.1)。CodeActInstruct 的灵感来自一个由Agent、用户和环境组成的通用Agent框架(图 2),重点关注Agent与计算机(信息搜索、软件包使用、外部存储器)和物理世界(机器人规划)的交互。在 CodeActInstruct 上,我们进行仔细的数据选择,以提升从多轮交互中改进的能力(例如,自我调试)。我们表明,CodeActInstruct 可以与常用的指令微调数据一起使用,以提高模型在Agent任务中的性能,而不会损害其一般能力(例如,基于知识的 QA、编码、指令遵循,§3.2)。我们的模型被称为 CodeActAgent,是在 LLaMA-2 和 Mistral-7B 的基础上进行微调的,不仅使用 CodeAct 改进了域外Agent任务,还使用预定义格式的文本操作(§3.2)。
  CodeAct 还可以从多轮交互和现有软件中受益(优势 1 和 2,§2.4)。如图 3 所示,CodeActAgent 专为与 Python 无缝集成而设计,可以使用现有的 Python 包执行复杂的任务(例如,模型训练、数据可视化)。来自环境的错误消息进一步使其能够通过多轮交互中的自我调试自主纠正错误。得益于 LLM 在预训练期间获得的丰富编程知识,这些无需上下文样例即可实现,从而减少了将 CodeActAgent 适应不同任务的人力。

2.CodeAct Makes LLMs Better Agents

在本节中,我们首先描述 CodeAct 框架(§2.1),并提供支持选择 CodeAct 的经验证据。我们专注于将 Python 作为 CodeAct 的编程语言,因为它很受欢迎(在(TIOBE 指数,2024)中排名第一)并且拥有众多开源软件包。我们旨在使用 17 个现成的 LLM 回答几个研究问题 (RQ)。在 §2.2 中,我们研究了 RQ1:由于大量代码预训练数据,LLM 对代码的熟悉度是否使 CodeAct 比文本和 JSON 更具优势?我们在 §2.3 中讨论了 RQ2:在复杂问题中,CodeAct 是否受益于 Python 固有的控制和数据流功能?最后,作为额外的好处,我们讨论了如何使用 CodeAct 通过启用多轮交互并允许它们访问 §2.4 和图 3 中的现有软件来进一步增强 LLM Agent。

2.1 What is CodeAct?

在这里插入图片描述
  在图 2 中,我们首先介绍了一个用于 LLM Agent在实际应用中的通用多轮交互框架,该框架考虑了三个角色:Agent、用户和环境。我们将交互定义为Agent与外部实体(用户或环境)之间的信息交换。对于每个交互轮次,Agent都会从用户(例如自然语言指令)或环境(例如代码执行结果)接收观察结果(输入),并可选择通过思维链规划其操作,然后以自然语言向用户或环境发出操作(输出)。CodeAct 使用 Python 代码来整合Agent与环境交互的所有操作。在 CodeAct 中,向环境发出的每个操作都是一段 Python 代码,Agent将接收代码执行的输出(例如结果、错误)作为观察结果。我们在 §E 中包含了 CodeAct 的示例提示。

2.2 CodeAct Shows the Promise as a Strong Tool Use Framework

在这里插入图片描述
  在本节中,我们进行了一项受控实验,以了解哪种格式(文本、JSON、CodeAct)更有可能使 LLM 生成正确的原子工具调用。此实验中的表现反映了 LLM 对相应格式的熟悉程度。我们假设使用 CodeAct 调用工具是模型使用工具的一种更自然的方式,因为模型在训练期间通常会大量接触代码数据。
  Setup。我们重新利用 API-Bank 并测试 LLM 的 API 调用性能,比较 CodeAct、JSON 和文本操作。对于每个评估实例,我们提示 LLM 以预定义格式的 Python 函数调用、JSON 对象或文本表达式的格式生成一个原子工具调用。表 A.6 中显示了一个具体示例。我们使用 API-Bank 的 1 级指令和提供的工具集。为了评估 API 调用,我们遵循它们的正确性指标,将真实 API 输出与实际模型生成的 API 的执行输出进行匹配。
  Results。我们在表 2 中展示了结果。对于大多数 LLM,即使在原子操作(简单的工具使用场景)中,CodeAct 也能实现相当或更好的性能,此时其控制和数据流强度被削弱。与闭源 LLM 相比,CodeAct 在开源模型中的改进更为突出。此外,与专门的 JSON 或文本工具调用格式相比,代码数据通常更易于访问,可用于微调开源 LLM。尽管 JSON 对于开源模型来说一直弱于其他方法,但它在闭源 LLM 中实现了不错的性能,这表明这些闭源模型可能已经针对其 JSON 功能进行了有针对性的微调。这些结果表明,与其他方法相比,针对 CodeAct 进行优化是开源 LLM 提高其工具使用能力的更好途径,因为它们已经表现出良好的初始 CodeAct 能力,这是由于在预训练期间大量接触代码数据所致。

2.3 CodeAct Gets More Done with Fewer Interactions

在这里插入图片描述
  在本节中,我们研究 LLM Agent是否可以从需要复杂工具使用模式的问题的代码控制和数据流中受益。
   M 3 T o o l E v a l M^3ToolEval M3ToolEval。如表 A.7 所示,据我们所知,现有的工具使用基准测试中没有一个包含需要组合多种工具调用的复杂任务,同时支持评估不同的操作格式。因此,我们设计了一个基准测试 M 3 T o o l E v a l M^3ToolEval M3ToolEval 来填补这一空白,它评估了 LLM 解决复杂任务的能力,这些复杂任务通常需要在多轮交互中多次调用多个工具。它包含 82 个人工挑选的实例,涵盖网页浏览、金融、旅行行程规划、科学和信息处理等任务。每个领域都伴随着一组独特的手工制作的工具。我们有意保持提示简单(示例见§F),并避免提供任何演示样例来测试 LLM 使用工具的零样本能力,类似于不了解小样本提示的新手用户使用该模型的方式。
  Setup。我们允许模型生成功能齐全的 Python 代码,以实现控制和数据流(例如,if 语句、for 循环)。我们也遵循表 A.6 中描述的 JSON 和文本的操作格式。在每个轮次中,模型可以发出一个操作或提出一个答案,通过与实际正确解决方案的精确匹配进行验证。当达到最多 10 个交互轮次或提交了正确的解决方案时,交互将终止,类似于(Wang et al., 2023e)。
  Metric。我们通过计算模型提出答案与真实解决方案匹配的百分比来衡量成功率。我们还包括平均轮次指标:所有评估实例的平均对话次数。
  Quantitative Results on M 3 T o o l E v a l M^3ToolEval M3ToolEval。我们在表 3 中包含了完整结果,并在图 1 中包含了可视化结果的子集。CodeAct 通常具有更高的任务成功率(在评估的 17 个 LLM 中为 12 个),类似于 §2.2 中的趋势。此外,使用 CodeAct 需要的平均轮次数较低(在评估的 17 个 LLM 中为 12 个)。例如,与下一个最佳动作格式(文本)相比,最佳模型 gpt-4-1106-preview 实现了 20.7% 的绝对改进,同时平均需要的交互回合数减少了 2.1 个。然而,在绝对 CodeAct 性能方面,开源和闭源 LLM 之间仍然存在显著差距,因为最佳开源模型实现了 13.4%,而最佳闭源模型 gpt-4-1106-preview 实现了 74.4%。这可能是由于开源模型的任务解决能力弱,并且无法在没有演示样例的情况下遵循复杂的指令,这表明迫切需要改进开源 LLM 以适应零样本设置下的实际现实任务。

2.4 CodeAct Benefits from Multi-turn Interactions and Existing Software Packages

在这里插入图片描述
  在图 3 中,我们展示了 LLM Agent如何与 Python 集成(即我们在 §3.2 中训练的 CodeActAgent),并使用现有软件在多轮交互中执行复杂任务。得益于在预训练期间学习到的丰富的 Python 知识,LLM Agent可以自动导入正确的 Python 库来解决任务,而无需用户提供的工具或演示。如图 3 所示,CodeActAgent 可以使用 Pandas 下载和处理表格数据,使用 Scikit Learn 进行机器学习训练测试数据拆分和回归模型训练,并使用 Matplotlib 进行数据可视化。此外,使用交互式 Python 解释器执行代码可以自动显示错误消息,帮助 LLM Agent在多轮交互中“自我调试”其操作,并最终正确完成人类用户的请求。

3. Empowering Open-source LLM Agent to be Better at CodeAct

CodeAct 取得的良好结果激励我们构建一个开源 LLM Agent,它既可以通过 CodeAct 与环境交互,也可以使用语言与人类交流。为了提高开源 LLM 的 CodeAct 能力,我们在 §3.1 中引入了 CodeActInstruct,这是一个包含Agent-环境交互轨迹的指令微调数据集。我们在 §3.1 中讨论了数据选择过程,以促进交互行为的改进。此外,我们表明 CodeAct 可以与现有的Agent-用户对话数据(§3.1)一起使用,以平衡生成的 LLM 的对话能力。我们的模型 CodeActAgent 是在 LLaMA-2 和 Mistral-7B 上对 CodeActInstruct 和通用对话的混合进行微调的,它提高了 CodeAct 的性能,而不会损害 LLM 在各种任务上的性能(§3.2)。

3.1 CodeActInstruct: Agent-Environment Interactions

3.2 CodeActAgent

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值