手把手教程:在 Windows 11 + WSL2 上源码部署 OpenClaw + 支持工具调用的本地模型
在中(如果没有则创建),添加tools字段:json"tools": ["description": "获取指定城市的实时天气","city": { "type": "string", "description": "城市名称" }},
大家好,我是 钰珠AIOT,一个正在捣鼓桌面机器人的创客。经过一周的踩坑和摸索,我终于在自的电脑上成功跑通了 OpenClaw,下面我把整个过程整理出来,希望对有类似需求的朋友有所帮助。
🖥️ 我的电脑配置
-
CPU:Intel i9-12900K(12核24线程)
-
GPU:NVIDIA RTX 3090(24GB 显存)
-
内存:64GB DDR5
-
系统:Windows 11 专业版 23H2
-
WSL2:Ubuntu 22.04 LTS
🎯 目标
-
在 WSL2 Ubuntu 中通过源码安装 OpenClaw。
-
在 Windows 11 中运行 Ollama 服务,并拉取支持工具调用(function calling)的模型(如 Qwen2.5-Coder)。
-
让 OpenClaw 能调用 Windows 上的本地模型,并正确使用工具。
📦 准备工作
1. Windows 端
-
安装最新版 NVIDIA 驱动(确保 WSL2 支持 GPU 直通)。
-
安装 Ollama(从 ollama.com 下载安装包)。
-
开启 WSL2 功能(已安装的用户跳过)。
2. WSL2 端
-
确保 Ubuntu 22.04 已安装并更新:
sudo apt update && sudo apt upgrade -ysudo apt install curl git build-essential -y
🔧 详细步骤
1️⃣ 配置 WSL2 镜像网络模式(关键)
为了让 WSL2 能通过 localhost 直接访问 Windows 服务,需要启用镜像网络。
在 Windows 的用户目录(C:\Users\你的用户名)下创建或编辑 .wslconfig 文件,内容如下:
networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true
然后重启 WSL:
powershell
wsl --shutdown
重新打开 WSL 终端,测试网络连通性:
bash
curl http://localhost:11434
如果返回 Ollama is running,说明配置成功。
2️⃣ 在 Windows 上拉取支持工具调用的模型
在 Windows 的命令提示符或 PowerShell 中运行:
ollama pull qwen2.5-coder:14b-instruct-q4_K_M
(你也可以选 7B 或 32B 版本,根据显存大小决定)
验证模型已下载:
ollama list
3️⃣ 在 WSL2 中安装 Node.js 和 pnpm
OpenClaw 需要 Node.js 22+,这里用 nvm 安装(方便切换版本):
bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash source ~/.bashrc nvm install 22 nvm use 22
安装 pnpm(使用 corepack):
bash
enable corepack prepare pnpm@latest --activate
验证:
bash
node -v # 应显示 v22.x pnpm -v # 应显示 9.x 或更高
4️⃣ 源码安装 OpenClaw
创建并进入开发目录:
bash
mkdir -p ~/develop && cd ~/develop git clone https://github.com/openclaw/openclaw.git cd openclaw
安装依赖并构建:
bash
pnpm install pnpm ui:build # 构建前端资源 pnpm build # 构建整个项目
(如果 pnpm install 遇到 A2UI 相关错误,可尝试 pnpm approve-builds 后重试)
5️⃣ 配置 OpenClaw 连接 Windows 上的 Ollama
运行配置向导:
bash
pnpm openclaw onboard --install-daemon
关键选项说明:
-
Onboarding mode →
Manual -
What to set up →
Local gateway (this machine) -
Workspace directory → 默认(回车)
-
Model/auth provider → 选择
Custom Provider -
API Base URL → 输入
http://localhost:11434/v1(如果镜像网络生效)或http://<你的Windows IP>:11434/v1 -
API Key → 随便填,比如
ollama(本地不校验) -
Endpoint compatibility →
OpenAI-compatible -
Model ID → 输入你刚拉取的模型名,例如
qwen2.5-coder:14b-instruct-q4_K_M -
Endpoint ID → 默认生成的 ID 即可(如
custom-127-0-0-1-11434) -
Model alias → 可选,如
local -
Gateway bind →
Loopback (127.0.0.1) -
Gateway auth →
Token(直接回车让系统生成) -
Tailscale exposure →
Off -
Gateway service runtime →
Node (recommended)
向导完成后,OpenClaw 会自动保存配置并启动服务。
6️⃣ 启用工具调用能力
OpenClaw 默认不会自动给模型传递工具定义,需要手动开启。编辑 ~/.openclaw/openclaw.json,在 agents.defaults 中添加:
json
"capabilities": ["tool_use"]
然后重启网关:
bash
pnpm openclaw gateway restart
7️⃣ 添加一个简单工具(以查天气为例)
为了让模型能调用外部 API,我们需要定义一个工具并实现它的逻辑。
定义工具
在 ~/.openclaw/agents/main/agent/agent.json 中(如果没有则创建),添加 tools 字段:
json
{
"tools": [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "获取指定城市的实时天气",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string", "description": "城市名称" }
},
"required": ["city"]
}
}
}
]
}
实现工具(使用 OpenClaw 的内置 HTTP 技能)
OpenClaw 支持通过技能(skills)扩展功能。我们利用内置的 HTTP 技能直接调用免费天气 API(无需密钥)。
在 ~/.openclaw/skills/ 下创建 get_current_weather 目录,并在其中创建 skill.yaml:
yaml
name: get_current_weather
description: 获取指定城市的实时天气
type: http
url: "https://api.open-meteo.com/v1/forecast?latitude={{ .city_lat }}&longitude={{ .city_lon }}¤t_weather=true"
method: GET
response_template: "{{ .city }} 当前天气:温度 {{ .current_weather.temperature }}°C,风速 {{ .current_weather.windspeed }} km/h"
注意:这里需要将城市名转换为经纬度,为简化演示,我们可以先写死一个城市(如北京)的经纬度,或者用另一个技能先转换。更复杂的实现可参考 OpenClaw 文档。
为了快速测试,我们先用一个简单的返回固定格式的技能(稍后改进)。
8️⃣ 测试
重启网关后,运行 TUI:
pnpm openclaw tui
在对话框中输入:“北京的天气怎么样?” 如果一切正常,模型应该会返回工具调用请求,然后 OpenClaw 执行技能,最后模型根据结果生成自然语言回答。
如果模型直接回答“我不知道”或报错,请查看日志:
pnpm openclaw logs --follow
🚧 遇到的坑及解决方案
坑1:WSL2 无法访问 Windows 上的 Ollama
-
现象:
curl http://localhost:11434超时或连接拒绝。 -
原因:WSL2 默认 NAT 模式下,localhost 指向 WSL2 自身,而非 Windows。
-
解决:启用 WSL2 镜像网络模式(见步骤1),或使用 Windows 的真实 IP(
ip route获取)替代 localhost。
坑2:OpenClaw 报错 does not support tools
-
现象:在 TUI 中输入任何话,模型都返回 400 错误,提示模型不支持工具。
-
原因:使用的模型(如
deepseek-r1:8b)官方版本未启用工具调用模板。 -
解决:换用明确支持 tool 调用的模型,如
qwen2.5-coder系列或社区优化的MFDoom/deepseek-r1-tool-calling。
坑3:手动编辑 auth-profiles.json 格式错误
-
现象:OpenClaw 报错“No API key found”或“ignored invalid auth profile entries”。
-
原因:手动创建的文件缺少
version和profiles顶层字段,或键格式错误。 -
解决:通过
openclaw agents add命令自动生成,而不是手动编辑。如果必须手动,格式应为:json
{ "version": 1, "profiles": { "openai:custom-127-0-0-1-11434": { "type": "api_key", "key": "你的key" } } }
坑4:源码安装后 openclaw 命令找不到
-
现象:直接输入
openclaw提示 command not found。 -
原因:源码安装的可执行文件在
node_modules/.bin中,未加入 PATH。 -
解决:始终使用
pnpm openclaw作为前缀运行命令,或临时添加export PATH="$PATH:$(pwd)/node_modules/.bin"。
坑5:TUI 中模型无响应或一直转圈
-
现象:输入后无返回,或长时间无响应。
-
原因:可能是网络不通、模型加载慢,或网关崩溃。
-
解决:先检查
pnpm openclaw logs看具体错误。常见问题:-
模型还在加载(首次运行慢),等一会儿。
-
Ollama 服务未运行,在 Windows 中重启 Ollama。
-
显存不足,换用更小的量化版模型。
-
🎉 最终效果
现在,你的 WSL2 Ubuntu 中运行着 OpenClaw,它通过 localhost 调用 Windows 上的 Ollama 服务,使用 Qwen2.5-Coder 模型,并且模型能够正确请求工具调用。你可以通过 TUI 与它对话,让它帮你查天气、写文件、执行命令等(取决于你实现的工具)。
下一步,你可以根据自己的桌面机器人项目,为 OpenClaw 添加更多自定义工具,比如控制电机、读取传感器等,让 AI 真正成为机器人的大脑。
📚 参考资料
-
OpenClaw 官方文档:https://docs.openclaw.ai
-
Ollama 官网:https://ollama.com
-
WSL2 网络配置:https://learn.microsoft.com/zh-cn/windows/wsl/networking
如果部署过程中遇到本文未覆盖的问题,欢迎在评论区留言,我们一起交流解决!
更多推荐



所有评论(0)