基于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🌟也可以😂.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/11320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Run ‘conda init‘ before ‘conda activate‘

使用conda activate 虚拟环境名称的时候提示:Run conda init before conda activate 解决办法: 首先需要确保是管理员身份运行这个cmd窗口。 然后,现在执行一下:conda init 命令,最后再执行:conda activate…

纯血鸿蒙APP实战开发——首页下拉进入二楼效果案例

介绍 本示例主要介绍了利用position和onTouch来实现首页下拉进入二楼、二楼上划进入首页的效果场景,利用translate和opacity实现动效的移动和缩放,并将界面沉浸式(全屏)显示。 效果图预览 使用说明 向下滑动首页页面超过触发距…

冯喜运:5.13黄金原油震荡整理是涨还是跌?今日走势分析

【黄金消息面分析】;自5月初以来,黄金和白银一直在享受需求的回归,买家在过去几天加大了力度,一度推动金价重返2370美元上方,白银重返28.5美元上方。不过,经过几天的盘整后,黄金白银价格双双下跌。然而&…

Redis-详解(基础)

文章目录 什么是Redis?用Redis的特点?用Redis可以实现哪些功能?Redis的常用数据类型有哪些?Redis的常用框架有哪些?本篇小结 更多相关内容可查看 什么是Redis? Redis(Remote DictionaryServer)是一个开源…

下载文件名称乱码或变成了随机码

如图 后端是有正常返回附件名称的,浏览器开发工具中也正常显示了这个数据,但是下载下来的文件名称确实一堆随机码. 其实这个问题的原因是因为跨域 查看console: Refused to get unsafe header "content-disposition" 现象,后端传递到前端的fileName不能被识别,下载…

大模型与AIGC应用相关问题 模型大型

最近经常被问,你看“万亿的模型都出来了,你们训练的千亿模型是不是落伍了?”我想说:“虽然都叫超大模型,但是类型是不一样的,虽说每一类模型训出来都不容易,不过澄清一下概念还是必要的”。 大…

编写Ansible角色实现分布式LNMP安装

前言 本文将介绍如何使用 Ansible 编写角色,在分布式环境下完成 LNMP(Linux、Nginx、MySQL、PHP)的自动化(编译)安装和配置,并验证 PHP 与 MySQL 数据联通性,实现博客和论坛页面的展示。 常规…

Qt---信号和槽

一、信号和槽机制 所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号…

二叉树的四种遍历代码实现

二叉树的遍历大致能分为以下几种 1.前序:根 左 右 2.中序:左 根 右 3.后序:左 右 根 4.层序:从根开始一层一层的向下 如上图访问顺序: 前序:1 2 3 N N N 4 5 N N 6 N N 中序:N 3 N 2 N 1 N 5 N 4 N …

docker-compose安装emqx集群(最新)(host模式)

机器: 10.60.0.20 10.60.0.21 10.60.0.22 一、三台机子都配置域名(/etc/hosts) 10.60.0.20 node1.emqx.io 10.60.0.22 node3.emqx.io 10.60.0.21 node2.emqx.io 二、docker-compose.yml(10.60.0.21) 其他两台机子自…

接搭建仿美团、代付系统源码搭建教程

最近很多粉丝催更、分享一下地球号:xiaobao0214520(WX) 现在大家都很流行搞网恋,我们搭建一个跟美团相似的系统 然后开发一个好友代付,我们在点单的时候转发链接让网恋对象付钱 若只是单点外卖的话,能榨出的油水还是太少。 所以…

Golang — map的使用心得和底层原理

map作为一种基础的数据结构,在算法和项目中有着非常广泛的应用,以下是自己总结的map使用心得、实现原理、扩容机制和增删改查过程。 1.使用心得: 1.1 当map为nil和map为空时,增删改查操作时会出现的不同情况 我们可以发现&#…

【全开源】废品回收微信小程序基于FastAdmin+ThinkPHP+UniApp

介绍 一款基于FastAdminThinkPHPUniApp开发的废品回收系统,适用废品回收站、再生资源回收公司上门回收使用的小程序 功能特性 1、会员注册 支持小程序授权注册和手机号注册 2、回收品类 可设置回收品类,废纸、废金属、废玻璃、旧衣服等 3、今日指导价…

面试高频知识点:Java互联网大厂高频面试题(持续收录)

文章目录 前言一、Java基础题1、Java语言的三大特性2、JDK 和 JRE 有什么区别3、Java基本数据类型及其封装类4、说明一下public static void main(String args[])这段声明里关键字的作用5、java的数据结构有哪些?6、抽象类和接口的区别?7、 与 equals 的区别8、Str…

WordPress插件Show IDs by Echo,后台显示文章、页面、分类、标签、媒体库、评论、用户的ID

WordPress的这款Show IDs by Echo插件,可以让我们设置是增加一列ID还是直接在“编辑 |快速编辑 |查看”操作后面增加ID,而且支持展示以下内容的ID: 文章页面类别标签评论自定义帖子类型自定义分类法用户媒体 Show IDs by Echo插件的安装及启…

企业级OV SSL证书:强化在线信任与安全的权威之选

在数字经济浪潮下,企业网站的安全性直接影响着用户信任度和业务的可持续发展。其中,企业级组织验证(Organization Validation,简称OV)SSL证书作为安全解决方案的重要一环,以其独有的优势,在众多…

网安面经之文件包含漏洞

一、文件包含漏洞 1、文件包含漏洞原理?危害?修复? 原理:开发⼈员⼀般希望代码更灵活,所以将被包含的⽂件设置为变量,⽤来进⾏动态调⽤,但是由于⽂件包含函数加载的参数没有经过过滤或者严格的…

LVDS 源同步接口

传统数据传输通常采用系统同步传输方式,多个器件基于同一时钟源进行系统同步,器件之间的数据传输时序关系以系统时钟为参考,如图1所示。系统同步传输方式使各器件处于同步工作模式,但器件之间传输数据的传输时延难以确定&#xff…

火山引擎VeDI:A/B测试平台指标能力升级,助力企业提升精细化运营效率

在数字化浪潮的推动下,数据分析与精细化运营已成为企业提升竞争力的关键。近日,火山引擎A/B测试DataTester完成了指标能力的全面升级,为企业在流量竞争激烈的市场中提供了更强大、更可信的数据支持。 此次升级亮点在于引入了“按某个属性去重…

局域网内访问vue3项目|Network: use --host to expose

背景 我希望在相同的局域网内,通过手机访问我在Vue 3项目中展示的效果 遇到的问题 使用Vue CLI的–host选项实现局域网内的应用程序测试 当使用Vue CLI在本地提供服务时,通过使用 --host 选项,你可以指定要公开应用程序的主机。默认情况下&a…