MetaGPT:使GPT以软件公司的形式工作
一项名为MetaGPT的研究,通过对智能体角色进行明确分工,并要求多个智能体在协作中采用统一规范的“交流格式”等方法,让智能体性能大增。总的来说,MetaGPT是模仿人类的分工协作方式,将各种任务的标准操作流程编码为智能体的“规范手册”,不同角色的智能体负责不同的专业任务。
比如产品经理角色可以使用网络搜索工具,而工程师角色可以执行代码:
研究人员甚至还为智能体们设置了一个“消息共享群”,不同角色的智能体可以在“群”里自由查看和自我任务相关的其他智能体发送来的消息。
MetaGPT要求智能体以专家形式参与协作,并按要求生成结构化的输出,例如高质量的需求文档、架构设计图和流程图等。结构化的输出对于单个智能体即是更高层次的思维链(Chain-of-Thought),对于下游角色则是语义清晰、目标明确的上下文(Context)。
在MetaGPT的框架中,研究人员将SOPs的概念对齐至角色专业化、通信协议设计以及迭代式的可执行反馈设计。
角色专业化
通过明确定义的角色分工,复杂的工作得以分解为更小、更具体的任务。如下图所示,不同专业的角色,初始化为不同的目标和约束,以及不同的专业技能。如产品经理角色可以使用网络搜索工具,而工程师角色可以执行代码。与此同时,每个角色都默认遵循ReAct的行为模式。角色专业化使得每个智能体能够专注于其领域内的具体任务,从而提升了大模型的输出质量。对于软件开发而言,通过角色的流转,这种分工更巧妙地完成了从自然语言到编程语言的对齐。论文中的角色消融实验进一步证明了这一部分的效果。
通信协议设计
在实际应用中,自然语言虽然具备语义的丰富性,但由于其非结构化的特性,在消息传递过程中常常会导致信息的歪曲甚至重要内容的丢失。为解决这一问题,作者约束智能体以结构化的输出(包括文档和图表)参与协作,来提高信息的清晰度和完整性。为验证这一设计,作者设计了多种软件开发任务,通过生成代码的可执行性以及生产力指标强调结构化输出在协作中的关键性。在多智能体协作过程中,为提高通信效率,MetaGPT引入了基于消息共享的发布-订阅机制(Publish-Subscribe Mechanism)。
如上图所示,共享消息池允许直接交换消息,任何智能体都可以透明地访问来自其他智能体的消息,无需询问并等待响应。订阅机制使智能体更倾向于接收与自我任务相关的信息,避免分心于不相关的细节。同时,每个智能体可直接从共享消息池中检索所需信息,形成自我记忆。
可执行反馈
智能体根据环境反馈进行自我优化和主动更新,是智能体具备自主意识的表现。在软件开发任务上,MetaGPT为工程师的智能体设计了可执行反馈机制,以进行代码质量自动优化。具体而言,工程师编写并执行相应的单元测试用例,通过观察到的执行结果,递归地进行决策和自我提示,实现自动debug。这种设计-测试-反馈的迭代过程持续进行,直到单元测试通过或达到最大重试次数。
在代码生成能力上,研究人员采用了两个公开基准数据集:HumanEval和MBPP,并报告Pass@1指标。
另外,他们还收集了涵盖70个典型软件开发任务(如迷你游戏、数据可视化、图像处理等)的数据集SoftwareDev,并进行了多个智能体开源框架的对比,对多个软件开发任务的可执行性和生产效率上进行了统计分析和定性说明。
MetaGPT不仅具备多种模态的文件生成能力,也是目前众多框架中唯一完整覆盖了真实世界中软件开发过程的开源框架。
论文:https://arxiv.org/abs/2308.00352
代码:https://github.com/geekan/MetaGPT