MetaGPT Agent详解 | 豆包MarsCode AI 刷题

292 阅读7分钟

MetaGPT论文阅读总结

心智不需由具有智能的单独部件构成,反而是由一系列简单部件的相互作用集结而成的复杂系统,正是这种集结,催生了我们所认识的智能和意识。 ——马文·明斯基《心智社会》

1、metaGPT简介

随着大型语言模型(LLM)在各个领域取得突破,利用 LLM 驱动的多代理在自动化任务解决方面取得了显着进展。然而,现有的工作主要集中在简单任务上,对于复杂任务的探索和解决仍存在挑战。为了解决这个问题,DeepWisdom 公司开发了MetaGPT框架,将有效的人类工作流程作为元编程方法注入到LLM驱动的多代理协作中。

MetaGPT 的核心思想是赋予不同的 LLM 代理明确的角色定位,可以扮演工程师、产品经理、架构师、项目经理等角色。MetaGPT只需输入一句BOSS的需求,即可输出用户故事 / 竞品分析 / 需求 / 数据结构 / APIs / 文件等。下图是MetaGPT在内部通过prompt实现的一个完整的软件开发团队:

image.png

2、metaGPT的实现原理

MetaGPT在系统中定义了几种角色,并为每种角色配备了目标和prompt模板,以此引导相关角色解决相应问题,主要的角色包括:

角色目标可以的行动观察的输入
产品经理目标是创造一个成功的产品写产品需求文档观察老板是否有新的需求
架构师根据产品需求文档设计系统架构设计文档产品经理是否有新需求
项目经理目标是提升团队效率根据设计文档完成任务分解观察是否有新的设计任务
工程师根据项目经理分解的任务完成代码和评审写代码/代码评审项目经理分解的任务
QA工程师根据代码的输出和测试代码输出以及运行结果输出测试方案写测试用例代码结果和代码运行结果

从上面的表格总结可以知道,MetaGPT通过定义几种角色来完成初始需求的一步步实现过程。总的入口就是老板的需求,接下来各个角色会根据这个原始需求按照上述步骤进行处理。

在软件工程实践中,SOP促进不同角色之间的协作。MetaGPT展示了其将复杂任务分解为分配给不同角色(如产品经理、架构师、工程师等)的特定可操作程序的能力,如下图所示:

image.png

MetaGPT一个有意思的设定是它为每种角色定义了一个单独的“进程”运行。每一个角色在运行中都是等待是否有相应的输入出现,一旦观察到相应的输入就会立马根据自己的目标,使用大模型来解决这个问题,并将结果返回到系统中。系统的其它角色一旦监听到有关于自己的任务输入,那就可以获取任务进行执行了。这个也与我们实际的开发流程和组织架构十分相似。

此外,为了让每个角色有更强大能力,MetaGPT还设置了额外的角色帮助系统完成任务,包括搜索角色、prompt分解角色等。

3、metaGPT创新点

3.1 角色专业化

明确的角色专业化可以将复杂的工作分解为更小和更具体的任务。解决复杂的任务或问题通常需要具有不同技能和专业知识的Agent的协作,每个Agent都为特定问题提供专门的输出。如下图所示,不同专业的角色,初始化为不同的目标和约束,以及不同的专业技能。如产品经理角色可以使用网络搜索工具,而工程师角色可以执行代码。与此同时,每个角色都默认遵循 ReAct 的行为模式。

角色专业化使得每个智能体能够专注于其领域内的具体任务,从而提升了 LLMs 的输出质量。对于软件开发而言,通过角色的流转,这种分工更巧妙地完成了从自然语言到编程语言的对齐。论文中的角色消融实验进一步证明了这一部分的效果。

3.2 通信协议设计

结构化通信:当前基于LLM的多智能体框架大多利用不受约束的自然语言作为通信接口。 然而,尽管自然语言具有多功能性,但出现了一个问题:纯自然语言交流是否足以解决复杂的任务?例如,在电话游戏中,经过几轮交流后,原始信息可能会相当失真。为解决这一问题,作者约束智能体以结构化的输出(包括文档和图表)参与协作,来提高信息的清晰度和完整性。为验证这一设计,作者设计了多种软件开发任务,通过生成代码的可执行性以及生产力指标强调结构化输出在协作中的关键性。

发布-订阅机制:在多智能体协作过程中,为提高通信效率,MetaGPT 引入了基于消息共享的发布 - 订阅机制(Publish-Subscribe Mechanism)。如图所示,共享消息池允许直接交换消息,任何智能体都可以透明地访问来自其他智能体的消息,无需询问并等待响应。订阅机制使智能体更倾向于接收与自我任务相关的信息,避免分心于不相关的细节。同时,每个智能体可直接从共享消息池中检索所需信息,形成自我记忆。

image.png

3.3 可执行反馈

智能体根据环境反馈进行自我优化和主动更新,是智能体具备自主意识的表现。在软件开发任务上,MetaGPT 为工程师的智能体设计了可执行反馈机制,以进行代码质量自动优化。具体而言,工程师编写并执行相应的单元测试用例,通过观察到的执行结果,递归地进行决策和自我提示,实现自动 debug。这种设计 - 测试 - 反馈的迭代过程持续进行,直到单元测试通过或达到最大重试次数。

4、metaGPT内置技能

显然,上述分析我们可以看到MetaGPT最本质的方案是预置多种角色,这些角色都有自己的目标以及输入和输出,它会根据环境中观察的与自己相关的输入来处理。

那么,这些角色有哪些能力和技能呢?根据metaGPT的仓库actions文件目录下可以看到,其共有二十多种技能。这里技能都是一个单独的文件,每一个角色都可以通过引入这种技能来增强自己的能力:

  • 添加需求:add_requirement.py
  • debug:debug_error.py
  • 设计api:design_api.py
  • api评审:design_api_review.py
  • 设计文件名:design_filenames.py
  • 项目管理:project_management.py
  • 代码运行:run_code.py
  • 搜索和摘要:search_and_summarize.py
  • 写代码:write_code.py
  • 写代码评审:write_code_review.py
  • 写需求说明书:write_prd.py
  • 写需求说明书评审:write_prd_review.py
  • 写测试用例:write_test.py

简单来说,上面每一个技能都对应一个py文件,每一个py文件里面定义的都是对应技能的prompt模板。最终各个角色都是通过自己所有你有的这些技能来处理输入和输出,完成任务。

5、实验

在代码生成能力上,作者采用了两个公开基准数据集:HumanEval 和 MBPP,并报告 Pass@1 指标。另外,他们还收集了涵盖 70 个典型软件开发任务(如迷你游戏、数据可视化、图像处理等)的数据集 SoftwareDev,并进行了多个智能体开源框架的对比,对多个软件开发任务的可执行性和生产效率上进行了统计分析和定性说明。

在具有挑战性的 SoftwareDev 数据集上,MetaGPT 在可执行性上的得分为 3.75,非常接近 4,而所需的运行时间较短 (503 秒);生成的代码行数相对基线框架增加了 2.24 倍,而单位代码行数所消耗的 token 数下降了 50%。这些结果突显了多智能体协作过程中 SOPs 带来的效率提升。

6、参考链接

论文链接:arxiv.org/abs/2308.00…

代码链接:github.com/geekan/Meta…

Demo链接:huggingface.co/spaces/deep…

指导文档:docs.deepwisdom.ai/main