OpenClaw Nodes 设备管理深度解析:AI Agent的跨设备协作能力

目录

    • [1. 引言 - 为什么需要跨设备能力?](#1. 引言 - 为什么需要跨设备能力?)
      • [1.1 云端 Agent 的局限](#1.1 云端 Agent 的局限)
      • [1.2 Nodes 的解决思路](#1.2 Nodes 的解决思路)
      • [1.3 Nodes 能力概览](#1.3 Nodes 能力概览)
    • [2. Nodes 概念模型](#2. Nodes 概念模型)
      • [2.1 核心概念](#2.1 核心概念)
      • [2.2 通信模型](#2.2 通信模型)
    • [3. 设备配对流程](#3. 设备配对流程)
      • [3.1 配对方式](#3.1 配对方式)
      • [3.2 QR 码配对实战](#3.2 QR 码配对实战)
      • [3.3 配对状态流转](#3.3 配对状态流转)
      • [3.4 配对安全机制](#3.4 配对安全机制)
    • [4. 节点管理操作](#4. 节点管理操作)
      • [4.1 查看节点列表](#4.1 查看节点列表)
      • [4.2 节点状态监控](#4.2 节点状态监控)
      • [4.3 解除配对](#4.3 解除配对)
    • [5. 跨设备操作实战](#5. 跨设备操作实战)
      • [5.1 在节点上执行命令](#5.1 在节点上执行命令)
      • [5.2 通过节点控制浏览器](#5.2 通过节点控制浏览器)
      • [5.3 跨设备文件操作](#5.3 跨设备文件操作)
    • [6. 实战案例](#6. 实战案例)
      • [6.1 案例1:手机节点配对与操作](#6.1 案例1:手机节点配对与操作)
      • [6.2 案例2:远程控制 Mac 桌面](#6.2 案例2:远程控制 Mac 桌面)
      • [6.3 案例3:多节点协同工作流](#6.3 案例3:多节点协同工作流)
    • [7. 安全与最佳实践](#7. 安全与最佳实践)
      • [7.1 安全注意事项](#7.1 安全注意事项)
      • [7.2 最佳实践](#7.2 最佳实践)
      • [7.3 节点配置示例](#7.3 节点配置示例)
    • [8. 总结](#8. 总结)
      • [8.1 Nodes 核心价值](#8.1 Nodes 核心价值)
      • [8.2 思考题](#8.2 思考题)
      • [8.3 参考链接](#8.3 参考链接)

📱 摘要:OpenClaw Nodes 是实现 AI Agent 跨设备协作的核心机制。通过节点配对,Agent 可以将命令执行、浏览器控制、文件操作等能力扩展到用户的手机、平板、Mac 等设备上,打破云端与本地的边界。本文深入剖析 Nodes 的概念模型、配对流程(QR 码/设置码)、设备管理机制、跨设备通信原理,并结合实战案例展示如何构建手机节点控制、跨设备文件同步、远程桌面操作等应用场景。掌握 Nodes,是从"云端 Agent"到"全设备 Agent"的关键跨越。


1. 引言 - 为什么需要跨设备能力?

1.1 云端 Agent 的局限

传统 AI Agent 运行在云端,存在天然局限:

局限 说明 影响
无法访问本地文件 云端无法读取用户电脑/手机上的文件 无法处理本地文档、照片
无法控制本地应用 无法操作桌面软件、手机App 无法自动化日常操作
无法使用本地算力 无法利用设备的GPU/CPU 无法运行本地模型
无法感知本地环境 无法获取位置、传感器数据 无法提供情境化服务

1.2 Nodes 的解决思路

#mermaid-svg-0w5oQbeDjgvlt4lh{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-0w5oQbeDjgvlt4lh .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-0w5oQbeDjgvlt4lh .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-0w5oQbeDjgvlt4lh .error-icon{fill:#552222;}#mermaid-svg-0w5oQbeDjgvlt4lh .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-0w5oQbeDjgvlt4lh .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-0w5oQbeDjgvlt4lh .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-0w5oQbeDjgvlt4lh .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-0w5oQbeDjgvlt4lh .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-0w5oQbeDjgvlt4lh .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-0w5oQbeDjgvlt4lh .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-0w5oQbeDjgvlt4lh .marker{fill:#333333;stroke:#333333;}#mermaid-svg-0w5oQbeDjgvlt4lh .marker.cross{stroke:#333333;}#mermaid-svg-0w5oQbeDjgvlt4lh svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-0w5oQbeDjgvlt4lh p{margin:0;}#mermaid-svg-0w5oQbeDjgvlt4lh .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-0w5oQbeDjgvlt4lh .cluster-label text{fill:#333;}#mermaid-svg-0w5oQbeDjgvlt4lh .cluster-label span{color:#333;}#mermaid-svg-0w5oQbeDjgvlt4lh .cluster-label span p{background-color:transparent;}#mermaid-svg-0w5oQbeDjgvlt4lh .label text,#mermaid-svg-0w5oQbeDjgvlt4lh span{fill:#333;color:#333;}#mermaid-svg-0w5oQbeDjgvlt4lh .node rect,#mermaid-svg-0w5oQbeDjgvlt4lh .node circle,#mermaid-svg-0w5oQbeDjgvlt4lh .node ellipse,#mermaid-svg-0w5oQbeDjgvlt4lh .node polygon,#mermaid-svg-0w5oQbeDjgvlt4lh .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-0w5oQbeDjgvlt4lh .rough-node .label text,#mermaid-svg-0w5oQbeDjgvlt4lh .node .label text,#mermaid-svg-0w5oQbeDjgvlt4lh .image-shape .label,#mermaid-svg-0w5oQbeDjgvlt4lh .icon-shape .label{text-anchor:middle;}#mermaid-svg-0w5oQbeDjgvlt4lh .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-0w5oQbeDjgvlt4lh .rough-node .label,#mermaid-svg-0w5oQbeDjgvlt4lh .node .label,#mermaid-svg-0w5oQbeDjgvlt4lh .image-shape .label,#mermaid-svg-0w5oQbeDjgvlt4lh .icon-shape .label{text-align:center;}#mermaid-svg-0w5oQbeDjgvlt4lh .node.clickable{cursor:pointer;}#mermaid-svg-0w5oQbeDjgvlt4lh .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-0w5oQbeDjgvlt4lh .arrowheadPath{fill:#333333;}#mermaid-svg-0w5oQbeDjgvlt4lh .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-0w5oQbeDjgvlt4lh .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-0w5oQbeDjgvlt4lh .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0w5oQbeDjgvlt4lh .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-0w5oQbeDjgvlt4lh .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0w5oQbeDjgvlt4lh .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-0w5oQbeDjgvlt4lh .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-0w5oQbeDjgvlt4lh .cluster text{fill:#333;}#mermaid-svg-0w5oQbeDjgvlt4lh .cluster span{color:#333;}#mermaid-svg-0w5oQbeDjgvlt4lh div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-0w5oQbeDjgvlt4lh .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-0w5oQbeDjgvlt4lh rect.text{fill:none;stroke-width:0;}#mermaid-svg-0w5oQbeDjgvlt4lh .icon-shape,#mermaid-svg-0w5oQbeDjgvlt4lh .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0w5oQbeDjgvlt4lh .icon-shape p,#mermaid-svg-0w5oQbeDjgvlt4lh .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-0w5oQbeDjgvlt4lh .icon-shape .label rect,#mermaid-svg-0w5oQbeDjgvlt4lh .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0w5oQbeDjgvlt4lh .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-0w5oQbeDjgvlt4lh .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-0w5oQbeDjgvlt4lh :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户设备
云端 OpenClaw
WebSocket
Gateway
Session
Agent
Node Client
本地执行器
文件系统
浏览器
系统命令

Nodes 的核心思想:在用户设备上运行一个轻量级客户端(Node),通过 WebSocket 与云端 Gateway 保持长连接,Agent 的指令通过这条通道下发到设备执行。

1.3 Nodes 能力概览

能力 说明 典型场景
远程命令执行 在设备上运行 shell 命令 系统管理、脚本执行
浏览器控制 控制设备上的浏览器 操作已登录的网站
文件操作 读写设备上的文件 文档处理、数据同步
状态监控 获取设备运行状态 健康检查、性能监控
屏幕截图 捕获设备屏幕 远程协助、错误排查

2. Nodes 概念模型

2.1 核心概念

#mermaid-svg-bjH4UCG5WU2UnVk9{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-bjH4UCG5WU2UnVk9 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-bjH4UCG5WU2UnVk9 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-bjH4UCG5WU2UnVk9 .error-icon{fill:#552222;}#mermaid-svg-bjH4UCG5WU2UnVk9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bjH4UCG5WU2UnVk9 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-bjH4UCG5WU2UnVk9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bjH4UCG5WU2UnVk9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bjH4UCG5WU2UnVk9 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-bjH4UCG5WU2UnVk9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bjH4UCG5WU2UnVk9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bjH4UCG5WU2UnVk9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bjH4UCG5WU2UnVk9 .marker.cross{stroke:#333333;}#mermaid-svg-bjH4UCG5WU2UnVk9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bjH4UCG5WU2UnVk9 p{margin:0;}#mermaid-svg-bjH4UCG5WU2UnVk9 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-bjH4UCG5WU2UnVk9 .cluster-label text{fill:#333;}#mermaid-svg-bjH4UCG5WU2UnVk9 .cluster-label span{color:#333;}#mermaid-svg-bjH4UCG5WU2UnVk9 .cluster-label span p{background-color:transparent;}#mermaid-svg-bjH4UCG5WU2UnVk9 .label text,#mermaid-svg-bjH4UCG5WU2UnVk9 span{fill:#333;color:#333;}#mermaid-svg-bjH4UCG5WU2UnVk9 .node rect,#mermaid-svg-bjH4UCG5WU2UnVk9 .node circle,#mermaid-svg-bjH4UCG5WU2UnVk9 .node ellipse,#mermaid-svg-bjH4UCG5WU2UnVk9 .node polygon,#mermaid-svg-bjH4UCG5WU2UnVk9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bjH4UCG5WU2UnVk9 .rough-node .label text,#mermaid-svg-bjH4UCG5WU2UnVk9 .node .label text,#mermaid-svg-bjH4UCG5WU2UnVk9 .image-shape .label,#mermaid-svg-bjH4UCG5WU2UnVk9 .icon-shape .label{text-anchor:middle;}#mermaid-svg-bjH4UCG5WU2UnVk9 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-bjH4UCG5WU2UnVk9 .rough-node .label,#mermaid-svg-bjH4UCG5WU2UnVk9 .node .label,#mermaid-svg-bjH4UCG5WU2UnVk9 .image-shape .label,#mermaid-svg-bjH4UCG5WU2UnVk9 .icon-shape .label{text-align:center;}#mermaid-svg-bjH4UCG5WU2UnVk9 .node.clickable{cursor:pointer;}#mermaid-svg-bjH4UCG5WU2UnVk9 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-bjH4UCG5WU2UnVk9 .arrowheadPath{fill:#333333;}#mermaid-svg-bjH4UCG5WU2UnVk9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bjH4UCG5WU2UnVk9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bjH4UCG5WU2UnVk9 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bjH4UCG5WU2UnVk9 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-bjH4UCG5WU2UnVk9 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bjH4UCG5WU2UnVk9 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-bjH4UCG5WU2UnVk9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bjH4UCG5WU2UnVk9 .cluster text{fill:#333;}#mermaid-svg-bjH4UCG5WU2UnVk9 .cluster span{color:#333;}#mermaid-svg-bjH4UCG5WU2UnVk9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bjH4UCG5WU2UnVk9 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-bjH4UCG5WU2UnVk9 rect.text{fill:none;stroke-width:0;}#mermaid-svg-bjH4UCG5WU2UnVk9 .icon-shape,#mermaid-svg-bjH4UCG5WU2UnVk9 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bjH4UCG5WU2UnVk9 .icon-shape p,#mermaid-svg-bjH4UCG5WU2UnVk9 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-bjH4UCG5WU2UnVk9 .icon-shape .label rect,#mermaid-svg-bjH4UCG5WU2UnVk9 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bjH4UCG5WU2UnVk9 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-bjH4UCG5WU2UnVk9 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-bjH4UCG5WU2UnVk9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Node 架构
Node ID
节点名称
设备类型
连接状态
Android
iOS
macOS
Linux
🟢 已连接
🟡 重连中
🔴 离线

Node ID :每个节点的唯一标识符,在配对时生成。格式通常为 node_xxx 或自定义名称。

设备类型:支持 Android、iOS、macOS、Linux 等平台。不同平台的能力范围有所不同:

平台 命令执行 浏览器控制 文件操作 屏幕截图
Android ✅(受限)
iOS ⚠️(受限) ⚠️(沙盒)
macOS
Linux

2.2 通信模型

设备 Node Gateway 云端 Agent 设备 Node Gateway 云端 Agent #mermaid-svg-rMncLqhVX1FGigED{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-rMncLqhVX1FGigED .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rMncLqhVX1FGigED .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rMncLqhVX1FGigED .error-icon{fill:#552222;}#mermaid-svg-rMncLqhVX1FGigED .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rMncLqhVX1FGigED .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rMncLqhVX1FGigED .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rMncLqhVX1FGigED .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rMncLqhVX1FGigED .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rMncLqhVX1FGigED .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rMncLqhVX1FGigED .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rMncLqhVX1FGigED .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rMncLqhVX1FGigED .marker.cross{stroke:#333333;}#mermaid-svg-rMncLqhVX1FGigED svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rMncLqhVX1FGigED p{margin:0;}#mermaid-svg-rMncLqhVX1FGigED .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-rMncLqhVX1FGigED text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-rMncLqhVX1FGigED .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-rMncLqhVX1FGigED .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-rMncLqhVX1FGigED .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-rMncLqhVX1FGigED .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-rMncLqhVX1FGigED #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-rMncLqhVX1FGigED .sequenceNumber{fill:white;}#mermaid-svg-rMncLqhVX1FGigED #sequencenumber{fill:#333;}#mermaid-svg-rMncLqhVX1FGigED #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-rMncLqhVX1FGigED .messageText{fill:#333;stroke:none;}#mermaid-svg-rMncLqhVX1FGigED .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-rMncLqhVX1FGigED .labelText,#mermaid-svg-rMncLqhVX1FGigED .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-rMncLqhVX1FGigED .loopText,#mermaid-svg-rMncLqhVX1FGigED .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-rMncLqhVX1FGigED .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-rMncLqhVX1FGigED .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-rMncLqhVX1FGigED .noteText,#mermaid-svg-rMncLqhVX1FGigED .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-rMncLqhVX1FGigED .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-rMncLqhVX1FGigED .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-rMncLqhVX1FGigED .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-rMncLqhVX1FGigED .actorPopupMenu{position:absolute;}#mermaid-svg-rMncLqhVX1FGigED .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-rMncLqhVX1FGigED .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-rMncLqhVX1FGigED .actor-man circle,#mermaid-svg-rMncLqhVX1FGigED line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-rMncLqhVX1FGigED :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 全程加密通信,双向认证 exec(cmd, host="node", node="my-mac") WebSocket 下发指令 本地执行命令 返回执行结果 结果回传

Agent 通过 Gateway 将指令路由到指定 Node,Node 在本地执行后将结果回传。整个过程对 Agent 透明,只需指定 host="node"node="节点ID" 即可。


3. 设备配对流程

3.1 配对方式

OpenClaw 支持两种配对方式:

方式 适用场景 操作步骤
QR 码扫描 手机端配对 1. Gateway 生成 QR 码 2. 手机 App 扫码 3. 确认配对
设置码输入 桌面端配对 1. Gateway 显示设置码 2. 桌面客户端输入 3. 确认配对

3.2 QR 码配对实战

python 复制代码
# 在 OpenClaw 中生成节点配对 QR 码
# 方式1:通过 CLI 命令
# openclaw node pair --platform android

# 方式2:通过 Gateway API
# GET /api/nodes/pair-qr

# 配对流程:
# 1. Gateway 生成包含连接信息的 QR 码
# 2. 用户在手机 App 中扫描 QR 码
# 3. App 与 Gateway 建立 WebSocket 连接
# 4. Gateway 验证配对请求
# 5. 配对成功,节点上线

3.3 配对状态流转

#mermaid-svg-jyT597lsHDrO8Zgv{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-jyT597lsHDrO8Zgv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-jyT597lsHDrO8Zgv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-jyT597lsHDrO8Zgv .error-icon{fill:#552222;}#mermaid-svg-jyT597lsHDrO8Zgv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jyT597lsHDrO8Zgv .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-jyT597lsHDrO8Zgv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jyT597lsHDrO8Zgv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jyT597lsHDrO8Zgv .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-jyT597lsHDrO8Zgv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jyT597lsHDrO8Zgv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jyT597lsHDrO8Zgv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jyT597lsHDrO8Zgv .marker.cross{stroke:#333333;}#mermaid-svg-jyT597lsHDrO8Zgv svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jyT597lsHDrO8Zgv p{margin:0;}#mermaid-svg-jyT597lsHDrO8Zgv defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-jyT597lsHDrO8Zgv g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-jyT597lsHDrO8Zgv g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-jyT597lsHDrO8Zgv g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-jyT597lsHDrO8Zgv g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-jyT597lsHDrO8Zgv g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-jyT597lsHDrO8Zgv .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-jyT597lsHDrO8Zgv .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-jyT597lsHDrO8Zgv .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-jyT597lsHDrO8Zgv .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-jyT597lsHDrO8Zgv .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-jyT597lsHDrO8Zgv .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-jyT597lsHDrO8Zgv .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-jyT597lsHDrO8Zgv .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jyT597lsHDrO8Zgv .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-jyT597lsHDrO8Zgv .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jyT597lsHDrO8Zgv .edgeLabel .label text{fill:#333;}#mermaid-svg-jyT597lsHDrO8Zgv .label div .edgeLabel{color:#333;}#mermaid-svg-jyT597lsHDrO8Zgv .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-jyT597lsHDrO8Zgv .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-jyT597lsHDrO8Zgv .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-jyT597lsHDrO8Zgv .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-jyT597lsHDrO8Zgv .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-jyT597lsHDrO8Zgv .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jyT597lsHDrO8Zgv .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jyT597lsHDrO8Zgv #statediagram-barbEnd{fill:#333333;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jyT597lsHDrO8Zgv .cluster-label,#mermaid-svg-jyT597lsHDrO8Zgv .nodeLabel{color:#131300;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-jyT597lsHDrO8Zgv .note-edge{stroke-dasharray:5;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagram-note text{fill:black;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagram-note .nodeLabel{color:black;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagram .edgeLabel{color:red;}#mermaid-svg-jyT597lsHDrO8Zgv #dependencyStart,#mermaid-svg-jyT597lsHDrO8Zgv #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-jyT597lsHDrO8Zgv .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-jyT597lsHDrO8Zgv :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 扫码/输入设置码
验证通过
验证失败
WebSocket 建立
网络中断
恢复连接
超时断开
解除配对
主动断开
未配对
配对中
已配对
已连接
重连中

配对成功后,节点信息会保存在 Gateway 配置中,下次启动自动重连。

3.4 配对安全机制

安全措施 说明
双向认证 Node 和 Gateway 互相验证身份
加密通信 WebSocket 使用 TLS 加密
Token 机制 配对时生成唯一 Token,后续通信携带
权限白名单 可限制 Node 可执行的命令范围
审批机制 敏感操作需用户确认

4. 节点管理操作

4.1 查看节点列表

python 复制代码
# 通过 CLI 查看所有已配对节点
# openclaw node list

# 输出示例:
# NODE ID        NAME          PLATFORM  STATUS     LAST SEEN
# node_abc123    my-mac        macOS     connected  2s ago
# node_def456    my-iphone     iOS       connected  5s ago
# node_ghi789    my-android    Android   offline    2h ago

4.2 节点状态监控

python 复制代码
# 检查特定节点状态
# openclaw node status --node my-mac

# 输出示例:
# Node: my-mac (node_abc123)
# Platform: macOS 14.3
# Status: connected
# Uptime: 2h 35m
# CPU: 45% | Memory: 62% | Disk: 78%
# Active sessions: 2

4.3 解除配对

python 复制代码
# 解除节点配对
# openclaw node unpair --node my-android

# 确认后,该节点的所有配置和Token将被清除
# 节点需要重新扫码配对才能再次连接

5. 跨设备操作实战

5.1 在节点上执行命令

python 复制代码
# 在远程 macOS 节点上执行 shell 命令
result = exec(
    command="ls -la ~/Documents/",
    host="node",
    node="my-mac"
)

# 在远程节点上运行 Python 脚本
result = exec(
    command="python3 analyze_data.py",
    host="node",
    node="my-mac",
    workdir="/Users/me/projects/data"
)

# 在 Android 节点上执行 adb 命令
result = exec(
    command="adb shell dumpsys battery",
    host="node",
    node="my-android"
)

参数说明

  • host="node":指定在节点上执行,而非云端沙箱
  • node="my-mac":目标节点的 ID 或名称
  • workdir:远程工作目录
  • command:要执行的命令,在节点的本地 shell 中运行

5.2 通过节点控制浏览器

python 复制代码
# 在用户 Mac 上的浏览器中操作(利用已登录状态)
browser(
    action="navigate",
    url="https://internal.company.com/dashboard",
    profile="user",  # 使用用户已登录的浏览器
    node="my-mac"    # 路由到指定节点
)

# 获取页面快照
snapshot = browser(
    action="snapshot",
    node="my-mac",
    targetId="t1"  # 指定标签页
)

# 在节点浏览器中执行操作
browser(
    action="act",
    kind="click",
    ref="button_submit",
    node="my-mac"
)

为什么通过节点控制浏览器? 🔥

场景 云端浏览器 节点浏览器
已登录网站 ❌ 需要重新登录 ✅ 直接使用已有 session
内网访问 ❌ 无法访问 ✅ 在内网环境中
Cookie 依赖 ❌ 需要手动设置 ✅ 自动携带
本地服务 ❌ 无法访问 localhost ✅ 直接访问

5.3 跨设备文件操作

python 复制代码
# 读取远程节点上的文件
content = exec(
    command="cat ~/Documents/report.txt",
    host="node",
    node="my-mac"
)

# 将处理结果写回节点
exec(
    command="echo 'processed' > ~/Documents/result.txt",
    host="node",
    node="my-mac"
)

# 在节点间同步文件(通过云端中转)
# 1. 从节点A读取
data = exec(command="cat /data/export.json", host="node", node="node-a")
# 2. 写入节点B
exec(command=f"echo '{data}' > /data/import.json", host="node", node="node-b")

6. 实战案例

6.1 案例1:手机节点配对与操作

场景:用户希望 Agent 能读取手机上的照片信息,并在需要时发送通知。

python 复制代码
# Step 1: 配对 Android 手机
# openclaw node pair --platform android
# → 显示 QR 码,手机 App 扫码

# Step 2: 查看手机电池状态
battery = exec(
    command="adb shell dumpsys battery",
    host="node",
    node="my-android"
)

# Step 3: 获取照片列表
photos = exec(
    command="adb shell ls /sdcard/DCIM/Camera/",
    host="node",
    node="my-android"
)

# Step 4: 拉取照片到云端处理
exec(
    command="adb pull /sdcard/DCIM/Camera/IMG_20240101.jpg /tmp/photo.jpg",
    host="node",
    node="my-android"
)

6.2 案例2:远程控制 Mac 桌面

场景:Agent 帮助用户在 Mac 上打开应用、处理文档。

python 复制代码
# 打开 macOS 应用
exec(
    command="open -a 'Microsoft Word'",
    host="node",
    node="my-mac"
)

# 获取屏幕截图查看当前状态
screenshot = browser(
    action="screenshot",
    node="my-mac"
)

# 执行 AppleScript 自动化
exec(
    command="""osascript -e '
    tell application "Finder"
        set theFiles to every file of folder "Documents"
        return name of theFiles
    end tell'""",
    host="node",
    node="my-mac"
)

6.3 案例3:多节点协同工作流

场景:在 Mac 上处理数据,在手机上查看结果。
#mermaid-svg-8I3j32hVxfaWmTHY{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-8I3j32hVxfaWmTHY .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-8I3j32hVxfaWmTHY .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-8I3j32hVxfaWmTHY .error-icon{fill:#552222;}#mermaid-svg-8I3j32hVxfaWmTHY .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8I3j32hVxfaWmTHY .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-8I3j32hVxfaWmTHY .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8I3j32hVxfaWmTHY .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8I3j32hVxfaWmTHY .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-8I3j32hVxfaWmTHY .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8I3j32hVxfaWmTHY .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8I3j32hVxfaWmTHY .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8I3j32hVxfaWmTHY .marker.cross{stroke:#333333;}#mermaid-svg-8I3j32hVxfaWmTHY svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8I3j32hVxfaWmTHY p{margin:0;}#mermaid-svg-8I3j32hVxfaWmTHY .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8I3j32hVxfaWmTHY .cluster-label text{fill:#333;}#mermaid-svg-8I3j32hVxfaWmTHY .cluster-label span{color:#333;}#mermaid-svg-8I3j32hVxfaWmTHY .cluster-label span p{background-color:transparent;}#mermaid-svg-8I3j32hVxfaWmTHY .label text,#mermaid-svg-8I3j32hVxfaWmTHY span{fill:#333;color:#333;}#mermaid-svg-8I3j32hVxfaWmTHY .node rect,#mermaid-svg-8I3j32hVxfaWmTHY .node circle,#mermaid-svg-8I3j32hVxfaWmTHY .node ellipse,#mermaid-svg-8I3j32hVxfaWmTHY .node polygon,#mermaid-svg-8I3j32hVxfaWmTHY .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8I3j32hVxfaWmTHY .rough-node .label text,#mermaid-svg-8I3j32hVxfaWmTHY .node .label text,#mermaid-svg-8I3j32hVxfaWmTHY .image-shape .label,#mermaid-svg-8I3j32hVxfaWmTHY .icon-shape .label{text-anchor:middle;}#mermaid-svg-8I3j32hVxfaWmTHY .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-8I3j32hVxfaWmTHY .rough-node .label,#mermaid-svg-8I3j32hVxfaWmTHY .node .label,#mermaid-svg-8I3j32hVxfaWmTHY .image-shape .label,#mermaid-svg-8I3j32hVxfaWmTHY .icon-shape .label{text-align:center;}#mermaid-svg-8I3j32hVxfaWmTHY .node.clickable{cursor:pointer;}#mermaid-svg-8I3j32hVxfaWmTHY .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-8I3j32hVxfaWmTHY .arrowheadPath{fill:#333333;}#mermaid-svg-8I3j32hVxfaWmTHY .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8I3j32hVxfaWmTHY .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8I3j32hVxfaWmTHY .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8I3j32hVxfaWmTHY .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-8I3j32hVxfaWmTHY .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8I3j32hVxfaWmTHY .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-8I3j32hVxfaWmTHY .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8I3j32hVxfaWmTHY .cluster text{fill:#333;}#mermaid-svg-8I3j32hVxfaWmTHY .cluster span{color:#333;}#mermaid-svg-8I3j32hVxfaWmTHY div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-8I3j32hVxfaWmTHY .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-8I3j32hVxfaWmTHY rect.text{fill:none;stroke-width:0;}#mermaid-svg-8I3j32hVxfaWmTHY .icon-shape,#mermaid-svg-8I3j32hVxfaWmTHY .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8I3j32hVxfaWmTHY .icon-shape p,#mermaid-svg-8I3j32hVxfaWmTHY .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-8I3j32hVxfaWmTHY .icon-shape .label rect,#mermaid-svg-8I3j32hVxfaWmTHY .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8I3j32hVxfaWmTHY .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-8I3j32hVxfaWmTHY .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-8I3j32hVxfaWmTHY :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 节点
工作流
exec
notify
Agent 接收任务
在 Mac 节点处理数据
生成报告
推送通知到手机
用户手机确认
my-mac: 数据处理
my-iphone: 通知接收

python 复制代码
# 多节点协同工作流
# 1. 在 Mac 上处理数据
result = exec(
    command="python3 process_data.py --input sales.csv --output report.pdf",
    host="node",
    node="my-mac",
    workdir="/Users/me/projects"
)

# 2. 生成摘要
summary = exec(
    command="python3 summarize.py --input report.pdf",
    host="node",
    node="my-mac"
)

# 3. 通过手机节点发送通知
exec(
    command="am broadcast -a com.openclaw.NOTIFY --es message '报告已生成'",
    host="node",
    node="my-android"
)

7. 安全与最佳实践

7.1 安全注意事项

⚠️ 风险 防护措施
未授权访问 启用配对审批,拒绝未知设备
命令注入 使用命令白名单,禁止危险命令
数据泄露 敏感数据加密传输,不记录明文
设备失控 设置操作频率限制,超时自动断开

7.2 最佳实践

  1. 最小权限原则 🔒:只授予 Node 必要的权限,避免全量访问
  2. 命令白名单 ✅:配置 security: allowlist,只允许预定义的命令
  3. 定期审计 📋:定期检查节点活动日志,发现异常及时处理
  4. 网络隔离 🌐:生产环境使用 VPN 或专用网络,避免公网暴露
  5. 优雅降级 ⚡:节点离线时提供替代方案,不要让工作流中断

7.3 节点配置示例

yaml 复制代码
# openclaw 配置中的节点安全设置
nodes:
  security:
    # 命令执行安全模式
    execSecurity: allowlist
    
    # 允许的命令列表
    allowedCommands:
      - ls
      - cat
      - python3
      - git
      - npm
    
    # 禁止的命令模式
    deniedPatterns:
      - "rm -rf /"
      - "sudo *"
      - "curl * | bash"
    
    # 操作审批
    requireApproval:
      - "sudo *"
      - "install-*"

8. 总结

8.1 Nodes 核心价值

OpenClaw Nodes 打破了 AI Agent 的云端边界,让 Agent 的能力延伸到用户的每一台设备:

  • 📱 全设备覆盖:Android、iOS、macOS、Linux,一个 Agent 管控所有设备
  • 🔐 安全可控:双向认证、加密通信、权限白名单,安全不妥协
  • ⚡ 实时响应:WebSocket 长连接,指令毫秒级下发
  • 🔄 自动重连:网络中断自动恢复,无需人工干预

8.2 思考题

  1. 如何在保证安全的前提下,让 Agent 自主决定在哪个节点上执行任务?
  2. 当多个节点同时在线时,如何设计智能路由策略选择最优节点?
  3. 节点离线时,如何设计优雅降级方案确保核心功能不受影响?

8.3 参考链接

相关推荐
GIOTTO情1 小时前
智能媒介投放技术迭代:从人工规则调控到AI全域动态调度的架构演进
人工智能·架构
Herlie1 小时前
2026新品上新季:3款AI电商套图生成工具实测
大数据·人工智能
人工智能研究所1 小时前
字节开源 OmniShow:文本,图片,音频,人体姿态多输入,一键成片
人工智能·神经网络·开源·音视频·开源软件·字节跳动·ai 视频
珠海西格电力1 小时前
西格电力零碳园区管理系统的技术架构是怎样的?
大数据·运维·人工智能·物联网·架构·能源
醒醒该学习了!1 小时前
AI视频与数字人工具
人工智能
海棠AI实验室1 小时前
把“选题三角”做成一个评分系统:Prompt 工程 + 多模型投票实战
人工智能·prompt
深圳市机智人激光雷达2 小时前
时空解算与图优化:激光雷达 3D 建图的技术原理与实现流程
人工智能·3d·机器人·自动化·自动驾驶·激光雷达
数幄科技2 小时前
电力装备制造业智能化转型】【数据基础设施篇】【5】数据采集 ETL 的可靠性设计
大数据·人工智能·算法·数据治理·数幄科技
海伯森技术2 小时前
海伯森3D线光谱共焦精密测量技术及产业化应用
大数据·人工智能·3d