生成代码的Agent基线、对比指标、数据集研究
利用大型语言模型(LLM)代理进行自动代码生成的最新进展使我们更接近自动化软件开发的未来。然而,现有的单代理方法由于上下文长度的限制,在生成和改进大规模、复杂代码库方面存在局限性。为了解决这一挑战,我们提出了自组织多代理框架(SoA),这是一种新颖的多代理框架,能够实现大规模代码的可扩展和高效生成与优化。在 SoA 中,自组织代理独立地生成和修改代码组件,同时无缝协作来构建整个代码库。我们框架的一
生成代码的Agent基线、对比指标、数据集研究
自组织代理:LLM 多代理框架 超大规模代码生成和优化【1】
利用大型语言模型(LLM)代理进行自动代码生成的最新进展使我们更接近自动化软件开发的未来。然而,现有的单代理方法由于上下文长度的限制,在生成和改进大规模、复杂代码库方面存在局限性。为了解决这一挑战,我们提出了自组织多代理框架(SoA),这是一种新颖的多代理框架,能够实现大规模代码的可扩展和高效生成与优化。在 SoA 中,自组织代理独立地生成和修改代码组件,同时无缝协作来构建整个代码库。我们框架的一个关键特点是根据问题的复杂性自动增加代理数量,从而实现动态可扩展性。这使得代码总量可以根据代理数量无限增加,而每个代理所管理的代码量保持不变。我们在 HumanEval 基准上对 SoA 进行了评估,并证明与单代理系统相比,SoA 中的每个代理处理的代码量显著减少,但生成的总体代码量却大幅增加。此外,SoA 在“准确率@1”的指标上比强大的单个智能体基准模型高出 5%。https://github.com/tsukushiAI/self-organized-agent
图 4:SOA 框架概述。母代理和子代理以层级结构构建网络,并执行功能生成和修改工作。母代理将任务委托给其他母代理或子代理,而每个代理都独立执行任务,并有效地作为一个整体来实现单一功能。
基准测试 我们将 SoA 与几种最先进的代码生成方法进行了比较,这些方法包括 AlphaCode(Li 等人,2022 年)、Incoder(Fried 等人,2023 年)、Codex(Chen 等人,2021 年)、CoT(Wei 等人,2022 年)和 Gemini Pro(Anil 等人,2023 年)。此外,我们还评估了各种基于 GPT-3.5 的代理的性能,例如 ChatGPT、Self-Edit(Zhang 等人,2023 年)和 Reflexion(Shinn 等人,2023 年)。这些基准测试旨在代表多种方法,包括单代理和多代理系统,以及具有和不具有自我调试能力的系统。
代理配置 为了评估 SoA 框架的有效性,我们选择了 Reflexion 代理作为基准。Reflexion 会根据给定的文档注释和自动生成的单元测试逐步修改代码,直到达到最大迭代次数或通过单元测试。Reflexion 和 SoA 的主要区别在于,Reflexion 由单个代理组成,而 SoA 由自组织的多个代理组成。在 SoA 配置中,我们将学习循环的最大迭代次数设置为 8,最大树深度设置为 2。此外,按照(Shinn 等人,2023 年)的做法,我们向 LLM 提供了少量样本轨迹。
数据与任务 为了评估自动代码生成的性能,我们采用了 HumanEval(Chen 等人,2021 年)基准测试。HumanEval 是一个包含多种编程问题的集合,旨在衡量生成代码的功能正确性。我们使用 Python 语言进行评估,并遵循 Reflexion(Shinn 等人,2023 年)的评估方法。在这个过程中,为每个生成的代码创建了多个测试用例,并随机选取 n 个测试用例来构建测试套件。这个测试套件用于验证生成的代码是否功能正确。我们为 Reflexion 设定了 6 个单元测试,为 SoA 设定了 1 个单元测试。
主要成果 表 1 比较了所提出方法与基准方法在 Pass@1 准确率方面的表现。将 SoA 与基准方法(即强基准方法反射)进行对比,发现 SoA 在 Pass@1 上的准确率比反射方法高出 5%。考虑到 SoA 中的每个代理都无法看到整个代码,这一结果令人惊讶。这一结果表明,自组织代理能够生成整体功能良好的代码,而无需进行监督。 整个代码是通过各自独立地实现分配给它们的功能而构成的。
表 1:在 HumanEval 上的 SoA 和基准测试结果。ChatGPT 的得分取自 Dong 等人(2023 年)的研究。SD 表示该代理是否使用单元测试进行自我调试,而 SO 表示该代理是否采用自组织多代理协作方式。
图 5:SOA(多智能体)与反射(单智能体)在代码生成量方面的对比。
反思:具备语言强化学习能力的智能体【2】
大型语言模型(LLMs)已越来越多地被用作目标驱动型的外部环境(如游戏、编译器、API)的交互工具。然而,这些语言型智能体要快速且高效地从试错中学习仍颇具挑战性,因为传统的强化学习方法需要大量的训练样本和昂贵的模型微调。我们提出了“反射”这一新颖框架,通过语言反馈而非更新权重来强化语言智能体。具体而言,反射型智能体会口头反思任务反馈信号,然后将自身的反思文本保存在情景记忆缓冲区中,以在后续试验中诱导更优的决策。反射框架具有足够的灵活性,能够整合各种类型的反馈信号(标量值或自由形式的语言)和来源(外部或内部模拟),并且在各种任务(顺序决策、编码、语言推理)中相对于基准智能体取得了显著的改进。例如,反射在人类评估编码基准测试中达到了 91% 的 1 分通过率,超过了之前最先进的 GPT-4 的 80% 的成绩。我们还通过使用不同的反馈信号、反馈整合方法以及代理类型进行了消融和分析研究,并对它们对性能的影响进行了深入探讨。我们将在 https://github.com/noahshinn024/reflexion 上公布所有代码、演示和数据集。
在这项研究中,我们提出了“反思”这一方法,该方法利用语言强化来教导智能体从过去的错误中吸取教训。我们通过实验证明,采用自我反思的“反思”型智能体在决策能力方面明显优于目前广泛使用的现有方法。在未来的研究中,“反思”技术可以用于应用在传统强化学习环境中经过深入研究的更高级技术,例如自然语言中的价值学习或非策略性探索技术。
DocAgent:用于自动代码文档生成的多代理系统【3】
高质量的代码文档对于软件开发至关重要,尤其是在人工智能时代。然而,使用大型语言模型 (LLM) 自动生成它仍然具有挑战性,因为现有方法通常会产生不完整、无益或事实不正确的输出。我们介绍了 DocAgent,这是一种新型多代理协作系统,使用拓扑代码处理来进行增量上下文构建。然后,专业代理(阅读者、搜索者、写入者、验证者、编排器)协作生成文档。我们还提出了一个多方面的评估框架来评估完整性、有用性和真实性。综合实验表明,DocAgent 的性能始终明显优于基线。我们的消融研究证实了拓扑处理顺序的重要作用。DocAgent 为在复杂和专有存储库中生成可靠的代码文档提供了一种强大的方法。
CodeAgent:使用工具集成代理系统增强代码生成,以应对现实世界的存储库级编码挑战【4】
大型语言模型 (LLM) 在自动代码生成方面显示出前景,但通常仅在生成独立代码单元等更简单的任务中表现出色。然而,现实世界的软件开发通常涉及具有复杂依赖关系和大量文档的复杂代码存储库。为了使 LLM 能够处理这些现实世界的存储库级代码生成,我们提出了 CodeAgent,这是一种基于 LLM 的新型代理框架,它采用外部工具进行有效的存储库级代码生成。CodeAgent 集成了五种编程工具,支持与软件工件进行交互,以进行信息检索、代码实现和代码测试。我们实施了四种代理策略来优化这些工具的使用。据我们所知,CodeAgent 是第一个专门用于存储库级代码生成的代理工具框架。为了衡量我们的方法在存储库级别的有效性,我们引入了一个基准数据集 CodAgentBench。该数据集的性能显示出我们的方法带来了显着的改进,通过率的提高范围为 2.0 至 15.8。对 HumanEval 基准测试的进一步测试证实了 CodeAgent 在各种代码生成任务中的适应性和有效性。值得注意的是,CodeAgent 的性能优于 Github Copilot 等商业产品,展示了卓越的准确性和效率。这些结果展示了 CodeAgent 在代码生成方面的强大能力,凸显了其应对现实世界存储库级编码挑战的潜力。
实验 我们进行了大量实验,以回答三个研究问题:(1)CODEAGENT 能在代码库级别的代码生成方面为先进的代码生成大型语言模型带来多大程度的提升(第 5.2 节);(2)我们的 CODEAGENT 在诸如 HumanEval 这样的传统代码生成方面有何改进(第 5.3 节);(3)在代理系统中我们所选择的工具在代码库级别的编码方面起到了多大程度的辅助作用(第 5.4 节)。
评估在代码上训练的大型语言模型【5】
我们介绍了 Codex,这是一种根据 GitHub 上公开可用的代码进行微调的 GPT 语言模型,并研究了它的 Python 代码编写能力。Codex 的独特生产版本为 GitHub Copilot 提供支持。在我们发布的新评估集 HumanEval 上,用于测量从文档字符串合成程序的功能正确性,我们的模型解决了 28.8% 的问题,而 GPT-3 解决了 0%,GPT-J 解决了 11.4%。此外,我们发现从模型中重复采样是一种非常有效的策略,可以针对困难的提示产生工作解决方案。使用这种方法,我们用每个问题 100 个样本解决了 70.2% 的问题。仔细研究我们的模型揭示了它的局限性,包括描述长作链的文档字符串和与变量绑定作的困难。最后,我们讨论了部署强大的代码生成技术的潜在更广泛影响,涵盖安全、安保和经济性。
Kulal 等人 (2019 年) 使用 pass@ k 指标评估功能正确性,其中 k 每个问题生成代码样本,如果任何样本通过单元测试,则认为问题已解决,并报告已解决问题的总比例。但是, k 以这种方式计算 pass@可能具有很大的方差。相反,为了评估 pass@ k ,我们为每个任务生成 n≥k 样本(在本文中,我们使用 n=200 和 k≤100 ),计算通过单元测试的正确样本 c≤n 数量,并计算无偏估计量
AutoScrum™:使用语言模型程序自动执行项目规划【6】
大型语言模型领域的最新进展使得使用语言模型进行高级推理成为可能。在本文中,我们利用这种能力来设计复杂的项目计划,仅基于了解当前状态和期望状态。演示了两种方法 - 基于 Scrum 的方法和捷径计划方法。基于 Scrum 的方法执行需求收集、用户故事映射、特征识别、任务分解的自动化过程,最后生成问题和搜索词,以查找特定领域的信息以协助完成任务。快捷方式方法查看当前和所需状态的最新快照,并生成下一个最合理的任务,以便尽快达到所需状态。在本文中,我们使用“语言程序”这一新概念实现了一切自动化。这些是用自然语言编写的程序,旨在通过语言模型处理输入数据。指导语言用于所有 LLM 程序。本文的所有演示源代码均可在 https://github.com/autoscrum/autoscrum
验收标准 我们可以利用目前所掌握的信息,为那些尚未设定验收标准的故事制定相应的验收标准。 在 Scrum 方法中,对于用户故事总是会设定验收标准,而这些标准既不适用于史诗级内容,也不适用于任务。验收标准 明确了用户故事得以完成所必须满足的具体条件。 虽然用户故事是从最终用户的视角来描述所需功能或特性的内容,但“接受”则指的是用户对这些功能或特性的认可程度。 该标准用于清晰地阐明每个用户故事的要求和期望。 为了自动为我们的用户故事生成相应的验收标准,我们可以利用这份清单。 手动确定的需求以及用户故事中的相关数据。 然后,我们针对每个用户故事运行“验收标准指导”程序。
AutoAgents:自动代理生成的框架【7】
大型语言模型 (LLM) 在多代理系统的自动化任务解决方面取得了显着进步。然而,大多数现有的基于 LLM 的多智能体方法都依赖于预定义的智能体来处理简单的任务,限制了多智能体协作对不同场景的适应性。因此,我们引入了 AutoAgents,这是一个创新的框架,可以自适应地生成和协调多个专业代理,根据不同的任务构建 AI 团队。具体来说,AutoAgents 通过根据任务内容动态生成多个所需的代理,并根据生成的专家代理为当前任务规划解决方案,将任务和角色之间的关系耦合起来。多个专业代理相互协作以有效地完成任务。同时,在框架中纳入观察员角色,以反思指定计划和代理人的反应并加以改进。我们在各种基准测试上的实验表明,与现有的多智能体方法相比,AutoAgents 生成的解决方案更加连贯和准确。这强调了为不同任务分配不同角色和团队合作的重要性,为处理复杂任务提供了新的视角。此项目的存储库可在此 https URL 中找到。
AgentCoder:基于多代理的代码生成,具有迭代测试和优化功能【8】
表 1:AgentCoder 与基线方法在 HumanEval、HumanEval-ET、MBPP 和 MBPP-ET 数据集上的端到端结果。最佳方法以粗体显示。基线结果来自其论文报告。用“-”表示结果缺失的情况。括号中的百分比是相对于基础 LLMs(零样本提示)的改进率。对于最后三行,没有基线优化方法报告在这些 LLM 上的有效性,因此,我们仅报告 AgentCoder 的结果。
使用大型语言模型进行程序合成【9】
本文探讨了当前一代用于通用编程语言程序合成的大型语言模型的局限性。我们在两个新基准 MBPP 和 MathQA-Python 上评估了此类模型的集合(参数在 244M 和 137B 之间),在少量和微调状态下。我们的基准测试旨在衡量这些模型从自然语言描述合成简短 Python 程序的能力。Mostly Basic Programming Problems (MBPP) 数据集包含 974 个编程任务,旨在供入门级程序员解决。MathQA-Python 数据集是 MathQA 基准测试的 Python 版本,包含 23914 个问题,用于评估模型从更复杂的文本合成代码的能力。在这两个数据集上,我们发现合成性能与模型大小呈对数线性缩放。我们最大的模型,即使没有对代码数据集进行微调,也可以使用少量学习和精心设计的提示来综合 MBPP 中 59.6% 的问题的解决方案。在大多数模型大小下,对数据集的保留部分进行微调可将性能提高约 10 个百分点。在 MathQA-Python 数据集上,最大的微调模型达到了 83.8% 的准确率。更进一步,我们研究了模型参与代码对话的能力,结合人类反馈来改进其解决方案。我们发现,与模型的初始预测相比,来自人类的自然语言反馈使错误率减半。此外,我们还进行错误分析,以阐明这些模型的不足之处以及哪些类型的程序最难生成。最后,我们通过微调这些模型来预测程序执行的结果,从而探索这些模型的语义基础。 我们发现,即使是我们最好的模型通常也无法预测给定特定输入的程序的输出。
参考文献
【1】自组织代理:面向超大规模代码生成与优化的大型语言模型多代理框架
https://arxiv.org/abs/2404.02183
【2】反思:具有语言强化学习的语言代理
https://papers.nips.cc/paper_files/paper/2023/hash/1b44b878bb782e6954cd888628510e90-Abstract-Conference.html
【3】DocAgent:用于自动代码文档生成的多代理系统
https://arxiv.org/abs/2504.08725v3
【4】CodeAgent:使用工具集成代理系统增强代码生成,以应对现实世界的存储库级编码挑战
https://openreview.net/forum?id=lKbx4trnc9F
【5】评估在代码上训练的大型语言模型
https://arxiv.org/abs/2107.03374
【6】AutoScrum™:使用语言模型程序自动执行项目规划
https://arxiv.org/abs/2306.03197
【7】AutoAgents:自动代理生成的框架
https://arxiv.org/abs/2309.17288v3
【8】AgentCoder:基于多代理的代码生成,具有迭代测试和优化功能
https://arxiv.org/abs/2312.13010
【9】使用大型语言模型进行程序合成
https://arxiv.org/abs/2108.07732
更多推荐
所有评论(0)