无外网环境部署 AgentFabric 及使用 AgentFabric 构建的 Agent

cover

原文地址:https://alphahinex.github.io/2024/04/14/local-deploy-agentfabric-and-agent/


description: "内网环境部署一个可定制的 AI 智能体"
date: 2024.04.14 10:26
categories:
- AI
- Python
tags: [LLM, AI Agent, ModelScope-Agent]
keywords: modelscope, modelscope-agent, agentfabric, docker, local, offline, LLM, AI Agent


  • 目标:在纯内网环境完成基于 ModelScope-Agent 的可定制化的 Agent 的构建和发布
  • 前提:需在有外网环境提前下载好所需内容

一、外网环境中下载所需内容

在可以访问外网的环境中,准备一个工作目录(如:/data/work),在这个目录下进行后续操作。

1. 拉取镜像

拉取 ModelScope-Agent 镜像,镜像中已经安装好所需依赖。

docker pull registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope-agent:v0.3.0

导出镜像文件:

docker save > modelscope-agent.tar \
registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope-agent:v0.3.0

启动容器:

docker run -ti -v /data/work:/data/work \
registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope-agent:v0.3.0 bash

其中 -v /data/work:/data/work 把本地 /data/work 目录挂载到容器中的相同路径。执行命令此命令后已进入容器,后续操作都将在容器中进行。

从容器中进入到工作目录:

cd /data/work

2. 下载 LLM 模型

在容器工作目录中下载模型到本地:以 qwen/Qwen1.5-7B-Chat 模型为例,可以换成其他微调的模型:

python -c "from modelscope import snapshot_download; snapshot_download('qwen/Qwen1.5-7B-Chat', cache_dir='qwen1.5-7b-chat')"

3. 下载 Embedding 模型

在容器工作目录中下载 ModelScope-Agent 使用的 Embedding 模型
damo/nlp_gte_sentence-embedding_chinese-base
也可换成其他模型:

git clone https://www.modelscope.cn/iic/nlp_gte_sentence-embedding_chinese-base.git

4. 下载 ModelScope-Agent 代码

在容器工作目录中拉取 ModelScope-Agent 最新 master 分支代码:

git clone https://github.com/modelscope/modelscope-agent.git

5. 下载内容传输至内网环境

将工作目录传输至内网离线环境对应目录中,可同样使用 /data/work

二、内网环境部署 LLM

导入镜像

进入工作路径 /data/work,导入镜像文件:

docker load < modelscope-agent.tar

部署 LLM 服务

ModelScope 提供模型 本地启动服务 功能。

这里我们使用该功能,将模型部署成 Openai API 兼容的接口。具体操作可参考如下:

# 创建并进入容器
nvidia-docker run -ti --net host -v /data/work:/data/work \
registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope-agent:v0.3.0 bash

从容器中进入到工作目录:

cd /data/work

在容器工作目录中启动服务:

MODELSCOPE_CACHE='qwen1.5-7b-chat' python -m vllm.entrypoints.openai.api_server \
    --model qwen/Qwen1.5-7B-Chat --dtype=half --max-model-len 8192  --gpu-memory-utilization 0.95 &

随后测试模型服务,如果正确返回,说明模型服务部署完成。

curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "qwen/Qwen1.5-7B-Chat",
        "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "写一篇春天为主题的作文"}
        ],
        "stop": ["<|im_end|>", "<|endoftext|>"]
    }'

三、内网环境部署 AgentFabric

另起一个终端窗口,登录到上面拉起的 docker 容器中:

# 查看之前容器ID
sudo docker ps -a
# 进入对应容器ID的容器
sudo docker exec -ti CONTAINER_ID bash

在容器工作目录(/data/work)中进行后续操作。

编辑模型配置文件

编辑 modelscope-agent/apps/agentfabric/config/model_config.json, 增加如下配置:

diff --git a/apps/agentfabric/config/model_config.json b/apps/agentfabric/config/model_config.json
index 4db68ce..be7fbf3 100644
--- a/apps/agentfabric/config/model_config.json
+++ b/apps/agentfabric/config/model_config.json
@@ -124,5 +124,12 @@
         "api_base": "http://localhost:8000/v1",
         "is_chat": true,
         "is_function_call": false
+    },
+    "qwen1.5-7b-chat": {
+        "type": "openai",
+        "model": "qwen/Qwen1.5-7B-Chat",
+        "api_base": "http://localhost:8000/v1",
+        "is_chat": true,
+        "is_function_call": false
     }
 }

编辑 Embedding 模型 model_id

编辑 modelscope-agent/modelscope_agent/storage/vector_storage.py,将该文件中的模型 model_id 修改为本地模型路径:

diff --git a/modelscope_agent/storage/vector_storage.py b/modelscope_agent/storage/vector_storage.py
index c6f9fdc..29f518a 100644
--- a/modelscope_agent/storage/vector_storage.py
+++ b/modelscope_agent/storage/vector_storage.py
@@ -28,7 +28,7 @@ class VectorStorage(BaseStorage):
         self.storage_path = storage_path
         self.index_name = index_name
         self.embedding = embedding or ModelScopeEmbeddings(
-            model_id='damo/nlp_gte_sentence-embedding_chinese-base')
+            model_id='/data/work/nlp_gte_sentence-embedding_chinese-base')
         self.vs_cls = vs_cls
         self.vs_params = vs_params
         self.index_ext = index_ext

拉起 AgentFabric

modelscope-agent/apps/agentfabric 目录下执行如下命令拉起 AgentFabric Gradio:

GRADIO_SERVER_NAME=0.0.0.0 PYTHONPATH=../../  python app.py

启动时如遇 ModuleNotFoundError: No module named 'modelscope_studio' 报错,请将 modelscope-agent 仓库回滚至 8deef6d4git checkout 8deef6d4),因为后面的 68c7dd7f 提交修改了依赖,导致镜像中缺少新增的依赖。

如需更改默认配置文件路径,可修改 modelscope-agent/apps/agentfabric/config_utils.py 中的 DEFAULT_AGENT_DIR 和通过环境变量指定 CODE_INTERPRETER_WORK_DIR,如:

CODE_INTERPRETER_WORK_DIR=/data/work/agentfabric/ci_workspace \
GRADIO_SERVER_NAME=0.0.0.0 PYTHONPATH=../../  python app.py

然后在浏览器中输入 http://内网服务器IP:7860 打开即可看到如下界面。

四、内网环境发布使用 AgentFabric 构建的 Agent

通过 AgentFabric 完成 Agent 的基本配置之后,在 配置(Configure) tab 页点击左侧下方的 更新配置 按钮,
即可将自定义的配置内容生成至指定的配置文件中(默认路径为 /tmp/agentfabric/config/local_user/builder_config.json)。

完成配置后可停掉 AgentFabric 的 Gradio 应用。

发布配置好的 Agent Gradio 应用,可在 modelscope-agent/apps/agentfabric 目录下执行如下命令:

GRADIO_SERVER_NAME=0.0.0.0 GRADIO_SERVER_PORT=7865 PYTHONPATH=../../  python appBot.py

如启动 AgentFabric 时指定了配置文件路径,启动 Agent 时也需指定相同路径。

然后在浏览器中输入 http://内网服务器IP:7865 打开即可看到界面。

Custom Agent
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容