MetaGPT多智能体开发[第一节]
前言:简介MetaGPT
在MetaGPT看来,可以将智能体想象成环境中的数字人,其中
智能体 = 大语言模型(LLM) + 观察 + 思考 + 行动 + 记忆
这个公式概括了智能体的功能本质。为了理解每个组成部分,让我们将其与人类进行类比:
- 大语言模型(LLM):LLM作为智能体的“大脑”部分,使其能够处理信息,从交互中学习,做出决策并执行行动。
- 观察:这是智能体的感知机制,使其能够感知其环境。智能体可能会接收来自另一个智能体的文本消息、来自监视摄像头的视觉数据或来自客户服务录音的音频等一系列信号。这些观察构成了所有后续行动的基础。
- 思考:思考过程涉及分析观察结果和记忆内容并考虑可能的行动。这是智能体内部的决策过程,其可能由LLM进行驱动。
- 行动:这些是智能体对其思考和观察的显式响应。行动可以是利用 LLM 生成代码,或是手动预定义的操作,如阅读本地文件。此外,智能体还可以执行使用工具的操作,包括在互联网上搜索天气,使用计算器进行数学计算等。
- 记忆:智能体的记忆存储过去的经验。这对学习至关重要,因为它允许智能体参考先前的结果并据此调整未来的行动。
举例说明:智能体为某后开发工程师角色
步骤:
1.接受到来自产品经理实现一个验证码校验机制
2.拿到刚实现首页登录功能代码
3.思考实现验证码需要考虑哪些问题,如校验规则,生成字符规则,验证码大小等
4.实现编码动作
5.通过模型实现以上所有操作
那多智能体意味着什么呢
使 GPT 以软件公司的形式工作,协作处理更复杂的任务
- MetaGPT内部包括产品经理 / 架构师 / 项目经理 / 工程师,它提供了一个软件公司的全过程与精心调配的SOP
Code = SOP(Team)
是核心哲学。我们将SOP具象化,并且用于LLM构成的团队
如图例说明:你是一个软件公司的老板
你想要完成一个员工绩效模块
1.[产品经理]智能体完成市场调研,完成需求文档
2.[开发工程师]智能体完成代码编写
3.[测试工程师]智能体完成测试用例编写,以及回归测试
....等
以上过程每一个角色都可以由多个智能体再次组合,在代码编写过程中实现writer和Revise
以上多智能体意味着一句话实现一个小型应用的开发
官方样例:样例(由GPT-4生成)
例如,如果你执行metagpt "Design a RecSys like Toutiao"
,将会得到包括数据类型&API设计在内的输出
生成一个包含分析和设计内容的样例的成本约为 $0.2 (使用GPT-4),而生成一个完整项目的成本约为 $2.0 。
其余项目
metagpt "2048 Game Web"
更多实例可以前往官网自行查看https://www.deepwisdom.ai/usecases
第一章 获取MetaGPT
以下所有操作皆使用Windows 11完成
1.1安装MetaGPT
请确保你的系统已安装Python 3.9+
python3 --version
C:\Users\shaox>python --version
Python 3.11.5
C:\Users\shaox>
安装稳定版本
推荐大多数用户使用。你可以像使用任何python包一样导入MetaGPT,使用各种内置角色或团队,并构建自己的智能体来服务各种应用。
pip install metagpt
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple metagpt==0.6.6
推荐使用第二个镜像源更稳定
注:安装依赖过程中如出现以下错误 直接访问链接下载工具
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
安装最新的开发版本
最适合体验最新功能的用户。
pip install git+https://github.com/geekan/MetaGPT
以开发模式安装
推荐给那些想要根据自己的独特需求定制框架、尝试新的想法或者利用框架创建复杂功能(如新颖的记忆机制)的开发者和研究者。
git clone https://github.com/geekan/MetaGPT.git
cd /your/path/to/MetaGPT
pip install -e .
使用Docker安装
使用默认的MetaGPT镜像
bash
# 第1步:下载metagpt官方镜像并准备config2.yaml
docker pull metagpt/metagpt:latest
mkdir -p /opt/metagpt/{config,workspace}
docker run --rm metagpt/metagpt:latest cat /app/metagpt/config/config2.yaml > /opt/metagpt/config/config2.yaml
vim /opt/metagpt/config/config2.yaml # 修改配置
# 第2步:使用容器运行metagpt demo
docker run --rm \
--privileged \
-v /opt/metagpt/config/config2.yaml:/app/metagpt/config/config2.yaml \
-v /opt/metagpt/workspace:/app/metagpt/workspace \
metagpt/metagpt:latest \
metagpt "Write a cli snake game"
# 你也可以启动一个容器并在其中执行命令
docker run --name metagpt -d \
--privileged \
-v /opt/metagpt/config/config2.yaml:/app/metagpt/config/config2.yaml \
-v /opt/metagpt/workspace:/app/metagpt/workspace \
metagpt/metagpt:latest
docker exec -it metagpt /bin/bash
$ metagpt "Write a cli snake game"
docker run ...
命令做了以下事情:
- 以特权模式运行,以获得运行浏览器的权限
- 将主机配置文件
/opt/metagpt/config/config2.yaml
映射到容器/app/metagpt/config/config2.yaml
- 将主机目录
/opt/metagpt/workspace
映射到容器/app/metagpt/workspace
- 执行demo命令
metagpt "Write a cli snake game"
自行构建镜像
bash
# 你也可以自行构建metagpt镜像。
git clone https://github.com/geekan/MetaGPT.git
cd MetaGPT && docker build -t metagpt:custom .
1.2配置MetaGPT
OpenAI API
我们以OpenAI API为例说明配置过程,其他大模型的API配置过程是相同的。
您可以通过设置 config2.yaml 完成配置
- 在当前工作目录中创建一个名为
config
的文件夹,并在其中添加一个名为config2.yaml
的新文件。 - 将示例config2.yaml文件的内容复制到您的新文件中。
- 将您自己的值填入文件中:
yaml
llm:
api_key: 'sk-...' # YOUR_API_KEY
model: 'gpt-4-turbo-preview' # or gpt-3.5-turbo-1106 / gpt-4-1106-preview
# base_url: 'https://api.openai.com/v1' # or any forward url.
# proxy: 'YOUR_PROXY' # Optional. If you want to use a proxy, set it here.
请记住:如果您按照安装中的git clone
方法,config/config2.yaml
文件已经存在。只需编辑它或创建一个名为~/.metagpt/config2.yaml
的副本进行编辑。这样您就不会意外地使用git提交和共享您的API密钥。
注意: MetaGPT将按照以下优先顺序读取您的设置:
~/.metagpt/config2.yaml > config/config2.yaml
现在您可以开始使用了!请参阅快速入门或我们的教程以进行第一次运行!
MetaGPT还支持各种LLM模型,根据您的需求配置模型API的密钥。
智谱 API
访问 llm_config.py 获得更新详情。
yaml
llm:
api_type: 'zhipuai'
api_key: 'YOUR_API_KEY'
model: 'MODEL_NAME'
科大讯飞的大模型 Spark API:
访问 llm_config.py 获得更新详情。
yaml
llm:
api_type: 'spark'
app_id: 'YOUR_APPID'
api_key: 'YOUR_API_KEY'
api_secret: 'YOUR_API_SECRET'
domain: 'generalv2'
base_url: 'wss://spark-api.xf-yun.com/v3.1/chat'
Azure OpenAI API
访问 llm_config.py 获得更新详情。
yaml
llm:
api_type: 'azure'
api_key: 'YOUR_API_KEY'
model: 'YOUR_MODEL_NAME'
谷歌 Gemini
默认支持模型gemini-pro
yaml
llm:
api_type: 'gemini'
api_key: 'YOUR_API_KEY'
Fireworks
yaml
llm:
api_type: 'fireworks'
base_url: 'https://api.fireworks.ai/inference/v1'
api_key: 'YOUR_API_KEY'
model: 'YOUR_MODEL_NAME' # like `accounts/fireworks/models/llama-v2-7b-chat`
百度 千帆 API
支持ERNIE-*
模型和部分主流开源模型,详见metagpt/utils/token_counter.py
使用安全认证AK/SK鉴权
使用model
进行调用
yaml
llm:
api_type: qianfan
access_key: 'YOUR_ACCESS_KEY'
secret_key: 'YOUR_SECRET_KEY'
model: 'YOUR_MODEL_NAME like ERNIE-Bot-turbo'
使用endpoint
进行调用
yaml
llm:
api_type: qianfan
access_key: 'YOUR_ACCESS_KEY'
secret_key: 'YOUR_SECRET_KEY'
endpoint: 'YOUR_ENDPOINT_NAME like ernie_speed'
使用应用AK/SK鉴权(不推荐)
使用model
进行调用
yaml
llm:
api_type: qianfan
api_key: 'YOUR_API_KEY'
secret_key: 'YOUR_SECRET_KEY'
model: 'YOUR_MODEL_NAME like ERNIE-Bot-turbo'
使用endpoint
进行调用
yaml
llm:
api_type: qianfan
api_key: 'YOUR_API_KEY'
secret_key: 'YOUR_SECRET_KEY'
endpoint: 'YOUR_ENDPOINT_NAME like ernie_speed'
阿里云 灵积 DashScope API
支持qwen-*
模型和部分主流开源模型,详见metagpt/utils/token_counter.py
yaml
llm:
api_type: dashscope
api_key: 'YOUR_API_KEY'
model: 'YOUR_ENDPOINT_NAME like qwen-max'
配置完成
在编译器中运行
找到examples/debate_simple.py 文件运行
**debate_simple.py **
import asyncio
from metagpt.actions import Action
from metagpt.environment import Environment
from metagpt.roles import Role
from metagpt.team import Team
action1 = Action(name="张三丰说", instruction="富有情绪的表达你的观点并且不要重复,不应该学习功夫")
action1.llm.model = "gpt-4-1106-preview"
action2 = Action(name="张无忌说", instruction="富有感情的表达你的观点并且不要重复,要非常硬气的语气,应该学习功夫")
action2.llm.model = "gpt-3.5-turbo-1106"
alex = Role(name="张三丰", profile="人民代表", language="Chinese",goal="赢得辩论", actions=[action1], watch=[action2])
bob = Role(name="张无忌", profile="江湖人代表",language="Chinese", goal="赢得辩论", actions=[action2], watch=[action1])
env = Environment(desc="辩论赛")
team = Team(investment=10.0, env=env, roles=[alex, bob])
asyncio.run(team.run(idea="主题:功夫保护人民,每段话需要在80字以内.", send_to="张三丰", n_round=5))
以上内容都可以适当更改
命令行输出代码
C:\Users\shaox\AppData\Local\Programs\Python\Python311\python.exe D:\aiProject\MetaGPT-main\examples\debate_simple.py
2024-02-27 15:36:44.276 | INFO | metagpt.const:get_metagpt_package_root:29 - Package root set to D:\aiProject\MetaGPT-main
2024-02-27 15:36:49.421 | INFO | metagpt.roles.role:_act:399 - 张三丰(人民代表): to do Action(张三丰说)
张三丰:尊敬的评委、各位观众,我张三丰始终坚持,功夫不仅仅是一种技艺,更是保护人民、维护社会和谐的有力武器。功夫所蕴含的深厚文化内涵,是任何武器都无法替代的。请问张无忌,你是否忽视了功夫在培养意志、强身健体方面的积极作用?难道我们应该放弃这份宝贵的文化遗产,任由外来文化侵蚀我们的精神家园吗?不学功夫,我们如何守护我们的家园,保护我们的人民?
2024-02-27 15:36:53.565 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.003 | Max budget: $10.000 | Current cost: $0.003, prompt_tokens: 89, completion_tokens: 99
2024-02-27 15:36:53.566 | INFO | metagpt.roles.role:_act:399 - 张无忌(江湖人代表): to do Action(张无忌说)
张无忌(江湖人代表):《江湖》中言,功夫乃我华夏千年传承之瑰宝,非但是锻炼意志、强身健体的途径,更是熔铸民族精神、彰显文化自信的象征!张三丰前辈,您所言极是,功夫之意义,远超兵刃拳脚。我张无忌身负江湖重任,更深知功夫对于个人修养、社会和谐的重要性。我们怎能舍弃这宝贵的文化遗产?恰恰相反,我们应该更加坚定地学习与传承功夫,以其深厚的文化底蕴和精神力量,抵御任何形式的文化的侵蚀。
硬气地,我们要宣言:功夫,是我们民族的骄傲,是每个华夏儿女应尽的责任!只有通过学习功夫,我们才能在守护家园、保护人民时,更有力、更有信念!让这古老的艺术,继续在新时代焕发新的光彩!
2024-02-27 15:36:59.702 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.005 | Max budget: $10.000 | Current cost: $0.005, prompt_tokens: 185, completion_tokens: 175
2024-02-27 15:36:59.704 | INFO | metagpt.roles.role:_act:399 - 张三丰(人民代表): to do Action(张三丰说)
张三丰:尊敬的同仁,功夫固然高尚,但时代在变,保护人民,不应仅限于拳脚。我们应拥抱现代科技,以智取胜。功夫背后的团结、勇敢精神,我们当然要继承,但形式可以多样。不学功夫,我们可以用知识、用科技守护家园,这样的力量,同样坚不可摧!
2024-02-27 15:37:02.837 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.009 | Max budget: $10.000 | Current cost: $0.006, prompt_tokens: 378, completion_tokens: 76
2024-02-27 15:37:02.838 | INFO | metagpt.roles.role:_act:399 - 张无忌(江湖人代表): to do Action(张无忌说)
张无忌在此,前辈的顾虑我深感敬意。然而,我坚决主张,学习功夫,不仅是坚守传统,更是对自我挑战,是精神与肉体双重锻炼的极致体现!功夫,是历史长河中璀璨的明珠,它教会我们坚毅、果敢、不屈不挠!在这瞬息万变的时代,我们更应把握这股力量,将它融入血脉,让它成为我们面对挑战时的不二法门!
评委、各位观众,今日我张无忌站在这里,就是要以坚定的信念,硬气地告诉所有人——功夫,是我们民族的灵魂,它不容忽视,更不能丢弃!我们要将这古老的艺术发扬光大,让全世界看到,华夏儿女的脊梁是硬的,我们的拳头是有力的,我们的精神是不可战胜的!
所以,我坚决主张,每个人都应该学习功夫,无论时代如何变迁,这份传承千年的力量,将永远是我们最坚实的护身符!
2024-02-27 15:37:10.002 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.014 | Max budget: $10.000 | Current cost: $0.009, prompt_tokens: 452, completion_tokens: 194
2024-02-27 15:37:10.003 | INFO | metagpt.roles.role:_act:399 - 张三丰(人民代表): to do Action(张三丰说)
张三丰:尊敬的评委,张无忌同仁,时代洪流中,国力较量不在拳脚。保护人民,非唯功夫一条径。科技、智慧,乃现代利器,它们武装头脑,抵御外侵,更坚实。不学功夫,拥抱现代,方为强国之道!
2024-02-27 15:37:12.976 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.019 | Max budget: $10.000 | Current cost: $0.010, prompt_tokens: 664, completion_tokens: 67
进程已结束,退出代码为 0