基于MetaGPT的LLM Agent学习实战(一)
前言
我最近一直在做基于AI Agent 的个人项目, 因为工作加班较多,设计思考时间不足,这里借着Datawhale的开源学习课程《MetaGPT智能体理论与实战》课程,来完善自己的思路,抛砖引玉,和各位开发者一起学习!
一、介绍
今天是打卡的第一天,先说说主要的学习内容:
- 获取MetaGPT
- 部署到本地环境
- 配置MetaGPT
- 申请ChatGPT API Key
- 基于ChatGPT API构建调用代码
- 运行MetaGPT案例代码进行测试
今天学习的内容较为简单,我会尽量以简洁的语言详细描述清楚这个流程,带着读者一起学习Agent开发;
二、配置MetaGPT运行环境
声明
- python版本为3.9+
- 为了方便学习,这里我使用jupyter notebook进行讲解;
- 所有代码我都会同步提交到Github和Gitee,如果各位读者觉得我写的不错,可以给我一个Star.
1. 查看Python版本
为了确保我们的Python环境正确,首先要检查Python的版本。可以使用以下命令来查看Python版本:
!python3 --version
如果上面的命令不起作用或者报错,可以尝试使用以下命令:
python --version
输出
Python 3.10.13
2. 安装MetaGPT
要安装MetaGPT,我们可以使用pip来获取它。以下是在终端中安装MetaGPT的命令:
pip install metagpt==0.6.6
如果你在国内环境,并且希望加速安装过程,可以使用清华源进行按照:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple metagpt==0.6.6
也可以通过拉取官方仓库进行安装:
git clone https://github.com/geekan/MetaGPT.git
cd /your/path/to/MetaGPT
pip install -e .
这里有个重点,如果你的OpenAI API Key是直连且不限速版本,你只需要安装包即可,
如果你的API Key为免费API且有速率限制,我这里建议你直接clone MetaGPT的GitHub仓库,其可以在config2.yaml中自定义配置代理服务器和Key,我在运行MetaGPT的过程中遇到的最大问题就是API限速导致程序报错;所以一定要注意这一点;
作者因为使用的是中转的API Key,因此选择了方法3:
git clone https://github.com/geekan/MetaGPT.git
cd MetaGPT
pip install -e .
我们在config/config2.yaml中配置自己的api key和 base_url 以及选择的model:
llm:api_type: "openai" # or azure / ollama / groq etc.model: "gpt-4-turbo" # or gpt-3.5-turbobase_url: "https://api.openai.com/v1" # or forward url / other llm urlapi_key: "YOUR_API_KEY"
3. 配置MetaGPT
为了配置MetaGPT,你需要调用ChatGPT API服务。你可以在这里查看具体配置方式。如果你没有科学环境,也可以通过去tb buy 一个 中转
的 API Key来实现。我们主要介绍官方申请方法:
中转方案修改的部分我在代码中也已经标出
① 登录自己的账号
②创建API Key
③本地配置环境变量
import os
os.environ["OPENAI_API_KEY"] = "sk-..." # 填入你自己的OpenAI API key
os.environ["OPENAI_API_MODEL"] = "gpt-3.5-turbo" # 选择你要使用的模型,例如:gpt-4, gpt-3.5-turbo
os.environ["OPENAI_API_BASE"] = "https://api.openai-forward.com/v1" # 调整API请求地址,设置访问中转代理服务器,如果是商家购买的,可以联系商家要代理服务器地址,这里并不是固定的
④验证配置是否成功:
from openai import OpenAI# client = OpenAI(api_key='sk-......') # 官网直连版本
client = OpenAI(base_url="https://xxxx.com", # 这里填写你的中转服务器地址api_key='sk-......') # 这里填写你的中转apikey
completion = client.chat.completions.create(model="gpt-3.5-turbo",messages=[{"role": "system", "content": "你是一个WebGIS开发者,测绘地理和全栈开发精通."},{"role": "user", "content": "聊聊国内外WebGIS开发与AI结合的场景现在我们可以聊聊国内外WebGIS开发与AI LLM Agent结合的场景吧"}]
)
print(completion.choices[0].message.content)
运行结果如下:
🎉🎉🎉bingo!!运行成功,我们成功拿到了我们要的方案!
通过以上步骤,我们终于成功配置MetaGPT,并开始使用它进行各种任务了。
三. 使用MetaGPT
接下来,我们通过下面这个案例,我们用以验证环境配置是否成功,并初次体验多智能体框架中的指令 - 动作 - 角色 - 环境 - 团队的抽象概念。在这个示例中,我们创建了一个团队,其中包括产品经理、架构师、项目经理和工程师。然后,我们投资并运行一个项目,最后让团队运行五轮。
import asyncio
from metagpt.roles import (Architect,Engineer,ProductManager,ProjectManager,
)
from metagpt.team import Teamasync def startup(idea: str):company = Team()company.hire([ProductManager(),Architect(),ProjectManager(),Engineer(),])company.invest(investment=3.0)company.run_project(idea=idea)await company.run(n_round=5)await startup(idea="write a cli blackjack game")
这里我copy了其中几轮Agent的回答,可以看到我们的AI团队已经运行起来了;
[CONTENT]
{"Language": "en_us","Programming Language": "Python","Original Requirements": "write a cli blackjack game","Project Name": "cli_blackjack_game","Product Goals": ["Create an engaging and interactive gameplay experience","Ensure smooth and intuitive user interface for seamless gameplay","Implement various difficulty levels to cater to different player skills"],"User Stories": ["As a player, I want to be able to start a new game easily","As a player, I want to see my current score and progress during the game","As a player, I want to have options to hit, stand, or double down during my turn","As a player, I want to receive clear instructions on how to play the game","As a player, I want to feel the excitement and challenge of a real blackjack game"],"Competitive Analysis": ["Blackjack Game A: Basic interface, lacks interactive features","Blackjack Pro: Offers advanced gameplay options and strategy guides","Blackjack Master: Provides a realistic casino experience with multiplayer mode"],"Competitive Quadrant Chart": "quadrantChart\n title \"Engagement and User Experience\"\n x-axis \"Low Engagement\" --> \"High Engagement\"\n y-axis \"Low User Experience\" --> \"High User Experience\"\n quadrant-1 \"Enhance Features\"\n quadrant-2 \"Improve User Experience\"\n quadrant-3 \"Optimize Engagement\"\n quadrant-4 \"Maximize User Satisfaction\"\n \"Blackjack Game A\": [0.3, 0.4]\n \"Blackjack Pro\": [0.6, 0.7]\n \"Blackjack Master\": [0.8, 0.9]\n \"Our CLI Blackjack Game\": [0.5, 0.6]","Requirement Analysis": "","Requirement Pool": [["P0","Implement basic game logic for blackjack"],["P1","Create a scoring system to track player progress"],["P2","Develop a user-friendly interface for easy navigation"],["P2","Incorporate different difficulty levels for player choice"],["P1","Include clear instructions on how to play the game"]],"UI Design draft": "The UI will include options for hitting, standing, and doubling down. It will display the player's current score and provide clear instructions for gameplay.","Anything
2024-05-12 17:36:48.720 | ERROR | metagpt.utils.common:log_it:554 - Finished call to 'metagpt.actions.action_node.ActionNode._aask_v1' after 10.724(s), this was the 1st time calling it. exp: openai.types.completion_usage.CompletionUsage() argument after ** must be a mapping, not NoneTypeUNCLEAR": ""
}
[/CONTENT][CONTENT]
{"Language": "en_us","Programming Language": "Python","Original Requirements": "write a cli blackjack game","Project Name": "cli_blackjack_game","Product Goals": ["Create an engaging CLI experience for users","Ensure smooth gameplay and fair card dealing logic","Provide an enjoyable and interactive blackjack game"],"User Stories": ["As a player, I want to be able to place bets and receive cards","As a player, I want to have options like hit, stand, double down","As a player, I want to see my current balance and game outcome"],"Competitive Analysis": ["Blackjack Game A: Basic CLI interface, lacks interactive features","cli-blackjack.io: Offers various betting options and clear game instructions","blackjack-cli.com: Provides realistic card dealing but lacks betting flexibility"],"Competitive Quadrant Chart": "quadrantChart\n title \"Engagement and User Experience\"\n x-axis \"Low Engagement\" --> \"High Engagement\"\n y-axis \"Low User Experience\" --> \"High User Experience\"\n quadrant-1 \"Enhance Features\"\n quadrant-2 \"Improve User Experience\"\n quadrant-3 \"Optimize Engagement\"\n quadrant-4 \"Maintain Quality\"\n \"Blackjack Game A\": [0.3, 0.6]\n \"cli-blackjack.io\": [0.45, 0.23]\n \"blackjack-cli.com\": [0.57, 0.69]\n \"Our CLI Blackjack Game\": [0.5, 0.6]","Requirement Analysis": "","Requirement Pool": [["P0","Implement card dealing and betting system"],["P1","Include game logic for hit, stand, and double down actions"],["P2","Display player balance and game outcomes"]],"UI Design draft": "Simple text-based interface with clear instructions and game status
2024-05-12 17:36:57.136 | ERROR | metagpt.utils.common:log_it:554 - Finished call to 'metagpt.actions.action_node.ActionNode._aask_v1' after 19.140(s), this was the 2nd time calling it. exp: openai.types.completion_usage.CompletionUsage() argument after ** must be a mapping, not NoneTypeupdates.","Anything UNCLEAR": ""
}
[/CONTENT]
通过以上步骤,我们可以开始使用MetaGPT进行各种任务,并看到AI Agent的强大潜力!
四、总结
本文是这个打卡系列的第一篇文章,也是后续学习的基础,通过这篇文章,我们了解了MetaGPT开发的基础环境配置方法,在下一篇文章中,我们将深入理解AI Agent的理论,并通过代码来实现Agent的每个模块需求,希望我的文章对各位读者和开发者有所帮助!期待后续学习!!😀😀😀
参考文献
- MetaGPT 官方文档
项目地址
- Github地址
如果觉得我的文章对您有帮助,三连+关注便是对我创作的最大鼓励!或者一个star🌟也可以😂.
相关文章:

基于MetaGPT的LLM Agent学习实战(一)
前言 我最近一直在做基于AI Agent 的个人项目, 因为工作加班较多,设计思考时间不足,这里借着Datawhale的开源学习课程《MetaGPT智能体理论与实战》课程,来完善自己的思路,抛砖引玉,和各位开发者一起学习&am…...

【IMX6ULL项目】IMX6ULL上Linux系统实现产测工具框架
电子产品量产测试与烧写工具。这是一套软件,用在我们的实际生产中, 有如下特点: 1.简单易用: 把这套软件烧写在 SD 卡上,插到 IMX6ULL 板子里并启动,它就会自动测试各个模块、烧写 EMMC 系统。 工人只要按…...

【Linux基础】Vim保姆级一键配置教程(手把手教你把Vim打造成高效率C++开发环境)
目录 一、前言 二、安装Vim 三、原始Vim编译器的缺陷分析 四、Vim配置 🥝预备知识----.vimrc 隐藏文件 🍋手动配置 Vim --- (不推荐) 🍇自动化一键配置 Vim --- (强烈推荐) ✨功能演示 五、共勉 一、前言 Vim作为…...

Gartner发布准备应对勒索软件攻击指南:勒索软件攻击的三个阶段及其防御生命周期
攻击者改变了策略,在某些情况下转向勒索软件。安全和风险管理领导者必须通过提高检测和预防能力来为勒索软件攻击做好准备,同时还要改进其事后应对策略。 主要发现 勒索软件(无加密的数据盗窃攻击)是攻击者越来越多地使用的策略。…...

IB 公式解析
IB损失 自我感悟 根据对决策边界的影响程度来分配权重。影响程度越大,分配到的权重越小;影响程度越小,分配到的权重越大。 最后其实就是平衡因子和交叉熵损失的输出的乘积 公式 3.2. Influence Function 影响函数允许我们在移除样本时估…...
开发辅助工具的缩写
开发辅助工具的缩写有很多,这些工具通常是为了提高软件开发效率、代码质量和团队协作效率而设计的。以下是一些常见的开发辅助工具及其缩写: IDE - Integrated Development Environment(集成开发环境) VCS - Version Control Sys…...
linux程序分析命令(一)
linux程序分析命令(一) **ldd:**用于打印共享库依赖。这个命令会显示出一个可执行文件所依赖的所有共享库(动态链接库),这对于解决运行时库依赖问题非常有用。**nm:**用于列出对象文件的符号表。这个命令可以显示出定…...

MYSQL数据库-SQL语句
数据库相关概念 名称全称简称数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Management System(DBMS)SQL操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准Structured Quer…...

MyBatis认识
一、定义 MyBatis是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java O…...

【WEEK11】 【DAY6】Employee Management System Part 7【English Version】
2024.5.11 Saturday Continued from 【WEEK11】 【DAY5】Employee Management System Part 6【English Version】 Contents 10.8. Delete and 404 Handling10.8.1. Modify list.html10.8.2. Modify EmployeeController.java10.8.3. Restart10.8.4. 404 Page Handling10.8.4.1. …...

【52】Camunda8-Zeebe核心引擎-Clustering与流程生命周期
Clustering集群 Zeebe本质是作为一个brokers集群运行,形成一个点对点网络。在这个网络中,所有brokers的功能与服务都相同,没有单点故障。 Gossip协议 Zeebe实现了gossip协议,并借此知悉哪些broker当前是集群的一部分。 集群使用…...

从零开始的软件测试学习之旅(八)jmeter线程组参数化及函数学习
jmeter线程组参数化及函数学习 Jmeter基础基本使用流程组件与元件 线程组线程的执行方式Jmeter组件执行顺序 常见属性设置查看结果数的作用域举例 Jmeter参数化实现方式1.用户定义参数2.用户参数3.函数4.csv数据文件设置 每日复习 Jmeter基础 基本使用流程 启动项目案例 启动…...

图文并茂:解析Spring Boot Controller返回图片的三种方式
欢迎来到我的博客,代码的世界里,每一行都是一个故事 图文并茂:解析Spring Boot Controller返回图片的三种方式 前言使用Base64编码返回图片使用byte数组返回图片使用Resource对象返回图片图片格式转换与性能对比 前言 在互联网的世界里&…...
问题处理记录 | 表输出报错 Packet for query is too large (5,214,153 > 4,194,304).
这个错误是由于MySQL服务器接收到的查询数据包太大而引起的。具体来说,错误消息中提到的数据包大小为5,214,153字节,而MySQL服务器默认只接受最大为4,194,304字节的数据包。 要解决这个问题,你可以尝试通过修改MySQL服务器的配置来增大max_a…...

数据结构_栈和队列(Stack Queue)
✨✨所属专栏:数据结构✨✨ ✨✨作者主页:嶔某✨✨ 栈: 代码:function/数据结构_栈/stack.c 钦某/c-language-learning - 码云 - 开源中国 (gitee.com)https://gitee.com/wang-qin928/c-language-learning/blob/master/function/…...

基于docker 的elasticsearch冷热分离及生命周期管理
文章目录 冷热集群架构的应用场景冷热集群架构的优势冷热集群架构实战搭建集群 索引生命周期管理认识索引生命周期索引生命周期管理的历史演变索引生命周期管理的基础知识Rollover:滚动索引 冷热集群架构的应用场景 某客户的线上业务场景如下:系统每天增…...

pikachu靶场(xss通关教程)
(注:若复制注入代码攻击无效,请手动输入注入语句,在英文输入法下) 反射型xss(get型) 1.打开网站 发现有个框,然后我们在框中输入一个“1”进行测试, 可以看到提交的数据在url处有显示…...

实验0.0 Visual Studio 2022安装指南
Visual Studio 2022 是一个功能强大的开发工具,对于计算机专业的学生来说,它不仅可以帮助你完成学业项目,还能为你将来的职业生涯打下坚实的基础。通过学习和使用 Visual Studio,你将能够更高效地开发软件,并在编程领域…...
数据结构之----线性表
线性表分为 顺序存储结构 和 链式存储结构 线性表的顺序存储结构: 线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。 1,顺序表的结构: #define MAXSIZE 20 typedef int El…...
thinkphp5.1 模型auto
在ThinkPHP5.1中,模型的自动完成功能可以通过在模型类中定义auto属性来实现。这个属性是一个数组,包含了需要自动填充的字段和对应的处理规则。 以下是一个简单的例子,展示了如何在ThinkPHP5.1的模型中使用自动完成功能: <?…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...

spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...