乐于分享
好东西不私藏

札记|AI Agent接入私有化(本地)模型:养"虾"记(OpenClaw)

札记|AI Agent接入私有化(本地)模型:养"虾"记(OpenClaw)

Hello 大家好呀!热烈欢迎来到 Turing门徒 的成长世界,一起学习、探索、交流技术 🚀

门徒今天与大家一起学习的是:如何把OpenClaw接入我们私有化(本地)部署的模型。

引言

本系列此前的文章:

门徒之前已经在算力一体机上搭建好了"google/gemma-4-26B-A4B-it"模型,今天我们就要真正把它用起来:通过安装部署OpenClaw(此前热度很高的"小龙虾")并配置接入我们的"google/gemma-4-26B-A4B-it"模型来进行养"虾"。

门徒日常使用的机器都是Ubuntu系统居多,在此也是以Ubuntu系统为例进行环境的搭建和部署,当然理解了原理,换到其他平台上的搭建也类似,大同小异。

gemma-4-26B-A4B-it模型

此前,我们为了演示vllm的启动参数,都是通过手动执行vllm命令来启动gemma-4-26B-A4B-it模型。这里为了方便供AI Agent长期使用该模型,我们先给vllm启动gemma-4-26B-A4B-it模型的命令设置为一个Systemd Service,让其能开机自启动。

创建vllm-gemma4.service文件

sudo tee /etc/systemd/system/vllm-gemma4.service > /dev/null << 'EOF'[Unit]Description=vLLM Gemma-4-26B-A4B-it ServiceAfter=network.target multi-user.target[Service]工作目录WorkingDirectory=/home/YourUserName/vllm启动命令ExecStart=/home/YourUserName/vllm/.venv/bin/vllm serve ./models/google/gemma-4-26B-A4B-it \--served-model-name gemma-4-26B-A4B-it \--host 0.0.0.0 \--port 8000 \--tensor-parallel-size 2 \--trust-remote-code \--max-model-len 262144 \--gpu-memory-utilization 0.91 \--max_num_seqs 16 \--enable-auto-tool-choice \--tool-call-parser gemma4运行用户(必须改成你实际运行的用户,否则权限报错)User=YourUserNameGroup=YourUserName服务异常自动重启Restart=alwaysRestartSec=5环境变量(解决 GPU、CUDA 问题)Environment="NCCL_P2P_DISABLE=0"Environment="NCCL_DEBUG=INFO"Environment="PATH=/home/YourUserName/vllm/.venv/bin:/usr/local/cuda/bin:/usr/bin"Environment="LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/lib/x86_64-linux-gnu"Environment="CUDA_VISIBLE_DEVICES=0,1"限制服务最大打开文件数LimitNOFILE=65535标准输出日志StandardOutput=journal+consoleStandardError=journal+console[Install]WantedBy=multi-user.targetEOF

开启vllm-gemma4模型服务并对服务进行设置开机自启动

重新加载Systemd服务的配置文件sudo systemctl daemon-reload通过创建符号链接,使vllm-gemma4服务在系统启动时自动加载sudo systemctl enable vllm-gemma4.serviceCreated symlink /etc/systemd/system/multi-user.target.wants/vllm-gemma4.service → /etc/systemd/system/vllm-gemma4.service.通过服务启动模型sudo systemctl start vllm-gemma4.service查看服务状态sudo systemctl status vllm-gemma4.service● vllm-gemma4.service - vLLM Gemma-4-26B-A4B-it Service     Loaded: loaded (/etc/systemd/system/vllm-gemma4.service; enabled; vendor preset: enabled)     Active: active (running) since Mon 2026-05-18 16:52:48 CST; 1min 35s ago   Main PID: 9700 (vllm)      Tasks: 500 (limit: 308917)     Memory: 8.5G        CPU: 1min 47.959s     CGroup: /system.slice/vllm-gemma4.service核实vllm启动模型已启用P2P:isAllDirectP2p 1sudo journalctl -u vllm-gemma4.service | grep -i p2pMay 18 16:53:28 4xAI vllm[9911]: 4xAI:9911:9911 [0] NCCL INFO P2P Chunksize set to 131072May 18 16:53:28 4xAI vllm[9911]: 4xAI:9911:9911 [0] NCCL INFO Check P2P Type isAllDirectP2p 1 directMode 0 isAllCudaP2p 1May 18 16:53:28 4xAI vllm[9911]: 4xAI:9911:9911 [0] NCCL INFO 2 coll channels, 2 collnet channels, 0 nvls channels, 2 p2p channels, 2 p2p channels per peerMay 18 16:53:28 4xAI vllm[9911]: 4xAI:9911:9911 [0] NCCL INFO Channel 00/0 : 0[0] -> 1[1] via P2P/CUMEMMay 18 16:53:28 4xAI vllm[9911]: 4xAI:9911:9911 [0] NCCL INFO Channel 01/0 : 0[0] -> 1[1] via P2P/CUMEMMay 18 16:53:28 4xAI vllm[9911]: 4xAI:9911:9911 [0] NCCL INFO P2P Chunksize set to 131072May 18 16:53:28 4xAI vllm[9911]: 4xAI:9911:9911 [0] NCCL INFO Check P2P Type isAllDirectP2p 1 directMode 0 isAllCudaP2p 1May 18 16:53:28 4xAI vllm[9911]: 4xAI:9911:9911 [0] NCCL INFO 2 coll channels, 2 collnet channels, 0 nvls channels, 2 p2p channels, 2 p2p channels per peerMay 18 16:53:28 4xAI vllm[9911]: 4xAI:9911:9911 [0] NCCL INFO Channel 00/0 : 0[0] -> 1[1] via P2P/CUMEM

局域网验证模型访问

门徒是在局域网的另一台机器访问算力一体机(IP:10.126.126.6)的模型。

导出vllm模型的API基址urlexport VLLM_API_BASE_URL=10.126.126.6:8000

/v1/chat/completions: OpenAI的API方式

curl -s http://${VLLM_API_BASE_URL}/v1/chat/completions   -H "Content-Type: application/json"   -d '{    "model": "gemma-4-26B-A4B-it",    "messages": [      {"role": "user", "content": "请详细介绍我已使用vllm完成私有化部署gemma-4-26B-A4B-it模型后,怎么让局域网的机器以OpenAI 方式的API接入AI Agent?"}    ],    "max_tokens": 256,    "temperature": 0.6  }' | jq -r '.choices[0].message.content'

返回结果

在使用 vLLM 部署完 `gemma-4-26B-A4B-it` 模型后,由于 vLLM 原生支持 **OpenAI 兼容接口**,实现局域网接入其实非常简单。你不需要编写复杂的后端代码,只需要配置好**网络监听地址**和**局域网 IP** 即可。以下是详细的实施步骤:### 第一步:确保 vLLM 以正确的网络模式启动默认情况下,如果你直接运行 `python -m vllm.entrypoints.openai.api_server`,它通常只监听 `localhost` (127.0.0.1)。这意味着只有部署模型的这台机器自己能访问,局域网内的其他机器无法连接。**关键操作:** 你必须指定 `--host 0.0.0.0`。**推荐的启动命令示例:**python -m vllm.entrypoints.openai.api_server \    --model /path/to/your/gemma-4-26B-A4B-it \    --host 0.0.0.0 \    --port 80

/v1/messages: Anthropic的API方式

curl -s http://${VLLM_API_BASE_URL}/v1/messages   -H "Content-Type: application/json"   -d '{    "model": "gemma-4-26B-A4B-it",    "messages": [      {"role": "user", "content": "请详细介绍我已使用vllm(0.19.1版本,已支持Anthropic方式API)完成私有化部署gemma-4-26B-A4B-it模型后,怎么让局域网的机器以Anthropic 方式的API接入AI Agent?"}    ],    "max_tokens": 512,    "temperature": 0.6  }' | jq -r '.content[0].text'

返回结果

要让局域网内的其他机器通过 **Anthropic API 格式** 接入你已经部署好的 `gemma-4-26B-A4B-it` 模型,核心任务是解决**网络连通性**、**服务监听地址配置**以及**客户端请求适配**三个问题。由于 vLLM 的 Anthropic 适配层通常是内置在 API Server 中的,你只需要确保服务“对外开放”并“指向正确”即可。以下是详细的实施步骤:### 第一步:确保 vLLM 服务正确监听局域网 IP默认情况下,很多开发者启动 vLLM 时使用的是 `localhost` 或 `127.0.0.1`,这会导致服务只能被部署模型的这台机器自身访问。**修改启动命令:**你需要将 `--host` 参数设置为 `0.0.0.0`。这表示监听机器上所有的网络接口(包括局域网 IP)。假设你的启动命令原本是:python -m vllm.entrypoints.openai.api_server --model google/gemma-4-26B-A4B-it ...python -m vllm.entrypoints.openai.api_server \    --model google/gemma-4-26B-A4B-it \    --host 0.0.0.0 \    --port 8000 \    --trust-remote-code \    [其他参数...]*   **`--host 0.0.0.0`**: 关键步骤,允许外部 IP 访问。*   **`--port 8000`**: 确保你知道端口号。### 第二步:获取部署机器的局域网 IP 地址在部署模型的机器上,你需要知道它在局域网中的“身份证号”。*   **Linux/macOS**: 在终端输入 `ifconfig` 或 `ip addr`。寻找类似 `192.168.x.x` 或 `10.x.x.x` 的地址。*   **Windows**: 在 CMD 输入 `ipconfig`。寻找“无线局域网适配器”或“以太网适配器”下的 `IPv4 地址`。

OpenClaw

此前,我们大多数人使用AI的模式都是对话式AI:手机或者网页打开豆包或者DeepSeek的对话框窗口,接着输入自己的问题,然后等待AI的回答,再继续进行下一轮问答。而OpenClaw的出现,则打破了这一较为“传统”的AI工作模型,它不仅仅是和你聊天了,还真的能帮你操作电脑执行特定的任务了。

它有如下几大优点:

  • • 多平台适配:Mac、Windows、Linux。可以搭载本地模型,数据不出本机,隐私有保障。
  • • 多聊天软件接入:微信、飞书、Telegram等都能用。
  • • 系统权限自定义:文件读写、命令或脚本执行。可自定义是完全控制还是沙盒隔离权限。
  • • 自由扩展技能:可以用社区做好的,也可以自己写一个。甚至就让AI Agent帮你写一个。

安装OpenClaw

参考OpenClaw快速上手[1] https://openclaws.io/zh/,支持多种平台的多种方式安装。

门徒这里选择的是Linux平台,一行命令把 Node.js 和其他依赖一起安装好。

选择平台对应的一键安装命令

执行安装命令

curl -fsSL https://openclaw.ai/install.sh | bash
安装过程

等待安装完成,看到提示 "🦞 OpenClaw installed successfully (2026.5.12)!" ,OpenClaw已完成安装。

OpenClaw初始化

上面一行命令安装完OpenClaw后,默认会进入到"OpenClaw setup"初始化流程,我们这里只选必须项来进行初始化,后面再专门进行配置本地模型和接入微信入口。

安全免责声明
"Security disclaimer"(安全免责声明),我们要选择"Yes"(键盘的左右键可以切换选择项)后,按"Enter"回车键进入下一步。
Setup mode
"Setup mode"(初始化模式),我们这里先选择"QuickStart (recommended) ",敲入回车键,进入下一步。当然若看官您想要完全手动进行初始化,可以通过键盘的上下键来进行切换到"Manual setup",再敲入回车键。
Model/auth provider
"Model/auth provider"(模型/认证的提供商),我们这里也先选择"Skip for now",后续再进行专门配置,敲入回车键,进入下一步。
Default model
"Default model"(默认使用的模型),我们这里也先选择默认的"Keep current (default: openai/gpt-5.5)",后续再进行专门配置,敲入回车键,进入下一步。
Select channel
"Select channel"(聊天应用和渠道),我们这里也先选择"Skip for now",后续再进行专门配置,敲入回车键,进入下一步。
Search provider
"Search provider"(Web搜索的提供商),我们这里也先选择"Skip for now",后续需要再进行专门配置,敲入回车键,进入下一步。
Configure skills
"Configure skills now? (recommended)"(是否现在配置技能?),我们这里也先选择"No",后续需要再进行专门配置,敲入回车键,进入下一步。
Enable hooks

"Enable hooks?"(启用钩子功能?),我们这里也先选择 "Skip for now" ,后续需要再进行专门配置,此项是多选项,需要使用上下键来移动并使用空格键来选择该项,敲入回车键,进入下一步。

openclaw-gateway.service
可以看到OpenClaw已经把自己的gateway功能自安装为Linux下的"Systemd service"了,叫做"openclaw-gateway.service"
控制UI信息
同时,也看到了OpenClaw的控制UI的访问链接URL信息,包括传入的Token值。
hatch your agent
"How do you want to hatch your agent?" (你想如何孵化你的代理?),我们这里也先选择"Hatch later",暂不孵化,敲入回车键,进入下一步。
Setup Done
走到这里,我们已经看到OpenClaw的初始化流程走完了。

验证OpenClaw

看下OpenClaw的版本信息

openclaw --versionOpenClaw 2026.5.12 (f066dd2)

看下OpenClaw Gateway的Systemd service状态

$ systemctl --user status openclaw-gateway.service
openclaw-gateway运行中
通过浏览器访问控制UI,打开浏览器,
控制UI信息
  1. 1. 地址栏输入:http://127.0.0.1:18789/,进行访问,然后按照控制UI图中的tokens填入下方的"Gateway Token"输入框,再点击"Connect"进行访问
  2. 2. 或者直接在地址栏输入:http://127.0.0.1:18789/#token=使用你的Token替换,进行访问

接入我们的模型

可以查看OpenClaw相关的命令解释openclaw --help
使用该命令进行配置模型openclaw configure --section model
配置模型过程1
配置模型过程2
配置模型过程3
配置模型过程4
配置模型过程5

但配置完以后,Web UI对话问题总是失败

通过查看openclaw的日志openclaw logs --follow

一直提示下列错误信息

11:41:33+00:00 warn security {"subsystem":"security"} blocked URL fetch (url-fetch) targetOrigin=http://10.126.126.6:8000 reason=Blocked hostname or private/internal/special-use IP address11:41:33+00:00 warn provider-transport-fetch {"subsystem":"provider-transport-fetch"} [model-fetch] error provider=vllm api=openai-completions model=gemma-4-26B-A4B-it elapsedMs=4 name=SsrFBlockedError code=undefined causeName=undefined causeCode=undefined message=Blocked hostname or private/internal/special-use IP address

经研究,发现这是新版本OpenClaw强化了 SSRF(服务端请求伪造)防御策略后,为了保护系统安全而主动拦截了内网地址。

做如下改动,可解决该问题

diff -u ~/.openclaw/openclaw.json.orig ~/.openclaw/openclaw.json--- ~/.openclaw/openclaw.json.orig    2026-05-18 19:45:38.504436658 +0800+++ ~/.openclaw/openclaw.json 2026-05-18 19:46:16.503405658 +0800@@ -61,6 +61,9 @@         "baseUrl": "http://10.126.126.6:8000/v1",         "api": "openai-completions",         "apiKey": "VLLM_API_KEY",+       "request": {+          "allowPrivateNetwork": true+        },         "models": [           {             "id": "gemma-4-26B-A4B-it",根据上述改动,对~/.openclaw/openclaw.json编辑,增加allowPrivateNetwork的参数vim ~/.openclaw/openclaw.json
可以正常对话

若是还需要局域网IP访问OpenClaw的web UI,以及操作电脑文件等需要对~/.openclaw/openclaw.json文件做以下配置改动:

  "gateway": {    #【其他配置】    "bind": "lan", # 原本是"bind": "loopback", 设置为"lan",运行通过局域网访问Web UI    #【其他配置】    "controlUi": {      #【其他配置】      # 添加allowedOrigins和dangerouslyDisableDeviceAuth项      "allowedOrigins": [        "http://localhost:18789",        "http://127.0.0.1:18789",        "http://10.126.126.101:18789" # 使用你局域网的IP地址替换      ],      "dangerouslyDisableDeviceAuth": true, # 可以绕过 OpenClaw Gateway 默认设备身份验证机制    }  }  # 原为  # "tools": {  #  "profile": "coding"  # },  # 改为,支持完成权限,以便支持文件操作等  "tools": {    "profile": "full",    "sessions": {      "visibility": "all"    }  },
编写代码并保存
cat ~/hello.py计算 1 到 100 的累加和total_sum = sum(range(1, 101))if __name__ == "__main__":    print(f"1 到 100 的累加和是: {total_sum}")

到此,我们的OpenClaw已经成功接入到私有化部署的gemma-4-26B-A4B-it并帮我们执行一些代码生成任务啦! 😀

配置一下微信入口

openclaw configure --section channels
微信入口配置过程1
微信入口配置过程2
微信入口配置过程3

确认微信插件已开启

openclaw channels list --all | grep weixin- openclaw-weixin default: installed, configured, enabled

进行微信登录

openclaw channels login --channel openclaw-weixin

命令会显示二维码,使用手机微信扫描一下二维码即可。

微信入口成功操作

现在也成功打通微信入口了! 😀

非常感谢各位看官,耐心陪着门徒一起学习到这。

引用链接

[1] OpenClaw快速上手: https://openclaws.io/zh/