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 1$ sudo 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"初始化流程,我们这里只选必须项来进行初始化,后面再专门进行配置本地模型和接入微信入口。








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




验证OpenClaw
看下OpenClaw的版本信息
$ openclaw --versionOpenClaw 2026.5.12 (f066dd2)看下OpenClaw Gateway的Systemd service状态
$ systemctl --user status openclaw-gateway.service

1. 地址栏输入:http://127.0.0.1:18789/,进行访问,然后按照控制UI图中的tokens填入下方的"Gateway Token"输入框,再点击"Connect"进行访问 2. 或者直接在地址栏输入:http://127.0.0.1:18789/#token=使用你的Token替换,进行访问
接入我们的模型
# 可以查看OpenClaw相关的命令解释$ openclaw --help# 使用该命令进行配置模型$ openclaw configure --section model




但配置完以后,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


确认微信插件已开启
$ openclaw channels list --all | grep weixin- openclaw-weixin default: installed, configured, enabled进行微信登录
$ openclaw channels login --channel openclaw-weixin命令会显示二维码,使用手机微信扫描一下二维码即可。

现在也成功打通微信入口了! 😀
非常感谢各位看官,耐心陪着门徒一起学习到这。
引用链接
[1] OpenClaw快速上手: https://openclaws.io/zh/
夜雨聆风