论文地址
https://arxiv.org/pdf/2402.01030.pdf
项目地址
https://github.com/svjack/CodeActAgent-Gradio/blob/main/README.md
代码智能体的优势
选择代码智能体有以下几个关键原因,它们相较于使用类似JSON的字典输出具有显著优势:
1. 代码的高效表达
如同Wang等人(2024)所展示的那样,代码在表达复杂操作序列方面极其高效。相比之下,JSON虽然也能表达操作序列,但其表现形式冗长且复杂。代码能够更加简洁地描述操作步骤,这使得其在处理复杂任务时更加理想。
2. 简洁性
代码操作比JSON简洁得多。例如,需要运行4个并行的5个连续操作流时,在JSON中你需要生成20个JSON块,每个在其独立的步骤中;而在代码中,这只需1步即可完成。这种简洁性不仅减少了操作步骤,还降低了错误发生的概率。
3. 成本效益
平均而言,使用代码操作比使用JSON减少了30%的步骤,相当于生成的tokens减少了30%。由于大语言模型(LLM)的调用通常是智能体系统的主要成本,减少30%的tokens意味着智能体系统的运行成本也减少了约30%。
4. 重用性
代码允许重用常见库中的工具,这进一步简化了开发和维护过程。通过调用已有的库函数或方法,开发者可以更加高效地构建和扩展智能体的功能。
5. 更好的基准测试表现
在基准测试中,代码通常表现更好,这主要有两个原因:
- 代码是一种更直观的表达操作的方式。
- LLM的训练数据中包含大量代码,这可能使得它们在编写代码方面比编写JSON更为流畅。
6. 变量管理的便利性
在代码中存储一个命名变量要容易得多。例如,需要存储一个由工具生成的岩石图像以供以后使用,可以轻松使用“rock_image = image_generation_tool(“A picture of a rock”)”将变量存储在变量字典中的“rock_image”键下。之后,LLM可以通过再次引用“rock_image”来在任何代码块中使用其值。
相比之下,在JSON中你需要进行复杂的操作来创建一个名称来存储这个图像,以便LLM以后知道如何再次访问它。例如,将图像生成工具的任何输出保存为“image_{i}.png”,并相信LLM稍后会理解image_4.png是内存中之前调用工具的输出?或者让LLM也输出一个“output_name”键来选择存储变量的名称,从而使你的操作JSON的结构变得复杂化。
7. 可读性
智能体日志的可读性大大提高。使用代码记录下来的操作步骤更容易理解和调试,这对开发和维护智能体系统非常重要。
如下是原文翻译
摘要
大型语言模型(LLM)代理,能够执行广泛的操作,例如调用工具和控制机器人,在解决现实世界的挑战方面显示出巨大的潜力。通常,LLM代理通过生成JSON或预定义格式的文本来产生行为,这通常受限于有限的操作空间(例如,预定义工具的范围)和有限的灵活性(例如,无法组合多个工具)。本研究提出使用可执行的Python代码将LLM代理的操作整合到一个统一的操作空间(CodeAct)。通过集成Python解释器,CodeAct可以执行代码操作,并通过多轮交互根据新的观察结果动态调整先前的操作或发出新的操作。
我们对17个LLM在APIBank和一个新创建的基准上的广泛分析显示,CodeAct的表现优于广泛使用的替代方案(成功率提高最多可达20%)。CodeAct的出色表现激励我们构建一个开源的LLM代理,该代理通过执行可解释的代码与环境交互,并使用自然语言与用户协作。为此,我们收集了一个包含7千次使用CodeAct的多轮交互的指令调优数据集CodeActInstruct。我们表明,它可以与现有数据一起使用,以改进面向代理的任务中的模型,而不会损害其通用能力。CodeActAgent通过在Llama2和Mistral上的微调,集成了Python解释器,并专门用于使用现有库和自主调试来执行复杂任务(例如,模型训练)。
介绍
大型语言模型(LLMs)已经成为自然语言处理(NLP)领域的关键突破。当它们与允许访问API的动作模块结合时,其动作空间超越了传统的文本处理范畴,使得LLMs具备诸如工具调用和内存管理的能力(Mialon等,2023;Schick等,2023),并能够涉足如机器人控制(Ahn等,2022;Huang等,2023;Ma等,2023)和进行科学实验(Bran等,2023)等现实世界任务。我们探讨:如何有效扩展LLM代理的动作空间,以解决复杂的现实世界问题?现有许多研究已经通过使用文本(Yao等,2022b;Park等,2023等)或JSON(Qin等,2023b;Chase,2022等)来生成动作(例如,图1左上角的工具使用)。然而,这两种方法通常面临受限的动作空间(动作通常为特定任务量身定制)和有限的灵活性(例如,无法在单个动作中组合多个工具)。作为一种替代方法,一些研究(Liang等,2022;Singh等,2023;Wang等,2023a)展示了使用LLMs生成代码来控制机器人或游戏角色的潜力。然而,这些方法通常依赖于预先指定的控制原语和手工设计的提示,更重要的是,它们难以根据新的环境观察和反馈动态调整或发出动作。本研究提出了CodeAct,一个通用框架,允许LLMs生成可执行的Python代码作为动作(图1右上角)。CodeAct旨在处理各种应用,并具备独特的优势:
- 集成了Python解释器,CodeAct可以执行代码动作,并根据多轮交互中接收到的观察结果(例如代码执行结果)动态调整先前的动作或发出新动作。
- 代码动作允许LLM利用现有的软件包。CodeAct可以使用现成的Python包来扩展动作空间,而不是手工制作的特定任务工具