MetaGPT技术要点与开源模型实践
MetaGPT名字来源于“GPT-based Meta-Programming framework”,也就是说,MetaGPT是一种元编程框架。它利用标准化操作程序(SOP)来增强基于大型语言模型(LLM)的多智能体系统的问题解决能力。该框架模拟了一个虚拟软件团队,包含产品经理、架构师、项目经理、工程师、质量工程师等角色。
MetaGPT将高效的人工工作流融入到基于LLM的多智能体协作中,SOP编码做为提示序列,以实现更精简的工作流程,从而允许具有类似人类领域专业知识的agent验证中间结果并减少错误。这些SOP在支持任务分解和有效协调方面发挥着关键作用。
MetaGPT要求agent生成结构化输出,例如高质量需求文档、设计工件、流程图和接口规范。这些中间结构的输出显著提高了目标代码生成的成功率(这其实就是更高层次的CoT),并降低了LLM之间交流引起幻觉的风险。
与主流Agent项目(AutoGPT、LangChain、AgentVerse、ChatDev等)相比,MetaGPT在处理更高级别软件复杂性和提供广泛功能方面也很突出。
相较于其他Agent项目MetaGPT有以下几个重要的创新机制:
角色专业化
明确的角色专业化可以将复杂的工作分解为更小、更具体的任务。MetaGPT指定了agent的角色(名字、简介、目标和约束),还初始化了每个角色的特定上下文和技能。例如,产品经理可以使用网络搜索工具,而工程师可以执行代码。
论文也对角色进行了消融实验,结果表明,随着角色的丰富,尽管花费会增加,但由此带来的性能增益远大于增加的费用开销。
工作流/SOP
在软件开发中遵循SOP,这使所有agent都能以顺序的方式工作。在获得用户需求后,产品经理会进行细致的分析,制定一个详细的PRD,其中包括用户故事和需求池。这是一个初步的功能分解。
然后将结构化的PRD传递给架构师,架构师将需求转换为系统设计组件,如文件列表、数据结构和接口定义。一旦在系统设计中捕捉到信息,信息就会被引导到项目经理处进行任务分配。
工程师继续执行指定的类和功能,在接下来的阶段,QA工程师制定测试用例,以增强代码质量。
通过纳入SOP就如同向LLM注入思维连(CoT),可以显著增强代码生成能力。
结构化通信接口
先前的Multi-Agent项目使用无约束的自然语言做为通信接口,但这可能会导致像“传话游戏”一样扭曲原始信息。
而MetaGPT通过文档和图表等结构化输出进行交流,能够显著降低原始信息扭曲的风险。
发布-订阅机制
MetaGPT将信息存储在共享消息池(message pool)中。
共享消息池允许所有agent直接交换消息。agent不仅在池中发布其结构化消息,而且透明地访问来自其他agent的消息。任何agent都可以直接从共享池中检索所需信息,无需询问其他agent并等待其响应,通信效率大大提高。
在任务执行期间,订阅机制(subscription mechanism)能够让agent倾向于只接收与任务相关的信息,并避免因不相关的细节而分心。例如,架构师主要关注产品经理提供的PRD,而来自质量工程师等角色的文件可能不太受关注。
程序迭代与可执行反馈
MetaGPT探索了一种自参考机制(self-referential mechanism),该机制根据agent在软件开发过程中观察到的信息递归地修改agent的约束提示。这使得工程师能够利用自身的历史执行和调试记忆持续改进代码。为了获得更多信息,工程师编写并执行相应的单元测试用例,随后接收测试结果。如果结果令人满意,就会启动额外的开发任务。否则继续调试。这种迭代测试过程持续进行,直到测试通过或达到最多3次重试。这种程序迭代策略显著提高了代码生成质量(MBPP的绝对改进率为5.4%)。
开源模型实践
使用 FastChat对本地开源模型进行类OpenAI API封装。
# 安装fastchat
pip3 install "fschat[model_worker,webui]"
# 启动控制台
python3 -m fastchat.serve.controller
# 使用Llama-2-13b
python3 -m fastchat.serve.model_worker --model-path meta-llama/Llama-2-13b-chat-hf
# 启用RESTful API Server
python3 -m fastchat.serve.openai_api_server --host localhost --port 8000
安装MetaGPT。
# 由于metagpt与fastchat的依赖库冲突,需另外创建一个python(3.9+)环境
# 克隆仓库,可以选择发布版本分支
git clone https://github.com/geekan/MetaGPT.git
# 开发模式安装
cd MetaGPT
pip3 install -e .
在 MetaGPT/config文件夹下新建key.yaml文件,添加以下内容:
OPENAI_BASE_URL: "http://localhost:8000/v1"
OPENAI_API_KEY: "sk-xxx"
OPENAI_API_MODEL: "Llama-2-13b-chat-hf"
MAX_TOKENS: 4096
极简运行。
metagpt “Create a 2048 game”