OpenClaw部署实战:从安装到本地模型与Skill开发
最近社区里很多人在讨论 OpenClaw,说它"回归在即"。如果你关注 AI Agent 方向,大概已经注意到这个项目最近在开发者圈子里热度上升得很快。从搜索趋势看,大家关心的不是"它是什么",而是"怎么装""怎么接入微信""怎么写 Skill""怎么用本地模型"这类非常具体的问题。换句话说,社区已经过了"围观"阶段,进入了"上手试用"阶段。
这篇文章不打算复述官方文档,而是围绕 OpenClaw 的安装部署、核心概念、本地模型接入、Skill 开发和常见坑,讲清楚一条能落地的实践路径。如果你正准备在 Windows 或 Linux 上部署 OpenClaw,或者想把它接进飞书、钉钉这类 IM 工具,这篇文章值得先收藏再往下看。
先说一个明确判断:OpenClaw 这类伴生式 Agent 项目的核心价值,不是提供一个聊天机器人,而是把"模型调用、工具执行、消息收发"串成一个可编程的自动化工作流。理解这条主线,后面所有配置和二次开发都会顺理成章。
1. OpenClaw 回归在即:为什么社区关注度这么高
先说背景。OpenClaw 并不是突然冒出来的项目。从社区讨论来看,它经历过一段沉寂,现在被重新提及,很多老用户开始回归,新用户也在大量涌入。从热词里可以看到"腾讯 openclaw 官网""openclaw 怎么快速进化""openclaw 如何编写 skill 接入 api"这类搜索,这明显是一个从"知道名字"到"想实际使用"的转变阶段。
为什么这类项目会引发关注?核心原因在于,它把 Agent 从"玩具"变成了"能干活的工具"。
过去我们见到的很多 AI 应用,本质上是一个聊天框,你说一句它回一句。但 OpenClaw 的设计思路不一样:它可以常驻运行,可以接入 IM 工具,可以通过 Skill 机制执行外部 API,可以切换不同模型后端。这意味着你可以在不写复杂代码的情况下,搭出一个能自动处理消息、调用工具、返回结果的"数字助手"。
对于开发者来说,这类项目的价值在于:
- 门槛低:不需要从零搭建 Agent 框架,安装配置后就能跑。
- 可扩展:Skill 机制允许自定义工具,本质上是在模型和外部系统之间搭桥。
- 模型无关:可以接入云端模型,也可以接入本地模型,灵活度较高。
- 贴近真实场景:接入飞书、钉钉、微信这类 IM 之后,Agent 的价值不再停留在命令行演示,而是融入了日常协作流程。
当然,热度高也意味着一个问题:很多资料是碎片化的,照着网上的教程操作,容易遇到版本不一致、配置失效的问题。接下来我会把从安装到二次开发的路径拆开讲。
2. 核心概念:Agent、伴生模式与 Skill 机制
在进入安装步骤之前,先把几个关键概念讲清楚。否则你看到配置文件和目录结构时,很容易一头雾水。
2.1 OpenClaw 是什么
从架构上看,OpenClaw 是一个基于 Node.js 的伴生式 AI Agent 项目。所谓"伴生",可以通俗地理解成:它不是你在网页里打开的一个对话框,而是一个常驻在系统里、可以被多种渠道触发的"智能体进程"。
比较关键的一点是,OpenClaw 的运行对 Node.js 版本有明确要求。社区反馈和环境检查里常见到这样一段约束:
node.js >=22.22.3 <23, >=24.15.0 <25, or >=25.9.0 is required这意思是,版本不能太低,也不能用某些不兼容的中间版本。安装前先确认 Node.js 版本,是避免后续一系列问题的第一步。
2.2 伴生与聊天机器人的区别
很多人第一次接触 OpenClaw 时,会拿它和微信机器人、钉钉机器人做对比。这里有一个关键区别:
- 传统 IM 机器人:通常是一个 HTTP 回调服务,接收消息、调用模型、返回结果。它和业务系统是松耦合的。
- 伴生 Agent:常驻本地或服务器,通过适配器连接不同 IM,同时还能调用 Skill、操作文件、运行命令。它不是"被动响应",而是"主动工作"。
这也是为什么社区里会有人讨论"openclaw companion 本地模型"——伴生模式配合本地模型,意味着数据不需要完全依赖云端 API,对隐私敏感场景很有吸引力。
2.3 Skill 机制
Skill 是 OpenClaw 里非常核心的概念。你可以把它理解成"给 Agent 预定义好的能力模块"。
举个例子。如果你希望 Agent 能查询天气,传统做法是你在代码里写一个查询函数,再想办法让模型在合适的时机调用它。而在 OpenClaw 里,你可以编写一个 Skill,定义好这个能力的名称、描述、参数和 API 调用逻辑。之后模型在对话中发现用户想查天气时,会自动触发这个 Skill。
社区里"openclaw 如何编写 skill 接入 api"这个问题热度很高,说明很多人已经意识到,Skill 才是让 Agent 真正"干活"的关键。后面的章节我会给出一个具体示例。
2.4 TUI 与 WebUI
从社区反馈来看,OpenClaw 同时提供 TUI(终端界面)和 WebUI(网页界面)。"openclaw tui 切换 webui"是一类高频问题。简单说,TUI 适合在服务器终端里快速操作,而 WebUI 提供了更友好的可视化配置和管理界面。两者可以同时存在,也可以在启动时指定模式。
3. 环境准备与前置条件
部署 OpenClaw 之前,先检查环境。结合社区高频问题和官方要求,我把建议的环境分平台列出来。
3.1 Windows 环境
Windows 安装 OpenClaw 的讨论很多,但坑也不少。尤其是在窗口环境下,经常会遇到"OneClaw node runtime not found""failed to remove ~.openclaw: error: EBUSY"这类问题。
建议环境:
- Windows 10/11 64 位
- Node.js 版本满足
>=22.22.3 <23, >=24.15.0 <25, or >=25.9.0 - 推荐使用 PowerShell 或 Windows Terminal 执行命令
- 如果遇到文件占用问题,先关闭所有可能占用
.openclaw目录的进程
Windows 下的典型坑:文件被占用(EBUSY)、路径风格不一致、Node.js 版本不匹配。建议安装完 Node.js 后先执行一次node -v确认版本。
3.2 Linux 环境
Linux 环境相对干净。社区里提到了麒麟桌面系统安装、Kali Linux 安装、飞牛(fnOS)安装等场景。不同发行版的区别主要体现在系统包管理器上,OpenClaw 本身的安装步骤差别不大。
建议环境:
- Ubuntu 22.04 / Debian 12 或同等发行版
- Node.js 版本同上
- 如果使用 Docker 部署,准备好 Docker Engine 和 docker-compose
3.3 macOS 环境
社区有"mac mini 使用 docker 本地部署 openclaw"的讨论。macOS 用户建议使用 Docker Desktop 来避免 Node.js 版本管理的麻烦。
3.4 Node.js 版本问题
这是最容易被忽视、又最容易导致启动失败的原因。
社区里出现了一条非常具体的报错:
openclaw: node.js >=22.22.3 <23, >=24.15.0 <25, or >=25.9.0 is required (current: ...)解决方式很简单:到 Node.js 官网下载对应长期支持版本,或者使用 nvm(Node Version Manager)切换版本。
# 使用 nvm 安装并切换到兼容版本 nvm install 22.22.3 nvm use 22.22.3 node -v如果没有安装 nvm,Windows 用户可以下载官方 MSI 安装包直接覆盖安装;Linux 和 macOS 用户可以优先使用 nvm。
4. OpenClaw 部署流程:从命令行到 Docker
这一节是整个文章的核心操作部分。我把部署路径分成三种:命令行安装、Docker 部署、源码方式。你可以根据自己的场景选择。
4.1 方式一:命令行安装(最常用)
社区里反复出现"openclaw 安装教程""openclaw 如何下载部署"这类问题,说明命令行安装是主流的入门方式。
在满足 Node.js 版本要求的前提下,可以直接使用包管理器安装:
npm install -g openclaw安装完成后,执行初始化:
openclaw init初始化过程会生成一个配置目录,通常位于用户目录下的.openclaw文件夹。这一步会创建默认配置文件、Skill 目录和数据目录。如果初始化之后出现openclaw control ui did not start,先不要慌,这通常是端口被占用或 WebUI 组件未启动成功,可以单独排查。
初始化完成后,启动 OpenClaw:
openclaw start或者,如果需要直接进入网页控制台,可以尝试启动 WebUI 模式:
openclaw web在社区反馈中,control ui did not start是一个高频问题。常见原因包括:
- 端口被其他进程占用
- Node.js 版本不满足要求
- 依赖包未安装完整
排查顺序建议:先看终端日志里的具体报错,再检查端口占用,最后确认 Node.js 版本。
4.2 方式二:Docker 部署
Docker 部署的好处是环境隔离、不用担心 Node.js 版本问题。社区中 "mac mini 使用 docker 本地部署 openclaw" 说明这种方式在 macOS 上比较受欢迎。
一个典型的 docker-compose 配置可以这样写:
version: "3" services: openclaw: image: openclaw:latest container_name: openclaw restart: unless-stopped ports: - "3000:3000" volumes: - openclaw-data:/root/.openclaw environment: - TZ=Asia/Shanghai volumes: openclaw-data:需要说明的是,镜像名和 tag 请以实际发布的镜像为准。上面的示例只是一个通用结构,重点是挂载数据目录和映射 WebUI 端口。使用 Docker 部署的最大好处是,后面升级、回滚都更容易。
启动命令:
docker-compose up -d查看日志:
docker-compose logs -f openclaw4.3 方式三:源码方式
如果你需要二次开发,比如给 OpenClaw 增加自定义适配器、修改核心逻辑,源码方式是更合适的选择。社区里 "openclaw 二次开发""openclaw 如何编写 skill 接入 api" 这类问题,通常都基于源码方式。
git clone <openclaw仓库地址> cd openclaw npm install npm run build npm start源码方式对 Node.js 版本的要求更严格。如果开发依赖中包含原生模块,还需要确保系统有编译工具链。Windows 下建议安装 Visual Studio Build Tools,Linux 下需要build-essential。
4.4 初始化目录结构
无论是哪种方式安装,初始化之后你都会得到一个.openclaw目录。这个目录的结构大致如下:
~/.openclaw/ ├── config.json ├── skills/ ├── agents/ ├── data/ └── logs/其中:
config.json:核心配置文件,包含模型接入、Agent 名称、端口等。skills/:放置自定义 Skill 的目录。agents/:存放 Agent 定义或状态。logs/:运行日志,排查问题优先看这里。
5. 接入本地模型:从云端到本地的关键配置
社区中 "openclaw companion 本地模型""接入本地模型""openclaw 配置 nvidia nim" 都是高频问题。这说明很多用户并不满足于调用云端 API,而是希望把 OpenClaw 接入本地模型,实现数据私有化、低延迟、免 API 费用。
5.1 为什么接入本地模型
理由通常有三个:
- 数据安全:敏感数据不出内网。
- 成本控制:长期高频调用时,本地推理成本更低。
- 稳定性:不依赖外部 API 的可用性和限流策略。
但接入本地模型的代价是:需要一台性能足够的机器,并且要自己处理模型的加载和推理环境。
5.2 通用接入思路
OpenClaw 的模型接入逻辑通常集中在config.json中。你需要关注几个关键项:
baseURL:指向模型推理服务的地址。apiKey:本地服务一般不需要真实密钥,但字段可能需要保留。model:模型名称。type:表示 API 兼容类型,如果是 OpenAI 兼容协议则填openai。
一个典型的 OpenAI 兼容本地服务配置片段:
{ "agent": { "defaultModel": "local-model" }, "models": [ { "name": "local-model", "type": "openai", "baseURL": "http://localhost:8000/v1", "apiKey": "not-needed", "model": "qwen2.5-14b-instruct" } ] }这里以 vLLM 或 Ollama 这类提供 OpenAI 兼容接口的服务为例。模型名和端口请以你实际部署的服务为准。
5.3 使用 Ollama 作为本地推理后端
Ollama 是目前最简单易用的本地模型运行方式之一。假设你已经在机器上装好 Ollama,并拉取了模型:
ollama pull qwen2.5 ollama serve此时 Ollama 默认监听11434端口,并提供了一个 OpenAI 兼容的接口路径/v1。在 OpenClaw 中,可以把baseURL配置为:
{ "baseURL": "http://localhost:11434/v1", "apiKey": "ollama", "model": "qwen2.5" }配置完成后,重启 OpenClaw,在对话中就能走本地模型推理了。如果模型没有生效,先确认 Ollama 服务是否启动、端口是否可达。
5.4 接入 NVIDIA NIM
社区也提到了 "openclaw 配置 nvidia nim"。NVIDIA NIM 是 NVIDIA 提供的一套推理微服务,同样支持 OpenAI 兼容协议。接入方式和本地通用接口类似,只是baseURL指向 NIM 服务地址。需要注意 NIM 服务通常会要求额外的认证信息,具体请以 NIM 部署方式为准。
5.5 切换模型
"我 openclaw 的切换模型"是一个常见的操作困惑。切换模型有两种层次:
- 在对话中临时切换:通过指令指定使用哪个模型。
- 在配置中修改默认模型:修改
config.json中defaultModel字段,重启生效。
更稳妥的做法是在配置文件中维护多个模型条目,把常用模型都列好,需要切换时修改默认值或通过指令切换。
6. Skill 开发实战:让 OpenClaw 调用外部 API
如果你希望 OpenClaw 能真正干活,而不是只会聊天,Skill 开发是绕不开的一步。社区中 "openclaw 如何编写 skill 接入 api" 正是这个需求。
6.1 Skill 是什么
简单说,Skill 就是一份给 Agent 看的行为说明书 + 可执行代码。当模型发现当前对话需要某个能力时,会查找匹配的 Skill,加载它定义的参数,调用对应的 API,然后把结果返回给用户。
这种模式和 Function Calling 大同小异,只是 OpenClaw 把 Skill 变成了文件系统里的一个个目录,更易维护。
6.2 一个完整的 Skill 示例
假设我们要做一个查询 GitHub 用户信息的 Skill。
在~/.openclaw/skills/下新建一个目录:
~/.openclaw/skills/github-user/ ├── SKILL.md └── script.jsSKILL.md文件用来描述这个 Skill 的名称、用途和参数:
--- name: github_user description: 查询 GitHub 用户公开信息 arguments: username: type: string description: GitHub 用户名 required: true --- 当用户想要查询某个 GitHub 用户的信息时,使用这个 Skill。script.js文件编写实际的 API 调用逻辑:
// 文件路径:~/.openclaw/skills/github-user/script.js const https = require("https"); module.exports = async function (args) { const username = args.username; return new Promise((resolve, reject) => { https .get(`https://api.github.com/users/${username}`, { headers: { "User-Agent": "OpenClaw" }, }) .on("response", (res) => { let data = ""; res.on("data", (chunk) => (data += chunk)); res.on("end", () => { try { const json = JSON.parse(data); resolve({ login: json.login, name: json.name, public_repos: json.public_repos, followers: json.followers, }); } catch (e) { reject(e); } }); }) .on("error", reject); }); };这段代码的逻辑是:接收 Skill 参数username,请求 GitHub API,并把用户的关键信息返回给 Agent。实际项目中,你完全可以用fetch或axios替代原生模块。
6.3 验证 Skill 是否生效
Skill 编写完成后,重启 OpenClaw,然后在对话中问一句:
查询一下 GitHub 用户 openclaw 的信息如果 Skill 被正确触发,你应该会看到返回的用户名、仓库数等信息。如果 Agent 没有调用 Skill,可能原因有:
- Skill 目录结构不对,OpenClaw 没扫描到。
SKILL.md里的描述不够清晰,模型判断不了何时调用。- 重启 OpenClaw 时没有重新加载 Skill。
6.4 Skill 开发的核心原则
从社区经验和实践来看,开发 Skill 时有几条原则很重要:
第一,描述比代码更关键。模型通过描述来判断"什么时候用这个能力",描述写得模糊,代码写得再好也触发不了。
第二,返回结构化数据。Skill 的返回值尽量用 JSON 对象,方便模型后续组织和回答。
第三,做好错误处理。API 超时、参数错误、限流都要在 Skill 内处理,不要让异常直接抛给 Agent。
第四,最小权限原则。Skill 代码里不要写死生产环境的密钥,优先从环境变量或配置文件读取。
7. 常见问题与排查思路
这一节汇总社区里高频出现的报错和问题。如果你在部署或使用中踩坑,可以先对着表格排查。
7.1 高频问题汇总
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
Node.js >=22.22.3 <23, >=24.15.0 <25, or >=25.9.0 is required | Node.js 版本不兼容 | 执行node -v检查版本 | 使用 nvm 切换或重新安装兼容版本 |
failed to remove ~\.openclaw: error: EBUSY | 文件被进程占用 | 查看是否有 openclaw 进程还在运行 | 结束相关进程后重试 |
openclaw control ui did not start | WebUI 端口被占用或组件未启动 | 查看日志、检查端口监听 | 释放端口或手动启动 WebUI |
OneClaw node runtime not found | 找不到配套的 Node.js 运行时 | 确认 PATH 环境变量包含 Node.js | 重新安装 Node.js 并确认版本 |
The agent run failed before producing a reply. | Agent 执行链启动失败 | 查看日志中具体的异常堆栈 | 根据堆栈定位模型配置或 Skill 代码 |
| 接入微信/飞书/钉钉失败 | 平台回调地址、Token、应用权限配置错误 | 检查 IM 平台后台配置与本地日志 | 对比官方协议,逐一核对配置项 |
| 读取不了文档 | 文件权限、格式、编码问题 | 确认文件路径和格式是否被支持 | 转换格式或调整文件路径 |
7.2 排查思路:先看日志
不管遇到什么问题,第一步永远是看日志。OpenClaw 的日志通常在.openclaw/logs/目录下。如果是 Docker 部署,直接执行:
docker-compose logs -f openclaw日志会告诉你绝大多数问题的根因:模型调用失败、Skill 解析失败、端口绑定失败、网络连接超时等。
7.3 网络与代理问题
如果你的网络环境比较复杂,模型调用可能因为网络超时失败。此时重点检查baseURL的连通性,以及模型服务所在机器的防火墙、DNS 设置。
注意:不同网络环境下的超时问题,不一定都是 OpenClaw 导致的。可以先单独用curl测试模型接口,例如:
curl http://localhost:11434/v1/models如果这个请求都不通,问题出在模型服务侧,而不是 OpenClaw 侧。
8. 最佳实践与工程建议
8.1 配置管理
OpenClaw 的配置集中在config.json,但不要在生产环境直接手动改。更推荐的做法是:
- 将配置文件纳入版本管理,但忽略包含密钥的字段。
- 使用环境变量覆盖敏感配置,比如模型 API Key。
- 每次修改配置前先备份:
cp ~/.openclaw/config.json ~/.openclaw/config.json.bak8.2 版本管理
OpenClaw 更新节奏较快,新版本可能引入配置格式变化或破坏性更新。升级流程建议:
- 查看 release notes,确认是否有 breaking changes。
- 备份配置文件和 Skill 目录。
- 更新包或镜像。
- 启动后检查日志和核心功能。
如果升级后出现问题,至少能快速回滚。
8.3 二次开发与扩展
如果你不只是使用,还要做二次开发,需要理解 OpenClaw 的模块边界。从社区讨论看,值得深入的方向包括:
- 自定义 Skill:扩展 Agent 的工具集。
- 自定义适配器:接入更多 IM 平台或其他消息渠道。
- 模型路由:根据任务类型自动选择不同模型。
- 数据持久化:扩展 Agent 的记忆和状态存储。
8.4 安全边界
OpenClaw 的能力越强,安全边界越要清晰。以下几点必须重视:
第一,不要给 Agent 开放无限制的文件系统访问权限。Skill 应该只访问必要路径。
第二,API Key 不要写在 Skill 代码里。优先使用环境变量或密钥管理工具。
第三,如果接入了 IM 平台,注意消息内容的敏感信息泄露风险。
第四,生产环境尽量使用 Docker 独立容器,避免 Agent 进程拥有宿主机过大的权限。
8.5 接入 IM 平台的建议
社区里最火的场景是接入微信、飞书、钉钉。这里给几条通用建议:
首先,先确认目标平台的开放能力。不同平台对机器人消息类型、回调格式、权限范围的要求差异很大。
其次,不要一上来就接微信。先用 WebUI 或 TUI 跑通核心流程,确认 Agent 本身没问题,再接入 IM,这样可以减少排错变量。
再次,接入 IM 之后,建议添加关键字过滤和频率控制,避免 Agent 在群里被刷屏触发。
最后,IM 平台回调地址如果涉及公网,注意配置安全的 Token 校验和 IP 白名单。
9. 总结与后续学习方向
OpenClaw 最近在社区的关注度上升,本质上反映出开发者对 Agent 工具的态度正在变化:大家不再满足于"看演示",而是希望真正部署起来、接入自己的工具链、跑通自己的业务场景。
这篇文章从 OpenClaw 的核心概念讲起,依次覆盖了环境准备、命令行与 Docker 部署、本地模型接入、Skill 开发、常见问题排查和工程建议。如果你照着走完一遍,应该能完成一个最小可用的 OpenClaw 部署,并让它在本地模型或云端模型上跑起来。
接下来的学习路径,建议按这个顺序推进:
- 先把核心对话流程跑通,确认模型配置稳定。
- 接着写一个真正有业务价值的 Skill,而不只是 hello world。
- 再考虑接入 IM 平台,把 Agent 放到日常协作环境里。
- 最后探索二次开发方向,比如模型路由、状态持久化和自定义适配器。
需要提醒的是,OpenClaw 这类项目迭代速度较快,网上教程很容易过时。遇到问题先看官方文档和日志,再搜索社区方案,最后动手改配置,这是最稳妥的排错顺序。
如果你在部署过程中遇到文章里没有覆盖到的问题,欢迎在评论区带上日志和版本信息提问。社区里多一份真实的踩坑记录,后来者就能少走一段弯路。
