本文是原文副本
<aside> 💡 这个例子开启了让我看到了一个新纪元,让程序可以根据用户的意图自动的生成程序,具备了以前的程序所完全不具备的极具创造性的生成的行为。
</aside>
这个例子有2个版本:metaGPT repo中有些分支(e.g. Tags 0.5.x, 0.6.x), metagpt文件夹中有startup.py文件;官网quickstart页面给出了一个最简单的版本的例子
踩坑关键点:
满足以下几点,可以跑通startup.py的例子;这会迈过各类由于package版本不匹配造成的错误;
注意删除其他与metagpt==0.6.0存在冲突的python package,可能包括现存的semantic-kernel, pydantic, chromadb(如果之前装过其他的package), etc
注意openai的版本>1.0.0, openai proxy的属性名应该使用OPENAI_BASE_URL, 而不是OPENAI_API_BASE, 注意在tags/0.6.0 branch的config.yaml文件中的配置是后者,需要改过来
实验1的package & 环境变量清单
python 3.9.10 # pyenv versions, check current python env
# python packages
# pip install below packages
metagpt==0.6.0
asynio
playwright # 用于转换mermaid text to 图片/pdf等文件
# playwright 依赖它项目自带的chromium
playwright install --with-deps chromium
# 使用nodejs/npm 安装mermaid-cli
nodejs v19.3.0
npm v9.2.0
npm install -g @mermaid-js/mermaid-cli
# 有关pyppeteer: 也是一个用于把mermaid text转换成图片/pdf格式的工具
# 它依赖os系统自带安装好的chrome,edge等浏览器
# 但目前pyppeteer处于不维护的状态
#
# pip install pyppeteer
# export PUPPETEER_EXECUTABLE_PATH=/path/to/your/chromium
这个repo的例子的一次运行,用去DevGPT Openai 290+ tokens,这是非常耗费token的;
官网上quickstart的简单版本,我在metagpt 0.5.2的环境下可以运行,但最后只有设计文件生成,没有代码生成(有可能简单版的例子,没有要求生成代码?)
Todo
实验环境和作业1中描述一致
await role.run()
方法的结果; 报**"object str can't be used in await expression"**; 这是困扰时间较长的问题# 这是role执行的起点;
role = RunnableCodeRole()
result = await role.run(init_msg) # 必须有init_msg, 否则在_observe阶段就退出了;
role的run()方法主要过程是:
self.react(), 在仅考虑self.rc.react_mode为"by_order", => self._act_by_order
self.states是在role init()中_init_actions()设定了多action;所以这里在for loop中设定每次执行的action动作self._set_state(i)
,rsp = await self._act()
,设定了每次执行role._act()方法执行前的state上下文, 对应着不同的action;
模型
实验了openai & zhipuai
expected_result应该是30,导致在执行时在python的bytecode中报错;实际上是expected_result2=20
这句的错误
调试
可以使用logger调试
代码参考: https://github.com/dustyface/metagpt-sample/blob/main/doc_assistant.py
踩坑:使用的LLM是ZhuPu API(ChatGLM)
,
, 导致OutputParser出错;prompt调优采用如下2句可以避免:"""
...
take below as an example:
{{ "title": "Git教程", "directory": [{{"MySQL简介": ["1.1 什么是MySQL", "1.2 MySQL的优点"]}}, {{ "安装和配置MySQL": ["安装MySQL", "配置MySQL"]}}] }}
...
4. Make sure the output strictly comform to the format of JSON.
5. Make sure the punctuation appeared in the output JSON, such as comma, curly brace, double quote, etc, is in English
"""
print_agent.py, 代码参考:https://github.com/dustyface/metagpt-sample/blob/main/print_agent.py
metagpt 0.6.0
代码实现:https://github.com/dustyface/metagpt-sample/blob/main/src/doc_assistant/doc_assistant.py
此题踩坑严重:
需要增加Enviroment,否则报错:
pydantic.errors.PydanticUserError: SubscriptionRunner is not fully defined; you should define Environment, then call SubscriptionRunner.model_rebuild().
Metagpt 0.6.0的zhipu model的信息已经是过时的,造成报错
运行结果
# 注意如果trigger是class到定义,override的__anext__, __aiter__(todo)
await pb.subscribe(Searcher(),trigger(),callback)
Crawler 爬虫爬取github trending信息
repo_element.find('a', class_="Link mr-3")
这类搜索是精确匹配,拿不到内容;href=re.compile('fork')
, select("span[itemprop]='programming'"
这样的方式匹配到结果;