简介

最近朋友和 B 站都给我推 MetaGPT,正好有空就下载亲测了一下。MetaGPT 是目前(230809)github 热榜第一名,今天就加了 3000 多个星。

MetaGPT 是一个多智能体框架,能够生成不同的角色:工程师、产品经理、架构师和项目经理。然后共同构建一个软件项目,使用的模型是 GPT-4,与 AutoGPT 有些类似。

中文帮助文档见:https://github.com/geekan/MetaGPT/blob/main/docs/README_CN.md

实验

搭建环境

1
2
3
4
5
6
7
8
9
10
$ git clone https://github.com/geekan/MetaGPT  # 约11M左右
$ cd MetaGPT
$ docker build . -t metagpt:baseline # 生成镜像
$ mkdir -p /opt/metagpt/{config,workspace} # 请切换成root后执行
$ docker run --rm metagpt/metagpt:v0.3 cat /app/metagpt/config/config.yaml > /opt/metagpt/config/config.yaml
$ cd /opt/metagpt/
$ cp config/config.yaml config/key.yaml # 生成配置文件
修改 key.yaml中的 OPENAI_API_KEY, OPENAI_API_BASE
$ docker run --name metagpt -d --privileged -v /opt/metagpt/config:/app/metagpt/config -v /opt/metagpt/workspace:/app/metagpt/workspace metagpt:baseline # 运行镜像
$ docker exec -it metagpt /bin/bash # 进入镜像

运行

1
$ python startup.py "写一个微信小程序,实现简单的文件阅读和翻译功能"

运行之后,程序创建项目:

workspace/wechat_mini_reader/

实验结果

  • 最终花费:¥4.07(GPT-4 用的是一个国内的中转)
  • 我的需求是:写一个微信小程序,实现简单的文件阅读和翻译功能,最终它生成了一组 Python 程序(不是微信小程序),是 demo 的感觉,离完整应用差得比较远
  • 生成 5 个代码文件,包含:Flask 构架、sqlite3 数据库,调用 google translate 的翻译,文件读取等等,整体生成数据 400 行,其中含代码 105 行,其它为设计文档。

主观感受

  • 可以设置你想花多少钱调用 GPT-4,默认 3$
  • 工具链做得很好,一小时之内可以上手
  • 可以做 demo,简化了项目开始的工作量
  • 想用它做一个完整项目,个人觉得差距还比较大
  • 它生成的竞品分析,API 文档,mermaid 图也都挺好的
  • 可能存在大局观问题:每个小步做得都对,合一块不一定对

代码分析

目前 metagpt 的项目,核心代码量有 80 多个 python 文件,共 6000 多行(代码文件都不大),底层也使用了 langchain

主要代码

  • startup.py:代码入口,可以设置想花多少钱,需要几个角色合作……
  • actions:使用 PROMPT 方式,通过调用 GPT 和其它 API 实现了具体的功能,比如:写代码、分析库依赖、文本转语音、运行代码、测试……
  • document_store:各种存储的支持,faiss, milvus, chromadb 向量数据库,本地存储,各种模式数据的读取,
  • management:管理所有技能
  • memory:管理存储
  • prompts:管理各种角色的提示
  • provider:调用大语言模型,目前支持 Claude 和 OpenAI
  • roles:各角色的具体实现和相关工具,角色包含:工程师,架构师,产品,项目管理……
  • tools & utils:辅助工具

底层逻辑

该工具是将软件开发拆解成前后多个步骤,调用模型完成各个步骤,通过提示以及对返回结果的解析,最终结合成完整的项目。即:用大模型实现了软件开发的全链路。

可能对于开发某种类型的应用效果比较好,对于所以软件而言,个人觉得目前尚处于初始阶段。有时候不如针对具体问题,直接提问;有时候 MetaGPT 过程也给我们一些启发。

另外,真正应用过程可能遇到的问题是:开发简单的软件可能不需要这么多角色;开发复杂的软件,相互交错的工作,GPT 是否能支撑非常复杂的过程?

虽然我个人觉得离自动编程还挺远,不过还是有很多有意思和值得借鉴的内容~~