当前位置: 首页 > news >正文

基于MetaGPT的LLM Agent学习实战(一)

在这page
里插入图片描述

前言

我最近一直在做基于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来实现。我们主要介绍官方申请方法:

中转方案修改的部分我在代码中也已经标出

① 登录自己的账号
login
②创建API Key
create key
copy
③本地配置环境变量

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)

运行结果如下:
result
🎉🎉🎉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处有显示&#xf…...

实验0.0 Visual Studio 2022安装指南

Visual Studio 2022 是一个功能强大的开发工具,对于计算机专业的学生来说,它不仅可以帮助你完成学业项目,还能为你将来的职业生涯打下坚实的基础。通过学习和使用 Visual Studio,你将能够更高效地开发软件,并在编程领域…...

数据结构之----线性表

线性表分为 顺序存储结构 和 链式存储结构 线性表的顺序存储结构: 线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。 1,顺序表的结构: #define MAXSIZE 20 typedef int El…...

thinkphp5.1 模型auto

在ThinkPHP5.1中&#xff0c;模型的自动完成功能可以通过在模型类中定义auto属性来实现。这个属性是一个数组&#xff0c;包含了需要自动填充的字段和对应的处理规则。 以下是一个简单的例子&#xff0c;展示了如何在ThinkPHP5.1的模型中使用自动完成功能&#xff1a; <?…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...