1. 环境配置
# 创建环境
conda create -n lagent python=3.10 -y
# 激活环境
conda activate lagent
# 安装 torch
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
# 安装其他依赖包
pip install termcolor==2.4.0
pip install streamlit==1.39.0
pip install class_registry==2.1.2
pip install datasets==3.1.0
2. 从GitHub上克隆指定的仓库github.com/InternLM/lagent.git
# 创建目录以存放代码
mkdir -p /root/agent_camp4
cd /root/agent_camp4
git clone https://github.com/InternLM/lagent.git
cd lagent && git checkout e304e5d && pip install -e . && cd ..
pip install griffe==0.48.0
3. 创建agent_api_web_demo.py
,在里面实现Web Demo
conda activate lagent
cd /root/agent_camp4/lagent/examples
touch agent_api_web_demo.py
4. 调用Arxiv文献检索工具 并运行 streamlit run agent_api_web_demo.py
(运行前可以通过bash命令 export token='your_token_here')
打开url 后,可以看到左侧可选ArxivSearch插件,点击选中后,对比打开插件(第一条回答和第二条回答的差别)
5. 制作一个属于自己的Agent
5.1 在和风天气注册并获取api key
5.2 创建一个天气查询的工具程序
conda activate lagent
cd /root/agent_camp4/lagent/lagent/actions
touch weather_query.py
5.3 在/root/agent_camp4/lagent/lagent/actions/__init__.py中加入下面第15行和第25行的代码,用以初始化WeatherQuery方法
5.4 修改agent_api_web_demo.py文件的第5行,增加第19行,目的是将该工具注册进大模型的插件列表中
5.5 再次运行 streamlit run agent_api_web_demo.py
(运行前可以通过bash命令 输入export weather_token='天气的API Key')
我们将2个插件同时勾选上,用以说明模型具备识别调用不同工具的能力,什么任务对应什么工具来解决
第一个回答是没有采用天气api的情况下,模型错误回答(当前是2025年2月5号冬天),第二个回答是2个插件都勾选上后的效果
6. Multi-Agents博客写作系统的搭建
6.1 创建一个新的 Python 文件 multi_agents_api_web_demo.py
conda activate lagent
cd /root/agent_camp4/lagent/examples
touch multi_agents_api_web_demo.py
6.2 运行streamlit run multi_agents_api_web_demo.py,启动Web服务 输入话题,比如Semi-Supervised Learning:
可以看到,Multi-Agents博客写作系统正在按照下面的3步骤,生成、批评和完善内容。
Step 1:写作者根据用户输入生成初稿。
Step 2:批评者对初稿进行评估,提供改进建议和文献推荐(通过关键词触发 Arxiv 文献搜索)。
Step 3:写作者根据批评意见对内容进行改进。
7. Huggingface Spaces 部署
7.1 Huggingface在给项目创建一个新的space, sdk选择Streamlit
7.2 本地设置环境变量
在setting中, Variables and secrets,右上角创建 New secret
这里输入两个 api_key,一个是 token
——浦语/硅基流动 api,一个是 weather_token
——和风天气 api,要注意名称不要写错
保存后,2个token
7.3 获取用户输入token与多页面导航
7.3.1 修改requirements.txt文件,指定初始化环境清单
首先因为 Huggingface Spaces在初始化时需要提供 python 环境的清单,因此我们修改 /root/agent_camp4/lagent/requirements.txt
,在其中添加如下 python 包
torch==2.1.2
torchvision==0.16.2
torchaudio==2.1.2
termcolor==2.4.0
streamlit==1.39.0
class_registry==2.1.2
datasets==3.1.0
# -r requirements/optional.txt
google-search-results
lmdeploy>=0.2.5
pillow
python-pptx
timeout_decorator
torch
transformers>=4.34,<=4.40
vllm>=0.3.3
# -r requirements/runtime.txt
aiohttp
arxiv
asyncache
asyncer
distro
duckduckgo_search==5.3.1b1
filelock
func_timeout
griffe<1.0
json5
jsonschema
jupyter==1.0.0
jupyter_client==8.6.2
jupyter_core==5.7.2
pydantic==2.6.4
requests
termcolor
tiktoken
timeout-decorator
typing-extensions
griffe==0.48.0
7.3.2 app.py
文件(确保app.py文件在层级/root/agent_camp4/lagent/app.py)
由于 Huggingface Spaces 要求 file 中必须有一个名称为 app.py
的文件,否则会出现 No application file
错误
我们当然可以把 agent_api_web_demo.py 和 multi_agents_api_web_demo.py 更名为 app.py,然而考虑到这两个页面文件会调用到其他代码,我们又不希望把时间浪费在找依赖上,于是我们直接在 agent_camp4/lagent 文件夹下做一个 app.py 的入口文件当作 HomePage,编写一个多页面的 streamlit 首页实现对天气查询小助手和博客写作小助手两个 agent 的导航,代码如下(我们这里采用代码写入环境变量的方式,这样子别人来访问的时候可以不用消耗你自己的 api_token,而是让他们自己填写)
7.3.3
此外由于 streamlit 要求一个页面内只能有一个 st.set_page_config()
函数,因此需要把 agent_api_web_demo.py
和 multi_agents_api_web_demo.py
中的相应代码注释掉,不然会报错,详见https://github.com/InternLM/Tutorial/blob/camp4/docs/L2/Agent/readme.md
7.3.4 文件拷贝和推送
将 agent_camp4/lagent
文件夹下需要的文件用 rsync
全都拷贝到自己新建的 huggingface Spaces 仓库下了(注意,git clone的时候,需要确保cd到root层级,即root/agent_by_lagent/和root/agent_camp4/lagent/是一个level的)
git clone https://hf-mirror.com/spaces/shaoshaoshao/agent_by_lagent
cd agent_by_lagent/
rsync -av -o -t --exclude='.git*' --exclude='README.md' /root/agent_camp4/lagent/ /root/agent_by_lagent/
git add .
git commit -m "Add files"
git push
7.3.5 推送后,刷新app页面