MetaGPT day01: MetaGPT作者代码走读、软件公司初始示例
LLM發(fā)展歷史
- 2013年word2vec提出,但效果不好
- 2017年Transformer結(jié)構(gòu)提出,降低網(wǎng)絡(luò)復(fù)雜度
- 2018年BERT預(yù)訓(xùn)練語(yǔ)言模型效果顯著提升
- 2019年GPT-3推出,采用大規(guī)模預(yù)訓(xùn)練
- 2020年Instruction Tuning提出,實(shí)現(xiàn)零樣本學(xué)習(xí)
- 2022年InstructGPT解決模型毒性問(wèn)題
- 當(dāng)前GPT-4成本高但效果最好
SOP
# 定義
所謂SOP,是 Standard Operation Procedure三個(gè)單詞中首字母的大寫,即'標(biāo)準(zhǔn)作業(yè)程序'(標(biāo)準(zhǔn)操作程序),就是將某一事件的標(biāo)準(zhǔn)操作步驟和要求以統(tǒng)一的格式描述出來(lái),用來(lái)指導(dǎo)和規(guī)范日常的工作。
metagpt設(shè)計(jì)哲學(xué)
# metagpt定位:
多智能體框架。Metagpt是一個(gè)多智能體框架,構(gòu)建了由多個(gè)智能體組成的軟件公司。這些智能體在軟件公司內(nèi)協(xié)同工作完成實(shí)際項(xiàng)目。
# metagpt設(shè)計(jì)哲學(xué):
軟件公司核心資產(chǎn):
1.可運(yùn)行的代碼
2.SOP(標(biāo)準(zhǔn)操作程序)
3.團(tuán)隊(duì)
可運(yùn)行的代碼的實(shí)現(xiàn)取決于SOP和團(tuán)隊(duì)的協(xié)同努力。這三者構(gòu)成了軟件公司的核心資產(chǎn),形成了Metagpt的設(shè)計(jì)哲學(xué)。
可運(yùn)行的代碼=sop+團(tuán)隊(duì)
# SOP的價(jià)值
SOP的重要性體現(xiàn)在其價(jià)值上,如華為花費(fèi)100億美元找ABIBN做SOP。
SOP是一項(xiàng)困難的工作,因?yàn)樗婕暗綄?duì)工作的抽象和總結(jié)。
例如,讓一個(gè)創(chuàng)業(yè)公司編寫今日頭條的推薦系統(tǒng)。這樣的工作對(duì)于一個(gè)架構(gòu)師可能需要數(shù)月時(shí)間,需要繪制今日頭條推薦系統(tǒng)的架構(gòu)圖。今日頭條的推薦系統(tǒng)的架構(gòu)圖具有很高的價(jià)值,但是閉源。LLM可以通過(guò)互聯(lián)網(wǎng)上的信息和各種猜測(cè),進(jìn)行整體總結(jié)翻譯推理,最終得到一個(gè)架構(gòu)圖。(如下圖所示)
# SOP提高智能體能力
例如,使用llm推理數(shù)學(xué)公式、證明數(shù)學(xué)假設(shè),gpt4推理一次有20%成功率,如果有sop監(jiān)督,1000次測(cè)試能做到80%成功率。
SOP在提高智能體推理和執(zhí)行任務(wù)的準(zhǔn)確性和效率方面有重要作用。
示例:?jiǎn)?dòng)一個(gè)創(chuàng)業(yè)公司
安裝可以參考官方文檔: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) # 這個(gè)項(xiàng)目跑5輪
asyncio.run(startup(idea="write a cli blackjack game")) # blackjack: 二十一點(diǎn)
'''
問(wèn)題:
UserWarning: Pydantic serializer warnings in Pydantic V2
解決:
pip install -U pydantic datamodel-code-generator
問(wèn)題:
metagpt.utils.common:log_it:438 - Finished call to 'metagpt.actions.action_node.ActionNode._aask_v1' after 285.140(s)
原因:
通過(guò)調(diào)試,我確定了問(wèn)題的關(guān)鍵,這可能是由兩個(gè)原因引起的。
1.zhipuAPI在很多情況下都無(wú)法返回正確的JSON格式。
例如:
"標(biāo)題": "MySQL教程",
"目錄": [{
"目錄1": [{
"標(biāo)題1": "MySQL簡(jiǎn)介",
"內(nèi)容1": "本章節(jié)將介紹MySQL的基本概念、特點(diǎn)和應(yīng)用場(chǎng)景。"
2.太小的 LLM 模型(<13b 等)可能無(wú)法識(shí)別 json 是什么。
例如:
# MySQL 教程
## 一、MySQL概述
### 1.1 MySQL簡(jiǎn)介
### 1.2 MySQL的發(fā)展歷程
### 1.3 MySQL的應(yīng)用場(chǎng)景
### 1.4 MySQL的優(yōu)勢(shì)
解決:
開啟重試 REPAIR_LLM_OUTPUT: true
由于它是一個(gè)多代理/多操作管道,我們需要從 llm 輸出中解析的結(jié)構(gòu)來(lái)繼續(xù)該過(guò)程。也許您可以定義自定義解析器來(lái)處理輸出,但這會(huì)花費(fèi)時(shí)間。
'''
運(yùn)行代碼會(huì)自動(dòng)創(chuàng)建workspace和以下文件:(建議不要修改config.yaml,新建key.yaml配置apikey,靠上面的api優(yōu)先使用。)
gpt-3.5-turbo上下文長(zhǎng)度不夠,使用gpt-3.5-turbo-16k跑通,給了8輪運(yùn)行,結(jié)果寫出來(lái)的代碼不能運(yùn)行。zhipuai 跑不通,github上issue提到因?yàn)闊o(wú)法返回正確的JSON格式。
metagpt項(xiàng)目結(jié)構(gòu)
# metagpt產(chǎn)品規(guī)劃藍(lán)圖(road map)
長(zhǎng)遠(yuǎn)目標(biāo):希望metagpt能夠?qū)崿F(xiàn)自我進(jìn)化,不斷提升自身的智能水平和適應(yīng)能力。
短期目標(biāo):實(shí)現(xiàn)2000行左右代碼的自動(dòng)化,通過(guò)精細(xì)化的編程,使metagpt在短期內(nèi)能夠執(zhí)行各種任務(wù)和行為。
# 項(xiàng)目目錄說(shuō)明
actions
定義了metagpt執(zhí)行的各種行為。
例如寫一篇文章、進(jìn)行代碼審查等。actions和工具不同,而是一種操作模式。
document_store
用于統(tǒng)一管理和存儲(chǔ)各種文檔和信息。
類似于騰訊文檔或飛書文檔,是一個(gè)聚攏所有智能體輸入鍵的地方。
learn
包含了標(biāo)準(zhǔn)化的學(xué)習(xí)流程和復(fù)用流程。
指導(dǎo)大模型如何學(xué)習(xí)并提高性能。為metagpt提供更高效的學(xué)習(xí)路徑。
management
用于自動(dòng)化生成智能體角色。
類似于人類世界通過(guò)職業(yè)培訓(xùn)培養(yǎng)各種人才,management模塊旨在標(biāo)準(zhǔn)化和完整撰寫智能體的培訓(xùn)過(guò)程,以完成團(tuán)隊(duì)的生產(chǎn)和管理。
memory
包括短期記憶和長(zhǎng)期記憶。
使metagpt能夠更好地理解和記憶先前的信息,實(shí)現(xiàn)更加智能和連貫的交互。
prompt
定義了提示詞。
用于觸發(fā)metagpt執(zhí)行特定的任務(wù)或生成特定類型的內(nèi)容。
provider
規(guī)定了如何調(diào)用第三方API。
使metagpt能夠支持更多的LLM(Language Model)并且不耦合于本地LLM或組件,提高靈活性。
roles
定義了各種角色。
metagpt不局限于多智能體,也就是說(shuō)可以將多智能體中的某個(gè)角色拿出來(lái)單獨(dú)使用,在不同場(chǎng)景中靈活應(yīng)用。
比如程序員可以在公司工作也可以在外面接單。
例如,銷售、客服在多個(gè)場(chǎng)景都有用處。
tools
定義了第三方工具、api。
比如:stable diffusion、Midjourney等
utils
表示實(shí)現(xiàn)通用功能或算法的代碼,這些功能或算法可以被多個(gè)模塊或應(yīng)用程序使用。
environment.py:環(huán)境,這個(gè)環(huán)境是有記憶的。承載一批角色,角色可以向環(huán)境發(fā)布消息,可以被其他角色觀察到。類比于工作群:微信群、飛書群。
inspect_module.py:為了后續(xù)進(jìn)行已有模塊接管的工作。比如我們有一個(gè)已有的工程,我們希望能夠接管已有的模塊。
先反解已有模塊的數(shù)據(jù)結(jié)構(gòu)和api -反解-> 畫出流程圖、寫出需求文檔
在此之上進(jìn)行思考如何修改代碼。
比如將貪吃蛇的顏色改成紅色,這看起來(lái)程序員直接修改即可,但是實(shí)際上不行,需要產(chǎn)品經(jīng)理先改需求文檔,這涉及到了工作流。
因此我們需要將某個(gè)具體事情,反解出來(lái),因此需要inspect_module.py。
company.run_project(idea=idea):每次去看看有沒(méi)有余額,然后讓環(huán)境中的每個(gè)智能體都跑起來(lái)。
hire:往環(huán)境里面雇傭(增加)智能體。
invest:設(shè)置一個(gè)最大預(yù)算。
check_balance:查看當(dāng)前開銷是否高于最大預(yù)算。
QA
整場(chǎng)直播回放:https://www.bilibili.com/video/BV1Ru411V7XL/
# https://github.com/geekan/MetaGPT/blob/main/docs/ROADMAP.md
Q: 智能體在運(yùn)行中可以加入反饋嗎?
A: 支持人類確認(rèn)和修改。
貪吃蛇軟件。人類提出意見,修改貪吃蛇顏色為橙色。
這需要一個(gè)路由系統(tǒng)確定這個(gè)意見給誰(shuí)?
比如給了程序員,但是ui角色已經(jīng)將貪吃蛇的圖畫成了綠色。
所有應(yīng)該按照順序:
意見 --> 產(chǎn)品經(jīng)理 --> 架構(gòu)師 --> 程序員評(píng)估哪些重寫、哪些不重寫
Q: METAGPT不需要其他模型的訓(xùn)練過(guò)程嗎?
A: metagpt的訓(xùn)練和運(yùn)行是獨(dú)立的。訓(xùn)練的部分在標(biāo)準(zhǔn)化產(chǎn)品act里:https://act-canary.test.metadl.com/。
Metagpt只有運(yùn)用的功能,如果需要訓(xùn)練需要調(diào)這個(gè)act平臺(tái)的api。
補(bǔ)充:
# ReAct
# 來(lái)源: https://juejin.cn/post/7259018705786339385
ReAct是Reasoning and Acting縮寫,意思是大模型可以根據(jù)邏輯推理(Reason),構(gòu)建完整系列行動(dòng)(Act),從而達(dá)成期望目標(biāo)。
ReAct方式的關(guān)鍵就是協(xié)調(diào)大語(yǔ)言模型和外部的信息獲取,與其他功能交互:大模型是大腦,通過(guò)ReAct框架可以讓大腦來(lái)控制手和腳。
在ReAct流程中,我們可以抓住三個(gè)關(guān)鍵的元素:
思考(Thought): 思考是由大模型創(chuàng)建的,為其行為和決定提供理論支撐。我們可以通過(guò)分析大模型的思考過(guò)程,來(lái)評(píng)估其即將采取的行動(dòng)是否符合邏輯。它作為一個(gè)關(guān)鍵指標(biāo),能夠幫助我們判斷其決策的合理性。相比于人類的決策,Thought的存在賦予了大模型更出色的可解釋性和可信度。
行動(dòng)(Act): 行動(dòng)代表大模型認(rèn)為需要采取的具體行為。行動(dòng)一般由兩個(gè)部分構(gòu)成:動(dòng)作和目標(biāo),這在編程中對(duì)應(yīng)著API名稱和其輸入?yún)?shù)。大模型的一大優(yōu)點(diǎn)在于,它可以根據(jù)思考的結(jié)果,選擇合適的API并生成所需的參數(shù)。這確保了ReAct框架在執(zhí)行方面的實(shí)用性。
觀察(Obs): 觀察代表大模型如何獲取外部輸入。它就像大模型的感知系統(tǒng),將環(huán)境的反饋信息同步給大模型,幫助它進(jìn)一步進(jìn)行分析或者決策。
總結(jié)
以上是生活随笔為你收集整理的MetaGPT day01: MetaGPT作者代码走读、软件公司初始示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ictclas,ansj,结巴分词,St
- 下一篇: HP的电子邮件抄送方法