MetaGPT-打卡day01

MetaGPT是一个基于大型语言模型(LLMs)的多智能体协作框架。它利用SOP(Standard Operating Procedures,标准作业程序)来协调基于大语言模型的多智能体系统,从而实现元编程技术。该框架使用智能体模拟了一个虚拟软件团队,包含产品经理、架构师、项目经理、工程师、质量工程师等角色,并引入SOP成为框架的虚拟软件团队的开发流程。

安装部署

MetaGPT提供了两种部署方式:pip本地部署和docker部署。
这里使用pip进行了安装:
 

# 创建虚拟环境
conda create -n py39 python=3.9
conda activate py39
# clone项目到本地
git clone https://github.com/geekan/MetaGPT.git
cd /your/path/to/MetaGPT
pip install -e .

项目提供了一些例子,比如贪吃蛇展示MetaGPT的设计理念,即每个项目都可以抽象为一个标准流程(SOP),不同的角色负责项目的不同方面,组成一个项目组共同完成任务。

尝试

除了OpenAI外,MetaGPT还支持国内的智谱、讯飞星火等。这里使用智谱的开放平台,目前平台会提供大概200万的测试用的额度。基本可以满足学习需求。

【默认安装后的版本是0.6.0,直接使用的话,发现会失败,后来看到文档上说,目前需要使用0.5.2的版本,将版本回退后,便可以执行成功】

‍⁢⁤‬‌‌​⁤‍‌⁢⁤‬⁡‬⁢​⁣⁤​‌⁡‌⁢​⁡⁢​⁢‌‌‌⁡​‌​⁣⁢⁡⁤​‌‍适配其他国产模型 - 飞书云文档 (feishu.cn)

# 可导入任何角色,初始化它,用一个开始的消息运行它,完成!
import osos.environ["ZHIPUAI_API_KEY"] = "申请的KEY"import asyncio
import re
import subprocessimport firefrom metagpt.actions import Action
from metagpt.logs import logger
from metagpt.roles.role import Role, RoleReactMode
from metagpt.schema import Messageclass SimpleWriteCode(Action):PROMPT_TEMPLATE: str = """Write a python function that can {instruction} and provide two runnnable test cases.Return ```python your_code_here ``` with NO other texts,your code:"""name: str = "SimpleWriteCode"async def run(self, instruction: str):prompt = self.PROMPT_TEMPLATE.format(instruction=instruction)rsp = await self._aask(prompt)code_text = SimpleWriteCode.parse_code(rsp)return code_text@staticmethoddef parse_code(rsp):pattern = r"```python(.*)```"match = re.search(pattern, rsp, re.DOTALL)code_text = match.group(1) if match else rspreturn code_textclass SimpleRunCode(Action):name: str = "SimpleRunCode"async def run(self, code_text: str):result = subprocess.run(["python3", "-c", code_text], capture_output=True, text=True)code_result = result.stdoutlogger.info(f"{code_result=}")return code_resultclass SimpleCoder(Role):name: str = "Alice"profile: str = "SimpleCoder"def __init__(self, **kwargs):super().__init__(**kwargs)self._init_actions([SimpleWriteCode])async def _act(self) -> Message:logger.info(f"{self._setting}: to do {self._rc.todo}({self._rc.todo.name})")todo = self._rc.todo  # todo will be SimpleWriteCode()msg = self.get_memories(k=1)[0]  # find the most recent messagescode_text = await todo.run(msg.content)msg = Message(content=code_text, role=self.profile, cause_by=type(todo))return msgclass RunnableCoder(Role):name: str = "Alice"profile: str = "RunnableCoder"def __init__(self, **kwargs):super().__init__(**kwargs)self._init_actions([SimpleWriteCode, SimpleRunCode])self._set_react_mode(react_mode=RoleReactMode.BY_ORDER.value)async def _act(self) -> Message:logger.info(f"{self._setting}: to do {self._rc.todo}({self._rc.todo.name})")# By choosing the Action by order under the hood# todo will be first SimpleWriteCode() then SimpleRunCode()todo = self._rc.todomsg = self.get_memories(k=1)[0]  # find the most k recent messagesresult = await todo.run(msg.content)msg = Message(content=result, role=self.profile, cause_by=type(todo))self._rc.memory.add(msg)return msgdef main(msg="创建一个定时将目录下文件推送到某FTP的程序,每次推送完成后,将已经推送的文件迁移到其他目录进行备份,备份的文件保留2天"):# role = SimpleCoder()role = RunnableCoder()logger.info(msg)result = asyncio.run(role.run(msg))logger.info(result)if __name__ == "__main__":fire.Fire(main)

关于智能体

智能体 = LLM+观察+思考+行动+记忆

可能对于程序员来说,我觉得可以用更加简单的方式去理解这个概念。所谓的智能体,有些像我们借助大模型的能力,模拟出多个角色,当我们提出一个问题后,可以通过这些角色分工合作来解决。然后,metagpt的功能,更像是让我们简化定义操作角色的方式。这样可以让我们可以通过相对简单的方式,模拟出N个角色,让智能体来解决问题。

通过Demo的体验,总的感觉来说是很不错的~

让我们快乐的折腾吧~

过程中的一些困惑

其实周围的人,对于大模型的态度差异很大,有的人觉得大模型不太靠谱,还需要继续发展;有的人觉得,大模型是未来的一个热点~~

嗯,对于我来说,整体来说是比较看好大模型的,但是使用过程中,也遇到了一些困惑。

  • 效率问题:目前测试的时候,也就执行了五六次代码,就消费了6~7w的token。消耗感觉还是挺大的,感觉如果是个人的话,有些消费不起。。在单位部署了ChatGLM3B,但是在家没法这么玩。
  • 高度的依赖LLM: 大模型的好坏,其实直接影响了后面的一切。个人其实没法很好的去开发定义大模型底层的东西,而且要求的能力也很高。
  • 有些任务很复杂,并不是很容易解决。对于需要多个步骤的任务,每一个决策,都会影响后面的决策,最终可能直接影响整个决策的质量,智能体在这方面,可能并不是很容易解决。而且,有的任务,并不是需要每个过程都完美,还是需要从全局去考虑的。
  • ~~

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

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

相关文章

程序员必备的面试技巧:从忍者到铁金刚的华丽转变

在科技世界的江湖中,程序员作为武林高手,面试是他们闯荡江湖的一场重要考验。在这场考验中,我们需要像忍者一样灵活,像侦探一样聪明,还要像无敌铁金刚一样坚定。本文将带你探索程序员必备的面试技巧,助你书…

ioDraw在线图表工具 - 轻松制作专业图表,只需3步!

还在花大量时间手动画图表?还在为图表样式而烦恼?ioDraw为你提供一站式解决方案!ioDraw在线图表工具实现了AI自动生成图表,让你轻松制作专业图表,只需3步! 1. 录入数据 只需将你的数据告诉ioDraw AI助手&…

最新版Navicat的安装与激活

最新版Navicat的安装与激活 图文教程链接:图文教程视频教程链接:视频教程此教程适用于Navicat161之后版本的激活,Navicat161之后的版本暂时无法通过注册机的方式进行激活,如需通过注册机激活Navicat161及之前的版本,请…

[Docker] Dockerfile

文章目录 什么是 Dockerfile?使用 Dockerfile 定制镜像开始构建镜像上下文路径 指令详解COPYADDCMDENTRYPOINTENVARGVOLUMEEXPOSEWORKDIRUSERHEALTHCHECKONBUILD 什么是 Dockerfile? Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了…

Pandas实战100例 | 案例 52: 重命名列

案例 52: 重命名列 知识点讲解 在数据处理过程中,有时需要更改 DataFrame 中的列名。Pandas 提供了 rename 方法来轻松实现列的重命名。 重命名列: 使用 rename 方法并通过 columns 参数传递一个字典,可以将旧列名映射到新列名。 示例代码 # 准备数…

Spring Boot异常处理!!!

SpringBoot默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请求,然后跳转到默认显示异常的页面…

【mysql 插入数据问题】MySQL插入数据阻塞问题及优化方案

摘要:本文主要介绍了MySQL数据库在插入数据时出现阻塞的常见原因,以及如何查看和优化这些问题。通过分析慢查询日志、优化索引、优化数据类型、批量插入等手段,可以有效地提高MySQL数据库的插入性能。 一、引言 MySQL作为一款广泛应用于各类项…

用Pytorch实现线性回归模型

目录 回顾Pytorch实现步骤1. 准备数据2. 设计模型class LinearModel代码 3. 构造损失函数和优化器4. 训练过程5. 输出和测试完整代码 练习 回顾 前面已经学习过线性模型相关的内容,实现线性模型的过程并没有使用到Pytorch。 这节课主要是利用Pytorch实现线性模型。…

Pandas实战100例 | 案例 51: 日期时间过滤

案例 51: 日期时间过滤 知识点讲解 当你的 DataFrame 包含 datetime 类型的列时,你可以基于日期时间条件过滤数据。这在处理时间序列数据时特别有用。 日期时间过滤: 使用布尔索引,可以根据日期时间条件过滤数据。 示例代码 # 准备数据和示例代码的…

SVD和EVD的关系

文章目录 SVD和EVD基本概念具体计算中的关系 SVD和EVD基本概念 奇异值分解(Singular Value Decomposition,SVD)和特征值分解(Eigenvalue Decomposition,EVD)是矩阵分解的两种常见方法,它们在线…

(1)(1.13) SiK无线电高级配置(六)

文章目录 前言 15 使用FTDI转USB调试线配置SiK无线电设备 16 强制启动加载程序模式 17 名词解释 前言 本文提供 SiK 遥测无线电(SiK Telemetry Radio)的高级配置信息。它面向"高级用户"和希望更好地了解无线电如何运行的用户。 15 使用FTDI转USB调试线配置SiK无线…

Oracle12c创建表空间及用户

Oracle12c创建表空间及用户 1. 表空间相关内容 表空间数据文件容量与DB_BLOCK_SIZE有关,在初始建库时,DB_BLOCK_SIZE要根据实际需要,设置为 4K、8K、16K、32K、64K等几种大小,ORACLE的物理文件最大只允许4194304个数据块&#xf…

Go 语言运算符详解:加法、算术、赋值、比较、逻辑和位运算符全面解析

运算符用于对变量和值执行操作。 加号运算符()将两个值相加,如下面的示例所示: 示例代码: package mainimport ("fmt" )func main() {var a 15 25fmt.Println(a) }尽管加号运算符通常用于将两个值相加&a…

vue3 锚点定位 点击滚动高亮

功能描述 点击导航跳到对应模块的起始位置,并且高亮点击的导航; 滚动到相应的模块时,对应的导航也自动高亮; 效果展示 注意事项 一定要明确哪个是要滚动的盒子;滚动的高度要减去导航栏的高度;当前在导航1…

C++ 树与图的深度优先遍历 || 模版题:树的重心

树和无向图都可以看成有向图&#xff08;无向图在添加边的时候添加双向的&#xff09; 下面是模版&#xff0c;实际使用要根据情况改&#xff1a; #include <iostream> #include <cstring> using namespace std;const int N 10010, M N * 2;int n; int h[N], e[…

【VTKExamples::PolyData】第二期 曲率

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK中的曲率计算及显示,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 目录 前言 1. Curvatures样例 2. vtkCurv…

【发票识别】支持pdf、ofd、图片格式(orc、信息提取)的发票

背景 为了能够满足识别各种发票的功能&#xff0c;特地开发了当前发票识别的功能&#xff0c;当前的功能支持pdf、ofd、图片格式的发票识别&#xff0c;使用到的技术包括文本提取匹配、ocr识别和信息提取等相关的技术&#xff0c;用到机器学习和深度学习的相关技术。 体验 体…

vue知识-06

es6导入导出语法 # 做项目&#xff1a;肯定要写模块--导入使用 # 如果包下有个 index.js 直接导到index.js上一次即可 默认导出和导入 : export default name // 只导出变量 export default add // 只导出函数 export default {name,add} // 导出对象 export defau…

Cesium中设置弹窗随轨迹动画对象移动

1.这是要移动的弹窗&#xff0c;隐藏显示逻辑、样式、展示内容自己写&#xff0c;主要就是动态设置弹窗的style&#xff0c;floatLeft和floatTop都是Vue中的data双向绑定数据&#xff1b; <div id"box" v-show"hasMove" :style"{ left: floatLeft…

【软件测试学习笔记2】用例设计方法

1.能对穷举场景设计测试点&#xff08;等价法&#xff09; 等价类&#xff1a; 说明&#xff1a;在所有测试数据中&#xff0c;具有某种共同特征的数据集合进行划分 分类&#xff1a;有效等价类&#xff1a;满足需求的数据集合 无效等价类&#xff1a;不满足需求的数据集合 步…