实验结果
作者将 self-collaboration 代码生成与各种最先进(SOTA)方法进行比较,实验结果表明,self-collaboration 框架显著提高了基础大模型的性能。值得注意的是,即使是一个简单的三人团队(包括分析师、程序员和测试员),基于 ChatGPT (GPT-3.5) 的 self-collaboration 代码生成在四个代码生成基准测试中也取得了最佳性能,甚至超过了 GPT-4。与 ChatGPT (GPT-3.5) 相比,self-collaboration 框架提供的改进是巨大的,相对增幅从 29.9% 到 34.6% 不等。
值得注意的是,self-collaboration 代码生成对与扩展测试用例相关的数据集(即 HumanEval-ET 和 MBPP-ET)产生了更显著的改进。这表明 self-collaboration 可以有效地帮助基础大模型生成更高质量的代码。这种增强可能归因于合作团队可以考虑更广泛的边界条件和解决常见错误的能力。考虑到基础大模型本身的差距,将 self-collaboration 框架应用于更强大的模型,例如 GPT-4,将产生更好的结果。
作者进一步研究了仅使用自然语言描述的代码生成,这种设置更贴近实际的软件开发。在此设置下,作者比较了由 self-collaboration 框架实例化的初等团队中每个 ChatGPT 角色的表现,如表 2 所示。
实验结果表明,与仅使用程序员角色相比,无论是二位角色还是三位角色组建的团队,性能都有显著提高。程序员 - 分析师 - 测试员团队在 HumanEval 和 HumanEval-ET 基准测试中取得了最好的成绩,相对改进分别为 40.8% 和 47.1%。相比之下,编码器 - 测试员团队在 MBPP 和 MBPP-ET 基准测试中获得了最高性能,相对改进分别为 36.7% 和 39.4%。分析师在 MBPP 和 MBPP-ET 基准上的表现不佳可能是由于 MBPP 的要求相对简单,所以对规划较少(但是随着问题的复杂化,规划是不可或缺的一部分)。此外,MBPP 中各种任务的大量测试用例偏离了人类典型的书写习惯和推理过程,例如程序返回不常用的数据格式而而没有任何自然语言提示。因此,作者认为应该定制特定任务的团队以实现最佳结果。
此外,作者展示了一个 self-collaboration 代码生成示例,如图 3 所示。
1. 分析师进行全面分析并制定 plan 以解决整体需求。对于这个需求,分析师首先将其拆分为几个易于解决的子任务,然后根据子任务给出一些高层次的 plan。2. 程序员根据给定的要求以及设计的拆分和高层次 plan 实现代码。显而易见,已实现代码中的每个子模块都与拆分和高层次 plan 几乎一一对应。3. 测试员为实现的代码编写详细的测试报告,找出其中的错误。在这份测试报告中,测试人员指出所实现的代码可能会导致从列表中删除重复元素,从而可能导致某些边缘测试用例失败。因此,建议从实现的代码中删除行 “lst = list (set (lst))”。4. 程序员随后根据测试报告中提供的反馈完善了代码。在编码器提供的修改后的代码中,整合了测试报告中的建议,并同时删除了 “lst = list (set (lst))” 行。5. 测试员评估修改后的代码,确认没有任何问题,至此代码生成过程结束。在最后一次交互中,测试员确认修改后的代码已经通过所有测试,满足要求。
总之,self-collaboration 框架在代码生成任务中表现出显著的性能提升,与单一角色相比,多角色团队能够更有效地处理各种问题和挑战。这种方法为自然语言处理和代码生成领域提供了新的研究方向,值得进一步探讨和优化。未来的工作可能包括对更多角色和更强大模型的探索,以及将 self-collaboration 框架应用于其他自然语言处理任务。
结论
在本文中,作者提出了一种 self-collaboration 框架,其目的是通过合作和交互方法来增强大模型的问题解决能力。具体而言,作者探索了 ChatGPT 在促进基于团队的代码生成和合作方面的软件开发过程中的潜力。为此,作者组建了一个由三个不同的 ChatGPT 角色组成的初等团队,目的是全面解决代码生成任务。为了评估 self-collaboration 框架的有效性和泛化性能,作者针对各种代码生成基准进行了广泛实验。实验结果提供了大量证据支持 self-collaboration 框架的有效性和普适性。作者认为,使模型能够组建自己的团队并合作完成复杂任务是实现人工通用智能(AGI)的关键一步。