Jetson + OpenClaw + 飞书机器人:构建一个让边缘设备成为 AI Agent 助手的远程交互系统

Jetson + OpenClaw + 飞书机器人:构建一个让边缘设备成为 AI Agent 助手的远程交互系统

1. 背景

最近我希望在 Jetson 上部署一个本地 Openclaw,并通过飞书机器人进行远程交互,从而让闲置的边缘设备秒变我的高级AI助手。整体目标很简单:

  • 在 Jetson 上运行 OpenClaw
  • 接入自己的模型 API(我使用的是阿里的Coding Plan)
  • 通过飞书群聊 @机器人 或者私聊机器人直接调用本地 Agent

最终希望实现这样的工作流:

Feishu Group ↓ Feishu Bot ↓ OpenClaw Gateway (Jetson) ↓ Agent ↓ LLM API ↓ 返回飞书消息 

这篇文章记录一下从源码部署 OpenClaw,到接通飞书机器人的完整过程,以及过程中踩到的几个关键坑。


2. 环境信息

本文使用环境如下:

Jetson 环境

uname -a # 输出 Linux agx229-desktop 5.10.216-tegra #1 SMP PREEMPT Tue Mar 4 01:35:16 PST 2025 aarch64 aarch64 aarch64 GNU/Linux lsb_release -a # 输出 Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal nvcc --version # 输出 Cuda compilation tools, release 11.4, V11.4.315 

说明

当前平台为:

  • Jetson ARM64
  • Ubuntu 20.04
  • CUDA 11.4

这点很重要,因为后续某些依赖在 ARM64 + Ubuntu 20.04 上会遇到额外兼容性问题。


3. 安装 Node.js 与 pnpm

OpenClaw 是一个 Node.js 项目,因此首先需要准备 Node 环境。

建议使用 Node 22。

# 安装 nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash # 重新加载 shell 配置 source ~/.bashrc # 如果使用 zsh source ~/.zshrc # 配置镜像加速下载(可选,建议中国用户使用) nvm node_mirror https://npmmirror.com/mirrors/node/ nvm npm_mirror https://npmmirror.com/mirrors/npm/ # 安装并使用 Node.js 20 nvm install 20 nvm use 20 # 设为默认版本 nvm alias default 20 # 配置 npm 镜像加速 npm config set registry https://registry.npmmirror.com # 验证安装 node --version npm --version

还需要安装 pnpm

npm install -g pnpm 

安装后检查:

pnpm -v 

4. 配置 pnpm 环境变量

这一步非常重要。

如果不配置 PNPM_HOME,后面可能出现这些问题:

  • pnpm link --global 报错
  • OpenClaw 自动构建 UI 时提示找不到 pnpm
  • 全局命令不可用

建议将下面内容加入 ~/.bashrc

# pnpm export PNPM_HOME="/home/agx229/.local/share/pnpm" case ":$PATH:" in *":$PNPM_HOME:"*) ;; *) export PATH="$PNPM_HOME:$PATH" ;; esac # pnpm end 

保存后执行:

source ~/.bashrc 

再验证:

echo $PNPM_HOME which pnpm 

5. 克隆 OpenClaw 源码

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

6. 解决 Jetson 上 CMake 版本过低的问题

在 Jetson Ubuntu 20.04 上,系统自带的 CMake 往往版本较低。
而 OpenClaw 的某些依赖在编译时要求更高版本的 CMake。

我在安装过程中遇到的典型报错是:

CMake 3.19 or higher is required. You are running version 3.16.3 

因此需要手动升级 CMake。

安装新版 CMake

cd ~ wget https://github.com/Kitware/CMake/releases/download/v3.31.6/cmake-3.31.6-linux-aarch64.sh chmod +x cmake-3.31.6-linux-aarch64.sh sudo ./cmake-3.31.6-linux-aarch64.sh --skip-license --prefix=/usr/local 

检查版本:

/usr/local/bin/cmake --version 

如果系统仍然找不到新版本,可临时加入 PATH:

export PATH=/usr/local/bin:$PATH hash -r cmake --version 

必要时可以加入 ~/.bashrc


7. 安装依赖并编译 OpenClaw

在项目目录执行:

cd ~/openclaw pnpm install pnpm build 

如果安装过程中出现原生模块编译问题,优先检查:

  • CMake 版本
  • build-essential 是否安装
  • pnpm 是否在 PATH 中

8. 配置模型 API

OpenClaw 通过 ~/.openclaw/openclaw.json 进行配置。

如果目录不存在,先创建:

mkdir -p ~/.openclaw nano ~/.openclaw/openclaw.json 

我使用阿里的Coding Plan,个人体验觉得挺不错的,速度快,模型也多,非广告!这部分配置教程可以参考阿里官方的教程
大模型服务平台百炼控制台


9. 配置 Gateway Token

这是本文里一个非常关键的坑。

OpenClaw 的架构不是“CLI 直接调用模型”,而是:

CLI / TUI / Logs ↓ Gateway ↓ Agent ↓ Model 

所以 CLI 其实是 Gateway 的客户端
既然是客户端连接服务端,就涉及认证。

为什么要加 token

如果只配置服务端 token,而没有配置客户端 token,就会出现:

unauthorized: gateway token mismatch 

因此需要让 gateway 服务端客户端连接配置 使用同一个 token。

通过 ~/.openclaw/openclaw.json 进行知道如下,推荐配置如下:

{ "gateway": { "mode": "local", "auth": { "mode": "token", "token": "Yours Token" }, "remote": { "token": "Yours Token" } } } 

解释

  • gateway.auth.token:Gateway 服务端认证 token
  • gateway.remote.token:CLI / TUI / logs 等客户端连接 Gateway 时使用的 token

这两个必须一致。


10. 启动 Gateway 服务

先安装 gateway service:

openclaw gateway install 

然后启动:

systemctl --user start openclaw-gateway.service 

检查状态:

openclaw gateway status 

正常情况下会看到类似输出:

Runtime: running RPC probe: ok Listening: 127.0.0.1:18789 

如果配置修改过,需要重启:

systemctl --user restart openclaw-gateway.service 

12. 验证 TUI 是否可用

如果配置正确,可以直接运行:

openclaw tui 

若成功,界面会显示已连接,并能直接与模型对话。

如果出现 token mismatch,基本就是 auth.tokenremote.token 不一致。


13. 配置飞书机器人

第一步:创建飞书应用

进入飞书开放平台https://open.feishu.cn/?lang=zh-CN,创建一个企业自建应用。

第二步:启用机器人能力

在应用后台启用机器人。

第二步:配置权限

在左侧目录树选择“开发配置 > 权限管理”,单击“批量导入/导出权限”按钮。

加入如下内容:

{ "scopes": { "tenant": [ "contact:contact.base:readonly", "docx:document:readonly", "im:chat:read", "im:chat:update", "im:message.group_at_msg:readonly", "im:message.p2p_msg:readonly", "im:message.pins:read", "im:message.pins:write_only", "im:message.reactions:read", "im:message.reactions:write_only", "im:message:readonly", "im:message:recall", "im:message:send_as_bot", "im:message:send_multi_users", "im:message:send_sys_msg", "im:message:update", "im:resource", "application:application:self_manage", "cardkit:card:write", "cardkit:card:read" ], "user": [ "contact:user.employee_id:readonly", "offline_access","base:app:copy", "base:field:create", "base:field:delete", "base:field:read", "base:field:update", "base:record:create", "base:record:delete", "base:record:retrieve", "base:record:update", "base:table:create", "base:table:delete", "base:table:read", "base:table:update", "base:view:read", "base:view:write_only", "base:app:create", "base:app:update", "base:app:read", "board:whiteboard:node:create", "board:whiteboard:node:read", "calendar:calendar:read", "calendar:calendar.event:create", "calendar:calendar.event:delete", "calendar:calendar.event:read", "calendar:calendar.event:reply", "calendar:calendar.event:update", "calendar:calendar.free_busy:read", "contact:contact.base:readonly", "contact:user.base:readonly", "contact:user:search", "docs:document.comment:create", "docs:document.comment:read", "docs:document.comment:update", "docs:document.media:download", "docs:document:copy", "docx:document:create", "docx:document:readonly", "docx:document:write_only", "drive:drive.metadata:readonly", "drive:file:download", "drive:file:upload", "im:chat.members:read", "im:chat:read", "im:message", "im:message.group_msg:get_as_user", "im:message.p2p_msg:get_as_user", "im:message.send_as_user", "im:message:readonly", "search:docs:read", "search:message", "space:document:delete", "space:document:move", "space:document:retrieve", "task:comment:read", "task:comment:write", "task:task:read", "task:task:write", "task:task:writeonly", "task:tasklist:read", "task:tasklist:write", "wiki:node:copy", "wiki:node:create", "wiki:node:move", "wiki:node:read", "wiki:node:retrieve", "wiki:space:read", "wiki:space:retrieve", "wiki:space:write_only" ] } }

在弹窗中确认权限无误后,单击“申请开通”按钮,完成操作。

第三步:发布应用

到此就可以回来Jetson去连接我们的飞书机器人了

第四步:配置 Feishu Channel

运行:

openclaw channels add 

选择:

Feishu / Lark 

然后输入:

  • App ID
  • App Secret

具体过程可以选项可以参考我的

到此就基本完成了openclaw与飞书机器人的连接了,但是要实现聊天还得再继续配置。

第五步:重启Gateway

openclaw gateway restart

第六步:配置事件与回调

选择:

使用长连接接收事件 

然后添加事件:

im.message.receive_v1 

这是机器人接收消息所必需的事件。

继续配置回调

添加回调

第七步:发布应用版本

这一步非常关键。(这里参考第三步)

很多时候飞书应用配置改了但机器人无效,就是因为没有发布版本

进入:

版本管理与发布 

创建版本并发布。

第八步:配置私聊飞书机器人

在飞书APP中找到开发者小助手

之后给机器人发送任何信息

将Pairing code复制然后在Jetson终端输入

openclaw pairing approve feishu NHMC7CRG

到此,基本就实现了在飞书中直接召唤我们边缘设备干活了,回到飞书,与我们小助手聊天即可。


14. 常见坑总结

坑 1:Jetson 上 CMake 版本过低

会导致依赖编译失败。

坑 2:没有配置 pnpm PATH

会导致全局命令或 UI 构建异常。

坑 3:误以为需要单独安装 Feishu 插件

源码版已经内置,不需要重复安装。

坑 4:没有配置 gateway.remote.token

会导致 CLI 连接 Gateway 时出现 token mismatch。

坑 5:App ID / App Secret 使用了旧应用凭证

这是我这次飞书始终接不通的根因。

坑 6:飞书应用修改后未发布版本

会导致机器人看似配置好了,但实际不生效。


15. 最终效果

完成上述配置后,可以实现:

  • 在 Jetson 上运行 OpenClaw Gateway
  • 接入自己的模型 API
  • 在飞书群中 @机器人
  • 机器人调用本地 Agent 并返回回复

这为后续扩展提供了很好的基础,例如:

  • 远程查询 Jetson 状态
  • 执行自动化任务
  • 调用机器人系统接口
  • 通过飞书统一管理实验设备

16. 总结

这次在 Jetson 上部署 OpenClaw 并接入飞书机器人的过程,整体并不算复杂,但有几个坑非常容易卡住:

  • ARM 平台的依赖编译问题
  • pnpm 环境变量问题
  • Gateway token 机制

只要把这些关键点处理好,OpenClaw + 飞书这套链路其实是很顺的。

如果你也想在 Jetson 上搭一个可远程交互的本地 Agent,这套方案很值得尝试。


预告一下,下一期我将更新一下好用的Skills,让我们边缘设备更好的给我们干活!

Read more

固定资产管理系统低代码开发:企业资产管理的数字化革新

固定资产管理系统低代码开发:企业资产管理的数字化革新

一、固定资产管理的痛点与挑战 在企业运营过程中,固定资产是支撑业务发展的重要物质基础,涵盖办公设备、生产机械、运输车辆、房产地产等各类长期资产。然而,传统的固定资产管理模式往往面临诸多痛点: 1. 数据分散与不统一:企业各部门自行管理固定资产,数据分散在不同的表格、台账甚至纸质文档中,导致资产信息无法实时共享和同步。财务部门在进行资产折旧计算和盘点时,需要耗费大量时间收集和核对数据,容易出现数据不一致的情况。 2. 人工操作效率低下:传统的固定资产管理依赖人工录入、盘点和更新信息,不仅工作量大,而且容易出现人为错误。例如,在资产盘点过程中,人工核对资产编号、名称、位置等信息,容易出现漏盘、错盘的情况,影响盘点结果的准确性。 3. 资产全生命周期管理缺失:很多企业缺乏对固定资产全生命周期的有效管理,从资产采购、入库、使用、维护到报废处置,各个环节缺乏有效的衔接和监控。这可能导致资产闲置、浪费,或者在资产维护不及时的情况下,影响企业的正常生产运营。 4. 决策缺乏数据支持:由于资产数据的不准确和不及时,企业管理层在进行固定资产投资决策、资源配置优化等方面缺乏可靠的数据支

YOLOv12官版镜像在农业无人机上的落地实践

YOLOv12官版镜像在农业无人机上的落地实践 在华北平原某万亩智慧农场的春播季,一架搭载轻量边缘计算单元的四旋翼无人机正以3米/秒的速度低空巡航。镜头掠过刚覆膜的玉米田,系统在0.8毫秒内完成单帧推理——不仅精准框出杂草簇(准确率94.7%),还同步识别出三处早期玉米螟幼虫啃食痕迹,并自动标记坐标发送至农机调度平台。这不是实验室Demo,而是YOLOv12官版镜像在真实农业场景中稳定运行的日常。 当目标检测技术从工业质检、城市安防走向广袤农田,对模型的要求悄然改变:它必须在Jetson Orin Nano的8GB显存限制下保持30+ FPS,能区分叶片背面的微小虫卵与露珠反光,还要在连续6小时飞行中不因温度升高导致精度衰减。正是这些严苛条件,让YOLOv12——这个以注意力机制重构实时检测范式的全新架构——展现出前所未有的农业适配性。 1. 为什么农业场景需要YOLOv12?传统方案的三大断点 农业视觉应用长期困于“三难”:小目标难检、边缘难跑、环境难稳。我们梳理了过去两年在12个省级农技推广中心的实地反馈,发现现有方案存在三个结构性断点: 1.1 小目标识别失效:5像素

2.2 基于ultrascale 架构FPGA的system manager wizard使用(温压监测)

2.2 基于ultrascale 架构FPGA的system manager wizard使用(温压监测)

Reference: 《PG185》《UG580》 部分文案源于网友博客,AIGC和个人理解,如有雷同纯属抄袭 一、介绍 简述: Xilinx System Management Wizard 是 Vivado 和 Vitis 工具中的一个图形化配置工具,主要用于为 FPGA 设计生成与系统监控和管理相关的 IP 核。这个工具帮助用户配置和集成诸如温度监控、电压监控、时钟监控、外部模拟输入等功能到 FPGA 设计中。它支持AXI4-Lite 与 DRP 接口 主要功能: * 温度和电压监测: * 内建传感器:支持 FPGA 内部温度、VCCINT(核心电压)、VCCAUX(辅助电压)、VCCBRAM(BRAM 电压)等电压和温度监测。通过 SYSMON 进行实时数据采集。

OpenClaw重塑机器人抓取未来

OpenClaw:重新定义机器人抓取的未来之手 在人工智能席卷全球的今天,当我们惊叹于ChatGPT流畅的对话、Midjourney惊艳的创作时,物理世界的智能化却显得步履蹒跚。机器人仍然笨拙地挣扎于最简单的任务:拿起一个鸡蛋、整理杂乱的桌面、或者分拣形状各异的物品。 这个困境的核心,在于机器人缺少一双灵巧而通用的"手"。而一个名为OpenClaw(又称Clawbot)的开源项目,正在以革命性的方式改变这一现状。 一、抓取技术的困境与突破 传统机器人抓取面临三大难题: 刚性的局限 工业机器人依赖专用夹具,每个新物件都需要重新设计和调试。这种刚性系统无法适应现代生产的小批量、多品种需求,更难以进入家庭、医院等非结构化环境。 成本的壁垒 先进的柔性抓手价格高达数千美元,将中小企业、科研机构和创客群体拒之门外,严重制约了机器人技术的普及和创新。 智能的断层 虽然机器视觉能识别数百万种物体,但执行端的匮乏让这种智能无法转化为实际行动。感知与操作的脱节,成为机器人发展的关键瓶颈。 OpenClaw的巧妙之处在于,它用极其简单的机械结构解决了这些复杂问题。 二、极简设计的智慧