首页 > 其他分享 >MetaGPT day01: MetaGPT作者代码走读、软件公司初始示例

MetaGPT day01: MetaGPT作者代码走读、软件公司初始示例

时间:2024-01-16 23:47:01浏览次数:34  
标签:MetaGPT 走读 模型 示例 SOP 智能 metagpt 代码

LLM发展历史

- 2013年word2vec提出,但效果不好
- 2017年Transformer结构提出,降低网络复杂度
- 2018年BERT预训练语言模型效果显著提升
- 2019年GPT-3推出,采用大规模预训练
- 2020年Instruction Tuning提出,实现零样本学习
- 2022年InstructGPT解决模型毒性问题
- 当前GPT-4成本高但效果最好

SOP

# 定义
所谓SOP,是 Standard Operation Procedure三个单词中首字母的大写,即'标准作业程序'(标准操作程序),就是将某一事件的标准操作步骤和要求以统一的格式描述出来,用来指导和规范日常的工作。

image-20240116113114005

v2-64cee9084001985ba5290c1d9117c5a9_720w_无水印

metagpt设计哲学

# metagpt定位:
多智能体框架。Metagpt是一个多智能体框架,构建了由多个智能体组成的软件公司。这些智能体在软件公司内协同工作完成实际项目。

# metagpt设计哲学:
软件公司核心资产:
	1.可运行的代码
	2.SOP(标准操作程序)
	3.团队
可运行的代码的实现取决于SOP和团队的协同努力。这三者构成了软件公司的核心资产,形成了Metagpt的设计哲学。
可运行的代码=sop+团队

# SOP的价值
SOP的重要性体现在其价值上,如华为花费100亿美元找ABIBN做SOP。
SOP是一项困难的工作,因为它涉及到对工作的抽象和总结。

例如,让一个创业公司编写今日头条的推荐系统。这样的工作对于一个架构师可能需要数月时间,需要绘制今日头条推荐系统的架构图。今日头条的推荐系统的架构图具有很高的价值,但是闭源。LLM可以通过互联网上的信息和各种猜测,进行整体总结翻译推理,最终得到一个架构图。(如下图所示)

# SOP提高智能体能力
例如,使用llm推理数学公式、证明数学假设,gpt4推理一次有20%成功率,如果有sop监督,1000次测试能做到80%成功率。
SOP在提高智能体推理和执行任务的准确性和效率方面有重要作用。

data_api_design

示例:启动一个创业公司

安装可以参考官方文档:MetaGPT: 多智能体框架 | MetaGPT (deepwisdom.ai)

import asyncio
from metagpt.roles import (
    Architect,
    Engineer,
    ProductManager,
    ProjectManager,
)
from metagpt.team import Team

async def startup(idea: str):
    company = Team()
    company.hire(
        [
            ProductManager(),
            Architect(),
            ProjectManager(),
            Engineer(),
        ]
    )
    company.invest(investment=3.0)  # 提供3美元的资金,如果超出就停止
    company.run_project(idea=idea)

    await company.run(n_round=5)  # 这个项目跑5轮

asyncio.run(startup(idea="write a cli blackjack game"))  # blackjack: 二十一点

'''
问题:
UserWarning: Pydantic serializer warnings in Pydantic V2
解决:
pip install -U pydantic datamodel-code-generator

问题:
metagpt.utils.common:log_it:438 - Finished call to 'metagpt.actions.action_node.ActionNode._aask_v1' after 285.140(s)
原因:
通过调试,我确定了问题的关键,这可能是由两个原因引起的。
1.zhipuAPI在很多情况下都无法返回正确的JSON格式。
例如:
	"标题": "MySQL教程",
	"目录": [{
			"目录1": [{
					"标题1": "MySQL简介",
					"内容1": "本章节将介绍MySQL的基本概念、特点和应用场景。"

2.太小的 LLM 模型(<13b 等)可能无法识别 json 是什么。
例如:
# MySQL 教程
## 一、MySQL概述
### 1.1 MySQL简介
### 1.2 MySQL的发展历程
### 1.3 MySQL的应用场景
### 1.4 MySQL的优势
解决:
开启重试 REPAIR_LLM_OUTPUT: true 
由于它是一个多代理/多操作管道,我们需要从 llm 输出中解析的结构来继续该过程。也许您可以定义自定义解析器来处理输出,但这会花费时间。
'''

运行代码会自动创建workspace和以下文件:(建议不要修改config.yaml,新建key.yaml配置apikey,靠上面的api优先使用。)

image-20240116122106055

gpt-3.5-turbo上下文长度不够,使用gpt-3.5-turbo-16k跑通,给了8轮运行,结果写出来的代码不能运行。
zhipuai 跑不通,github上issue提到因为无法返回正确的JSON格式。

metagpt项目结构

# metagpt产品规划蓝图(road map)
长远目标:希望metagpt能够实现自我进化,不断提升自身的智能水平和适应能力。
短期目标:实现2000行左右代码的自动化,通过精细化的编程,使metagpt在短期内能够执行各种任务和行为。

# 项目目录说明
actions
定义了metagpt执行的各种行为。
例如写一篇文章、进行代码审查等。actions和工具不同,而是一种操作模式。

document_store
用于统一管理和存储各种文档和信息。
类似于腾讯文档或飞书文档,是一个聚拢所有智能体输入键的地方。

learn
包含了标准化的学习流程和复用流程。
指导大模型如何学习并提高性能。为metagpt提供更高效的学习路径。

management
用于自动化生成智能体角色。
类似于人类世界通过职业培训培养各种人才,management模块旨在标准化和完整撰写智能体的培训过程,以完成团队的生产和管理。

memory
包括短期记忆和长期记忆。
使metagpt能够更好地理解和记忆先前的信息,实现更加智能和连贯的交互。

prompt
定义了提示词。
用于触发metagpt执行特定的任务或生成特定类型的内容。

provider
规定了如何调用第三方API。
使metagpt能够支持更多的LLM(Language Model)并且不耦合于本地LLM或组件,提高灵活性。

roles
定义了各种角色。
metagpt不局限于多智能体,也就是说可以将多智能体中的某个角色拿出来单独使用,在不同场景中灵活应用。
比如程序员可以在公司工作也可以在外面接单。
例如,销售、客服在多个场景都有用处。

tools
定义了第三方工具、api。
比如:stable diffusion、Midjourney等

utils
表示实现通用功能或算法的代码,这些功能或算法可以被多个模块或应用程序使用。

environment.py:环境,这个环境是有记忆的。承载一批角色,角色可以向环境发布消息,可以被其他角色观察到。类比于工作群:微信群、飞书群。

inspect_module.py:为了后续进行已有模块接管的工作。比如我们有一个已有的工程,我们希望能够接管已有的模块。
先反解已有模块的数据结构和api -反解-> 画出流程图、写出需求文档 
在此之上进行思考如何修改代码。
比如将贪吃蛇的颜色改成红色,这看起来程序员直接修改即可,但是实际上不行,需要产品经理先改需求文档,这涉及到了工作流。
因此我们需要将某个具体事情,反解出来,因此需要inspect_module.py。

company.run_project(idea=idea):每次去看看有没有余额,然后让环境中的每个智能体都跑起来。
hire:往环境里面雇佣(增加)智能体。
invest:设置一个最大预算。
check_balance:查看当前开销是否高于最大预算。   

QA

整场直播回放:https://www.bilibili.com/video/BV1Ru411V7XL/

# https://github.com/geekan/MetaGPT/blob/main/docs/ROADMAP.md
Q: 智能体在运行中可以加入反馈吗?
A: 支持人类确认和修改。
贪吃蛇软件。人类提出意见,修改贪吃蛇颜色为橙色。
这需要一个路由系统确定这个意见给谁?
比如给了程序员,但是ui角色已经将贪吃蛇的图画成了绿色。
所有应该按照顺序:
意见 --> 产品经理 --> 架构师 --> 程序员评估哪些重写、哪些不重写

Q: METAGPT不需要其他模型的训练过程吗?
A: metagpt的训练和运行是独立的。训练的部分在标准化产品act里:https://act-canary.test.metadl.com/。
Metagpt只有运用的功能,如果需要训练需要调这个act平台的api。

补充:

# ReAct
# 来源: https://juejin.cn/post/7259018705786339385

ReAct是Reasoning and Acting缩写,意思是大模型可以根据逻辑推理(Reason),构建完整系列行动(Act),从而达成期望目标。
ReAct方式的关键就是协调大语言模型和外部的信息获取,与其他功能交互:大模型是大脑,通过ReAct框架可以让大脑来控制手和脚。

在ReAct流程中,我们可以抓住三个关键的元素:
思考(Thought): 思考是由大模型创建的,为其行为和决定提供理论支撑。我们可以通过分析大模型的思考过程,来评估其即将采取的行动是否符合逻辑。它作为一个关键指标,能够帮助我们判断其决策的合理性。相比于人类的决策,Thought的存在赋予了大模型更出色的可解释性和可信度。

行动(Act): 行动代表大模型认为需要采取的具体行为。行动一般由两个部分构成:动作和目标,这在编程中对应着API名称和其输入参数。大模型的一大优点在于,它可以根据思考的结果,选择合适的API并生成所需的参数。这确保了ReAct框架在执行方面的实用性。

观察(Obs): 观察代表大模型如何获取外部输入。它就像大模型的感知系统,将环境的反馈信息同步给大模型,帮助它进一步进行分析或者决策。

标签:MetaGPT,走读,模型,示例,SOP,智能,metagpt,代码
From: https://www.cnblogs.com/passion2021/p/17968864

相关文章

  • 简单的.NET 8 Web API使用Kafka 发布订阅模式,示例api示例
    简单的.NET8WebAPI使用Kafka发布订阅模式,示例api示例kafka当使用Kafka时,我们需要使用Kafka的客户端库来与Kafka集群进行通信。在.NETCore中,可以使用Confluent.Kafka客户端库来实现与Kafka的集成。首先,我们需要在项目中添加Confluent.Kafka库的引用。首先,使用NuGet包管......
  • HarmonyOS4.0系列——01、下载、安装、配置环境、搭建页面以及运行示例代码
    HarmonyOS4.0应用开发安装编辑器这里安装windows版本为例安装依赖打开DevEcoStudio这八项全部打钩即可开始编写代码,如果存在x,需要安装正确的库即可开发点击CreateProject选择默认模板——nextModel部分分为Stage和FA两个应用模型,FA是支持7版本以内的模型支持JS和TS,而Stage支持最......
  • Google earth engine(GEE)示例:地形分析
    //导入研究区域varstudyArea:Tableprojects/assets/study_area//导入SRTM地形数据varsrtm=ee.Image('USGS/SRTMGL1_003');//提取研究区域的高程varelevation=srtm.clip(studyArea);//计算坡度varslope=ee.Terrain.slope(elevation);//计算坡向va......
  • 【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue
    这里写自定义目录标题一、组合式API-父子通信1.父传子2.子传父二、组合式API-模版引用1.基本使用2.defineExpose三、组合式API-provide和inject1.作用和场景2.跨层传递普通数据3.跨层传递响应式数据4.跨层传递方法四、Vue3.3新特性-defineOptions五、Vue3.3新特性......
  • 50、Flink的单元测试介绍及示例
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • c#中DataTable转List的2种方法示例
    1. 直接写一个datatable转list的类publicList<Dictionary<string,object>>DatatoTable(DataTabledt){List<Dictionary<string,object>>list=newList<Dictionary<string,object>>();foreach(DataRowdrindt.Rows)//每一行......
  • AntDesignBlazor示例——暗黑模式
    本示例是AntDesignBlazor的入门示例,在学习的同时分享出来,以供新手参考。示例代码仓库:https://gitee.com/known/BlazorDemo1.学习目标暗黑模式切换查找组件样式覆写组件样式2.添加暗黑模式切换组件1)双击打开MainLayout.razor文件,在header区域添加Switch组件及其事件来......
  • 构建高效外卖配送系统:技术要点与示例代码
    随着外卖服务的普及,构建一个高效的外卖配送系统成为餐饮业务成功的关键。在这篇文章中,我们将探讨外卖配送系统的关键技术要点,并提供一些示例代码,演示其中的一些实现方法。1.订单处理与管理在外卖配送系统中,订单处理是一个核心环节。以下是一个简化的订单类的示例代码,用Python语言......
  • 51、Flink的管理执行(执行配置、程序打包和并行执行)的介绍及示例
    文章目录Flink系列文章一、执行配置二、程序打包和分布式运行1、打包程序2、总结三、并行执行1、设置并行度1)、算子层次2)、执行环境层次3)、客户端层次4)、系统层次2、设置最大并行度本文介绍了Flink的管理执行的三个内容,即执行配置、打包和分布式运行以及并行执行(设置并行度的几......
  • 【flink番外篇】9、Flink Table API 支持的操作示例(13)- Row-based(map、flatmap、aggre
    文章目录Flink系列文章一、maven依赖二、Row-based操作1、本示例的公共代码1、Map2、FlatMap3、Aggregate4、GroupWindowAggregate5、FlatAggregate本文介绍了通过TableAPI基于行的map、flatmap、aggregate、groupwindowaggregate和flataggregate操作,并以示例进行展示操......