Executable Code
Executable Code Actions Elicit Better LLM Agents
https://arxiv.org/pdf/2402.01030.pdf
一个完整的代码交互流程: https://chat.xwang.dev/conversation/Vqn108G
代码已经开源:https://github.com/xingyaoww/code-act
收集了一个指令调优数据集 CodeActInstruct,由使用 CodeAct 的 7k 多轮交互组成。数据集发布于huggingface:https://huggingface.co/datasets/xingyaoww/code-act
- 一个Agent系统的CodeAct,简单来说就是让LLM生成python代码作为行动。
- 不仅可以执行产出的代码,还能对于代码运行产生的问题做修正。
- 作者在17个LLM上面做了实验发现CodeAct表现的非常不错。
- CodeActAgent从LLaMA2和Mistral上微调而来,整合了python解释器,可以只用现有的库和自动的debug针对精确的任务定制化。
整体架构没什么新鲜的,对比的方法主要是输出json的Agent,以及输出text的Agent,图1显示了text/json/code的交互形式对比、成功率对比、交互次数对比,显然Code的成功率普遍高了20%,交互次数普遍少了30%
对比text/json/code
- 分析了一下目前大部分模型都可以输出Code,不是什么新鲜事情
- 相比较输出json和text,Code可以支持控制和数据流,对于复杂的逻辑操作可以很轻易的实现,解锁LLM解决复杂任务的能力。
- 创建了一个Benchmark:包括82个人类组织的任务,一共7k条高质量的多轮交互轨迹,特别需要多次调用多个工具多个交互的。
- 无需in-context demonstrations
CodeAct的核心策略包括:
(1)使用Python代码统一LLM代理的动作空间(CodeAct)。
(2)利用Python解释器执行代码动作,允许动态调整和自我调试。
(3)通过多轮交互,根据环境反馈(如错误消息)进行自我改进。
(4)收集了一个名为CodeActInstruct的指令调整数据集,包含7k个使用CodeAct的多轮交互轨迹。
(5)开发了CodeActAgent,一个经过细化的LLM代理,能够通过执行可解释的代码与环境交互,并使用自然语言与用户协作。
CodeAct流程图
文章主体讨论
- CodeAct对Code比较熟悉是因为Code的pre-training吗:
是的
These models are already familiar with structured programming languages, allowing cost-effective adoption of CodeAct.
- CodeAct是否得益于python内在的控制和数据流功能(可用于复杂任务):
是的
Compared to JSON and text with a pre-defined format, code inherently supports control and data flow, allowing for the storage of intermediate results as variables for reuse and the composition of multiple tools to perform complex logical operations (e.g., if-statements, for-loops) with one piece of code, thereby unlocking LLMs’ potential to tackle complex tasks by leveraging its pre-trained knowledge of programming.
- 最后讨论了CodeAct进一步优化了LLM agent的多轮交互能力。
它能够利用现有的Python软件包来执行复杂的任务,如模型训练和数据可视化。环境的错误消息进一步使得CodeActAgent能够在多轮交互中自主地通过自我调试来纠正错误。
- (Table 2)主要展示了在API-Bank基准测试中,使用不同动作格式(CodeAct、JSON、文本)的17个大型语言模型(LLM)在API调用性能上的比较。这个表格评估了每种格式在原子API调用正确性方面的表现,并突出了CodeAct相对于其他两种格式的优势。
- (Table 3)主要展示了在M3ToolEval基准测试中,使用不同动作格式(CodeAct、JSON、文本)的多个开源和闭源大型语言模型(LLM)在解决复杂任务时的性能表现。这个表格评估了每种格式在多轮交互中解决问题的成功率(Success Rate)以及平均所需的交互轮数(Avg. Turns)。
复现实验
参考github文档,包括数据生成,模型训练和评估
https://github.com/xingyaoww/code-act?tab=readme-ov-file#-reproduce-experiments-in-the-paper