☰
RK3588 部署 OpenClaw 智能体:从环境准备到技能扩展的完整指南
2026/10/6 4:41:16 网站建设 项目流程

自从手头那块 RK3588 开发板吃灰三个月后,我决定给它找点正经事做:把 OpenClaw 这套开源智能体框架完整部署上去。

OpenClaw 这套东西,本质上是一个基于 Node.js 的智能体运行框架,你可以把它理解成一个“什么都能接”的 AI 助手底座——既能接大模型 API,也能装各种 skill 技能包,还能通过串口、GPIO 之类的方式和真实硬件打交道。问题在于,网上大多数 OpenClaw 部署教程都默认跑在 x86 服务器或者 Windows 上,真正针对 RK3588 这块 ARM 平台的完整记录少得可怜。这篇博文就把我从刷系统到跑通第一次对话的整个过程原原本本写下来,包括踩过的坑、改过的配置、验证过的方法。如果你手里正好有香橙派 5、Radxa Rock 5B、鲁班猫 5 这类 RK3588 板子,又想把智能体从云端搬到本地,这篇文章可以直接照着抄。

1. 项目整体设计与思路:为什么要把 OpenClaw 折腾到 RK3588 上

1.1 RK3588 平台的硬件底子

RK3588 是瑞芯微推出的高性能 ARM 平台,8 核架构(4 个 Cortex-A76 大核 + 4 个 Cortex-A55 小核),自带 6 TOPS 算力的 NPU,内存最高能做到 32GB。我手上这块板子是 16GB 版本,跑 OpenClaw 这种 Node.js 服务绰绰有余。

这块芯片的设计定位很明确:给边缘计算设备提供一个功耗可控但性能不拉胯的底座。板卡整体功耗在 5W 到 15W 之间浮动,比一台迷你主机省电得多,但性能又远超树莓派 5。接口方面才是真正让人心动的地方——双 2.5G 网口、PCIe、USB 3.0、MIPI CSI/DSI、CAN 总线,这些接口意味着一块 RK3588 板子可以同时接摄像头、显示屏、串口外设、传感器,真正变成一个“手里攥着一堆硬件”的边缘小电脑。

1.2 OpenClaw 在 ARM 平台上的实际意义

OpenClaw 不是一个普通的聊天机器人脚本,它是一个有完整生命周期管理的智能体框架。官方的定位是让你能快速构建一个属于自己的 AI 自动化助理:你给它配置好大模型的访问入口,它通过 skill 技能机制去调用外部工具、读写数据、操纵设备。

在 RK3588 上部署 OpenClaw,有一个云服务器完全替代不了的好处:智能体直接跑在设备现场,外设可以通过本地接口直接通信,不需要经过公网转发。比如你让智能体分析摄像头画面,摄像头就在 USB 口上插着,数据从板载 NPU 推理完成之后直接喂给 OpenClaw,整条链路都在本机完成,延迟低、可靠性高,也不会把视频数据送到外部去处理。对做机器人项目或者家庭自动化场景的人来说,这是刚需。

1.3 为什么不是 Windows、树莓派或云主机

我先在 Windows 上试过 OpenClaw。Windows 下能跑,但是 OneDrive 目录同步、杀毒软件扫描、系统更新重启,任何一个环节都可能让后台服务悄悄挂掉。更麻烦的是很多 skill 的依赖脚本默认走的是 Linux 命令路径,在 Windows 里要么装 WSL 要么 Git Bash 兜着,环境变量、权限模型一交叉就很容易出诡异问题。所以一心要常驻运行的话,纯 Windows 不是一个好选择。

树莓派 5 我也考虑过。纯跑 Node.js 服务它没问题,但只要稍微加载一点本地模型推理或者接上 USB 摄像头做实时处理,CPU 占用直接拉满。OpenClaw 本身对 CPU 要求不高,但智能体往往要挂载各种技能,这些技能背后的算法才是吃硬件的大户。RK3588 的 NPU 可以做视觉推理,A76 大核跑 Node 服务,两者配合才是合适的搭配。

云服务器则是另一个极端。云主机部署 OpenClaw 很方便,但公网延迟是硬伤,而且没有办法直接控制本地的串口、GPIO 或者是局域网内的摄像头。做一个跑在真实物理世界的智能体,云端方案天然断了一条腿。RK3588 上场就是补上这个短板:算力、接口、功耗、常驻稳定性,四样都占。

平台常驻稳定性外设直接操控本地视觉 NPU综合成本适用场景
Windows 主机一般,系统更新和杀毒是变数弱,需要额外适配层依赖 GPU,显卡贵高本地调试、开发阶段
树莓派 5强强无 NPU,纯 CPU 推理中轻量智能体、教学
x86 云服务器强无无中高纯远程服务、客服机器人
RK3588 开发板强强6 TOPS NPU 可用低机器人、边缘智能、家庭常驻

2. 部署前的环境准备:把坑提前扫干净

2.1 系统镜像选择与整卡初始化

RK3588 的官方支持主要围绕 Linux 展开,绝大多数板卡厂商都提供 Debian 或 Ubuntu 镜像。我强烈建议直接用 Ubuntu 22.04 的 server 版,别上来就装桌面环境。桌面版看着方便,但 GNOME 那些后台进程会吃掉不少内存,对一台要 7x24 小时跑智能体的板子来说没有必要。如果你确实需要用浏览器看界面,再装一个轻量桌面或者干脆用 VNC 远程访问,都比预装桌面版干净。

刷机这一步各家的工具不大一样,野火的鲁班猫有专门的烧录工具,香橙派和 Radxa 推荐用 rkdeveloptool 命令行烧写或者 balenaEtcher 直接写 SD 卡。我的建议是能用 SD 卡启动就不要折腾 eMMC,SD 卡刷坏了随时换,系统调试阶段最怕刷一次机器就得重新焊线。TF 卡选 A2 级别的,别省这个钱,垃圾卡在 RK3588 上读速跟不上,npm install 的时候会卡到你怀疑人生。

系统起来之后第一件事是扩展根分区。很多板卡厂商的预置镜像默认只用了卡的一部分空间,用df -h看一眼,如果根分区没有占满整个存储,先执行raspi-config的同类工具或者手动用 parted 扩容。这一步不做,后面克隆 OpenClaw 仓库没问题,但 npm 缓存放满之后你会看到ENOSPC错误满天飞。

2.2 Node.js 运行时安装的两种路径

OpenClaw 是基于 Node.js 的,对版本有要求,太老的 Node 跑不起来。RK3588 的 Ubuntu 源里默认的 nodejs 通常是 12 或者 14,远远不够用,所以不要用 apt 直接装。

推荐走 nvm,这是最不容易出错的路子。在板子上装 nvm 之后执行:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc nvm install 20 nvm alias default 20

这里有两个细节值得注意。第一,nvm 安装的 Node 默认只对当前用户生效,不要用 sudo 去装全局包,否则权限模型会乱套,之后 systemd 启动服务的时候容易踩 Permission denied。第二,装完 Node 之后确认一下架构:

node -p "process.arch"

输出应该是arm64。如果输出的是x64,说明你下载到了 x86 版本的二进制,那后面的很多原生模块都会装不上,趁早回头检查。

2.3 周边工具与权限规划

除了 Node.js,还有几个工具是 OpenClaw 里高频 skill 的隐性依赖。git 肯定要装,很多 skill 是从 GitHub 仓库拉下来执行的。ffmpeg 建议提前装好,涉及到音频转录、视频处理、摄像头推流的 skill 都会在底层调用它。build-essential 也装上,万一某个 npm 包需要从源码编译,你不想等到编译报错了再回头补 gcc。

权限方面的坑我已经帮你们踩过了。如果 OpenClaw 需要访问串口设备,比如 Arduino、雷达、舵机控制板,用户必须加入 dialout 组;如果要用 USB 摄像头,还要加入 video 组。在 Ubuntu 上这样操作:

sudo usermod -aG dialout,video $USER

加完组记得注销重新登录,不然不会生效。OpenClaw 的配置目录和数据目录,我建议统一放在/home/你的用户名/openclaw下面,不要放到 root 目录或者 /opt 下面。放在普通用户目录的好处是备份方便、权限问题少,而且 nvm 安装的 Node 能直接访问到这些路径。

3. OpenClaw 的核心配置与关键参数

3.1 初始化后的目录结构

OpenClaw 初始化之后会在指定目录下生成一套标准的目录结构。以我的实际部署为例,大致长这样:

openclaw/ ├── config.json ├── skills/ ├── vendor/ ├── data/ ├── logs/ └── .env

config.json 是整个框架的核心配置,里面定义了模型接入、路由规则、日志级别、服务端口等信息。skills 目录存放技能包,OpenClaw 会在启动时扫描这个目录加载能力。vendor 目录是给第三方集成留的,一些自定义的工具适配器可以放这里。data 目录存持久化数据,比如对话历史、记忆片段、技能运行产生的中间文件。logs 目录不用多说,排查问题全靠它。

搞清楚这个结构很重要,因为很多人部署完 OpenClaw 之后想在它上面挂新技能,却找不到技能放哪里;想备份数据,不知道哪些目录要打包。上面这张目录图记住了,后续操作都能对号入座。

3.2 大模型接入:远程 API 与本地模型两种姿势

OpenClaw 的模型接入层做得比较抽象,理论上兼容所有 OpenAI 风格的 API。这也是我推荐大家在 RK3588 上部署它的原因之一,因为你不需要绑定某一家云厂商,想接哪家模型就在配置里写哪家的 base_url。

先看远程 API 的配置方式。在 config.json 的 providers 区域里,填上接口地址和模型名:

{ "providers": [ { "id": "primary", "type": "openai-compatible", "baseUrl": "http://127.0.0.1:8000/v1", "apiKey": "sk-local-key", "model": "qwen2.5-14b-instruct" } ] }

这里baseUrl的末尾带不带/v1很多人搞错。大部分 OpenAI 兼容服务的路由是/v1/chat/completions,所以 baseUrl 就写http://ip:port/v1,配错了会出现 404 或者路由不对的报错。如果你用的是 Ollama,OpenAI 兼容端点默认跑在http://127.0.0.1:11434/v1。

本地模型是另一个思路。RK3588 跑 7B 级别的模型纯靠 CPU 推理不是不行,但速度确实感人,token 生成速度大概在每秒 3 到 6 个之间,做交互式对话勉强能忍,做大规模自动化任务会等到崩溃。我的建议是:常驻的调度和决策用远程大模型 API,本机 Ollama 跑一个小参数模型做私密数据处理或者离线兜底。两者通过 OpenClaw 的多 Provider 路由机制切换,平时不用的 Provider 不会占用链接资源。

3.3 skill 系统:把 OpenClaw 从“聊天框”变成“工具手”

skill 是 OpenClaw 的灵魂。没有 skill 的智能体就是一个聊天窗口,有了 skill,它才能去执行搜索、调用命令、操作文件、控制硬件。

一个标准的 skill 结构包括一个描述文件和一个实现脚本:

skills/ └── camera-capture/ ├── SKILL.md └── capture.py

SKILL.md 里写清楚这个技能是干什么用的、需要什么参数,OpenClaw 会基于这个描述让大模型自动判断该不该调用它。我自己写过一个简单的摄像头抓拍技能,SKILL.md 大概是这样的:

# Camera Capture ## Description 捕获 USB 摄像头的当前画面并保存为 JPEG 图片,返回图片路径。 ## Parameters - output_path: 保存图片的绝对路径 ## Supported APIs - capture(output_path)

实现脚本capture.py直接用 OpenCV 读摄像头,拍一帧存下来。OpenClaw 在对话中识别到用户需要拍照,就会自动匹配这个 skill,然后把 capture.py 跑起来。整个链路听起来很玄,但跑通一次之后你会觉得这东西比写死逻辑的自动化脚本灵活太多了。

这里有一个非常重要的提醒:skill 本质上是可以执行任意系统命令的。你给 OpenClaw 开放一个 shell skill,就等于给了它一台机器的“手脚”。如果你把它暴露到公网,那基本上等于把门钥匙挂在了门把手上。至少要做到三点:OpenClaw 服务不要用 root 用户跑,端口不要在路由器上随便映射出去,每次新增 skill 都仔细读一下它的实现代码。

3.4 外设通道:串口、GPIO 与视觉的接入思路

RK3588 作为边缘设备的优势在 OpenClaw 的外设接入上体现得淋漓尽致。OpenClaw 本身不直接操作硬件,但它的 skill 机制允许你用任意语言写脚本,这意味着串口、GPIO、I2C、摄像头都能通过 skill 脚本间接接入。

拿串口举例,一个连接 Arduino 的 skill 可以这样启动:

exec 3<>/dev/ttyUSB0 stty -F /dev/ttyUSB0 115200 echo "READ_TEMP" >&3 cat <&3

在 RK3588 上,这个串口设备就在你手边,不经过网络,数据延迟基本可以忽略。GPIO 也是同理,直接读写/sys/class/gpio下的文件即可控制电平输出。摄像头稍微复杂一点,可以用 OpenCV 或 GStreamer 拉流,再把结果传给 OpenClaw。这一步不要企图让 OpenClaw 自己看懂图像——图像理解应该交给云端大模型或者本地 NPU 推理,OpenClaw 只负责组装流程和传递结果。

4. 实操过程:从零部署的完整流水线

4.1 安装 OpenClaw 本体

OpenClaw 的安装方式我建议走 git clone 加本地链接,而不是 npm 全局安装。原因是 OpenClaw 更新节奏比较快,你无法确定 npm 上最新包的 tag 是不是稳定版,但 GitHub 仓库的 release 分支是可控的。

cd ~ git clone https://github.com/openclaw/openclaw.git cd openclaw npm install

npm install 这一步在 RK3588 上可能会比较慢,因为部分原生模块要从源码编译。不要慌,这是正常的。如果你用的是海外 CDN 拉不动,可以把 npm registry 切到国内镜像:

npm config set registry https://registry.npmmirror.com

装完之后执行npm link把 openclaw 命令挂到全局,这样在任何目录下都能直接敲openclaw命令,后续写 systemd 服务也方便。

4.2 初始化项目目录与配置文件

OpenClaw 本体装好之后,先建一个独立的项目目录来放你的配置和数据:

mkdir ~/openclaw-bot cd ~/openclaw-bot openclaw init

init 命令会生成一份默认配置和空的 skills 目录。这时候打开 config.json,把模型 Provider 的信息填进去。我当前配置里接了两个 Provider,一个指向远程云 API,一个指向本机 Ollama,设置了一个简单的路由规则:默认走远程,带@local前缀的请求走本地模型。

{ "provider": { "default": "primary", "routes": [ { "pattern": ".*", "provider": "primary" }, { "pattern": ".*@local.*", "provider": "ollama-local" } ] }, "skills": { "enabled": true, "autoLoad": true, "allowSystemCommands": false }, "server": { "port": 3000, "host": "127.0.0.1" }, "log": { "level": "info", "file": "logs/openclaw.log" } }

注意allowSystemCommands这一项我设置了 false。这个开关控制智能体能不能直接执行任意 shell 命令,默认是关闭的。除非你做的是个人实验项目并且明确知道风险,否则不建议打开。

4.3 验证模型连通性与首轮对话

配置写完之后,先别急着后台化,直接前台启动看日志:

openclaw start

看到控制台输出类似[INFO] Provider primary connected的日志,说明模型 API 连通性没问题。这时候在交互式会话里随便问一句“你好”,如果模型回复正常,说明整个链路已经通了。

再验证 skill 是否生效。往 skills 目录里放一个最简单的示例技能,比如一个返回当前时间的脚本,SKILL.md 描述清楚,然后让模型执行“现在几点了”。如果模型能主动调用 skill 并且返回正确结果,说明技能路由和执行沙箱都工作正常。这一步可能在第一次跑的时候模型会拒绝调用或者调用失败,原因多半是 SKILL.md 描述写得不够明确,把模型当成一个小白用户,描述里写清楚“你应该在用户询问时间时调用这个技能”,成功率会大幅提升。

4.4 注册为 systemd 服务,做到开机自启

交互式跑通之后,下一步一定是要把它转成后台守护进程。在 RK3588 上最稳的方式是 systemd。新建一个 service 文件:

[Unit] Description=OpenClaw Bot Service After=network-online.target [Service] Type=simple User=yourname WorkingDirectory=/home/yourname/openclaw-bot Environment=PATH=/home/yourname/.nvm/versions/node/v20.11.0/bin:/usr/local/bin:/usr/bin:/bin ExecStart=/home/yourname/.nvm/versions/node/v20.11.0/bin/openclaw start Restart=always RestartSec=5 [Install] WantedBy=multi-user.target

这里Environment=PATH很关键。因为我用的是 nvm 安装的 Node,默认 systemd 环境的 PATH 里没有 nvm 目录,直接执行openclaw会报 command not found。写配置的时候填入你实际的 Node 路径,可以用which openclaw查一下。

写完之后执行:

sudo systemctl daemon-reload sudo systemctl enable openclaw.service sudo systemctl start openclaw.service

然后systemctl status openclaw.service看一下运行状态。如果看到Active: active (running),那恭喜你,这台 RK3588 上已经有一个常年待命的智能体了。

4.5 数据备份与升级策略

很多人部署完就再也没管过数据备份,直到某一天刷系统把对话历史全部格式化。OpenClaw 的 data 目录和 config.json 是核心资产,至少要做到每周打包一次。我习惯写一个简单的 cron 任务:

0 3 * * 0 tar czf /home/yourname/backup/openclaw-$(date +\%W).tar.gz -C /home/yourname/openclaw-bot data skills config.json

升级这一块也有讲究。OpenClaw 更新比较勤,但不要每次看到新版本就往生产环境升。在 RK3588 这种 ARM 平台上,跨大版本升级最容易遇到原生依赖的二进制包对不上架构的情况。升级前先备份,然后拉最新代码重新 npm install,用openclaw --version确认版本切换成功,再跑一遍基础对话验证。如果新版本有问题,直接切回旧分支的 tag 就行。

5. 常见问题与排查技巧实录

5.1 npm install 卡死或编译失败

这是 ARM 平台部署最容易遇到的问题。很多 npm 包在发布时没有附带 ARM64 的预编译二进制,安装时只能现场编译,而编译时间取决于板子的 CPU 性能和内存大小。

排查步骤很简单:先看是不是网络问题,切国内镜像源再试;再看日志里是不是在 buildsharp或canvas这种带原生模块的包,如果是,多半是缺少编译依赖。我的建议是安装前先一次性把编译工具链装齐:

sudo apt install -y build-essential python3 make pkg-config

以及针对 sharp 和 canvas 的额外依赖:

sudo apt install -y libvips-dev libcairo2-dev libjpeg-dev libpango1.0-dev libgif-dev librsvg2-dev

装完之后清掉 npm 缓存重装:npm cache clean --force && rm -rf node_modules && npm install。

5.2 调用串口和摄像头总是报权限错误

把用户加进 dialout 组和 video 组是第一步,但有时候你明明加了组还是报错。这时候大概率是你的 systemd 服务没有带上用户组权限。

在 openclaw.service 的[Service]配置里补两行:

SupplementaryGroups=dialout video

然后重启服务。这是个特别隐蔽的坑,因为你在终端手动运行 openclaw 没问题,一旦 systemd 接管,进程的用户组权限就由 systemd 决定,默认不会继承登录用户的附加组。

5.3 模型 API 返回 404 或 400

大多数情况是 baseUrl 配置不对。OpenAI 兼容协议的标准路径是/v1/chat/completions,你把 baseUrl 写成http://ip:port而不是http://ip:port/v1,请求就会打到不存在的路由上。反过来,如果你用的是某些网关服务,它可能已经帮你包含/v1了,你再写一次就会变成/v1/v1。解决办法是看日志里实际请求的 URL 是什么,然后调整配置去对齐。

还有一种 400 则比较隐蔽:某些模型厂商要求你不能在请求里传stream参数,或者不能传max_tokens为空。这种需要你直接查看 openclaw 日志中的出站请求体,手动用 curl 模拟一次带同样参数的请求来找差异。

5.4 Ollama 在 RK3588 上的性能权衡

在 RK3588 上装 Ollama 很简单,跑小模型也能接受,比如qwen2.5:3b这种 3B 级别的模型,生成速度能有每秒 10 到 15 个 token,做一些本地指令理解完全够。但是要跑 7B 以上,速度会掉到每秒 2 到 4 个 token,交互体验就很差了。

如果一定要在本地跑更大的模型,可以考虑量化版本。GGUF 格式的 Q4_K_M 量化参数对 RK3588 比较友好,内存占用小,速度相对快一些。至于 RK3588 的 6 TOPS NPU,它的设计目标主要是卷积类的视觉推理,而不是大语言模型的 Transformer 解码,所以不要指望把它拿来加速 LLM,那是另一个世界的事。

5.5 Windows 上残留的 WSL 环境问题

这次部署之前我在 Windows 上用 WSL 跑过 OpenClaw,遇到过“无法安全验证 WSL 环境”的怪问题。后来排查下来,是 WSL 的内核版本和宿主机 Windows 版本不匹配导致的。如果你也碰到类似问题,直接在管理员 PowerShell 里执行wsl --update和wsl --status就能看到状态,然后把内核更新到最新版。不过说实话,一旦把部署目标固定在 RK3588 上,Windows 那头的这些兼容性问题就不重要了,ARM 板子本来就是完整的 Linux 环境,不需要套娃。

6. 扩展方向:从“能跑”到“好用”

6.1 给 OpenClaw 加视觉:RK3588 NPU 部署 YOLOv8

OpenClaw 本身不做视觉推理,但 RK3588 的 NPU 天生擅长这个。你可以单独部署 YOLOv8 的目标检测服务,然后用一个 skill 把它包装给 OpenClaw。

思路是:RK3588 的 NPU 通过 rknn-toolkit2 跑量化后的 YOLOv8 模型,检测结果通过 HTTP 接口暴露给本机,OpenClaw 的视觉 skill 只需要在需要时向这个接口请求一帧结果。这样智能体就能“看”到摄像头画面,还不会占用 CPU 资源。我之前测试过,NPU 上跑 YOLOv8s 处理 640x640 的输入,推理时间大概在 30 到 50 毫秒,足够实时了。这个能力嫁接到 OpenClaw 之后,你可以让智能体帮你“看一下鱼缸的灯是不是关了”,它调用视觉检测、判断结果、再回复你,整个过程都是自动的。

6.2 与 ROS2 合体:纯自然语言控制机器人

在线控机器人领域,RK3588 作为主控跑 ROS2 Humble 是很成熟的方案。OpenClaw 可以作为一个高层决策节点:用户用自然语言下指令,OpenClaw 判断任务,然后通过一个 bridge skill 把具体的运动控制指令发布到 ROS2 的话题上。网上有开源方案把 rosclaw 定义为 OpenClaw 的 ROS2 桥接层,本质上是把一个 Python 脚本挂到 OpenClaw 的 skill 目录,脚本内部用 rclpy 与 ROS2 通信。

这个方向的潜力在于:你可以把 SLAM 建图、路径规划、机械臂抓取这些成熟的 ROS2 能力全部复用到 OpenClaw 的上下文里,实现一个真正能听懂人话的机器人。做这个扩展的前提是 OpenClaw 运行稳定,ROS2 环境干净,两者之间的通信协议保持简单清晰。

6.3 家庭常驻服务:定时任务与主动推送

OpenClaw 跑在 RK3588 上最大的优势之一就是 7x24 在线。你可以给它配置定时触发的 skill,比如每天早上读取天气接口,汇总当天的日程,再通过微信或 Telegram bot 推送到手机。这个东西本质上不需要用户主动来问,AI 助理会按照预定的逻辑主动干活。

这块建议通过 OpenClaw 的 schedule 机制配合 skill 实现。核心思路是:写一个触发生成事件的 skill,把定时任务注册进 OpenClaw 的事件循环,每次触发时调用模型生成一段自然语言消息,再通过推送通道发出去。这个模式跑顺之后,你的 RK3588 就不再是一块开发板,而是一个能自己思考、定期汇报的家庭智能终端。

说实话,OpenClaw 部署到 RK3588 本身不算难,真正考验人的是把各种设备和模型整合到一套自动化流程里那一步。我这次折腾下来最大的体会是:不要一上来就追求最新版的系统镜像和 OpenClaw 代码,先用稳定的版本把链路跑通,再考虑升级。整个过程里最花时间的不是敲命令,而是排查那些“终端里能跑、变 systemd 就挂”的权限问题,以及理解模型调用和 skill 触发之间的依赖关系。把这些搞明白之后,RK3588 加 OpenClaw 这套组合能做的项目边界,就完全由你的想象力决定了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询