Skip to content

第11章 Node 系统与设备连接

"Agent 的计算基座和操作目标注定是物理分离的——服务器在弗吉尼亚,相机在北京,屏幕在东京。这不是架构缺陷,而是使用场景的本质。一切设计都必须从'设备随时会消失'这个假设出发。"

本章要点

  • 理解 Node 系统如何让 Agent 从数字世界延伸到物理世界
  • 掌握配对协议:从零信任到建立安全连接的完整流程
  • 深入基于能力的工具路由:如何将工具调用分派到正确的设备
  • 理解重连韧性设计与分布式信任模型

上一章,我们给 Agent 装上了"双手"——浏览器、Shell、搜索引擎等软件层面的工具。但这双手只能触及数字世界。如果 Agent 需要拍一张照片、读一条短信、截一个屏幕呢?

本章的 Node 系统,将 Agent 的触角从虚拟世界延伸到物理世界。

11.1 物理触达的问题

你的 Agent 运行在弗吉尼亚的 VPS 上。你需要它拍摄北京家门口的照片。或者读取 iPhone 上的短信验证码。或者在 MacBook 上截取应用截图。

传统 Agent 框架面对这个需求只能摊手——Agent 的世界止步于服务器的网络边界,就像困在房间里的人,再聪明也出不了门。

11.1.1 为什么这是一个根本性问题

这不只是"功能缺失"——它反映了一个更深层的架构假设问题。几乎所有 Agent 框架都隐含假设 Agent 运行在它需要操作的设备上。LangChain 的工具调用在本地进程中执行。AutoGPT 操作本地文件系统。这个假设在"单机 Agent"场景下是合理的,但它与现实的使用模式根本冲突。

现实是:Agent 需要运行在一个稳定、24/7 在线的环境中(VPS、云服务器)以保持持久连接和定时任务的可靠性。但它需要操作的设备——手机、笔记本、智能家居——分布在不同的物理位置,随时可能离线。Agent 的计算基座和操作目标是物理分离的。

OpenClaw 采取了截然不同的立场:Agent 的世界应该延伸到运营者信任的每一台设备。 Node 系统通过安全配对的 Android、iOS 和 macOS 伴侣应用实现这一点,将手机和笔记本变成 Agent 的远程传感器与执行器——眼睛、耳朵、双手,一应俱全。

11.1.2 三个核心工程挑战

但"连接手机到 Agent"听起来简单,直到你面对工程现实。三个问题接踵而至:

信任建立问题:网关运行在 VPS 上,手机在用户口袋里,两者素未谋面。在没有共享信任根的前提下,如何确保"连接的确实是主人的手机"而不是攻击者的设备?传统的证书基础设施(CA、TLS 证书)需要预先配置,对消费者设备不可行。

工具路由问题:三台设备同时连接——Android 手机、iPhone 和 MacBook。Agent 调用 camera 时,发给谁?如果首选设备断线了呢?如果两台设备都有相机但分辨率不同呢?路由决策不是简单的"有就发",而是一个多因素优化问题

韧性问题:手机进电梯信号中断、切换 Wi-Fi 网络、进入飞行模式。这些不是异常情况——它们是移动设备的常态。Node 系统必须在"设备随时可能消失"的假设下正确工作。

Node 系统的本质,是一个伪装成移动应用功能的分布式系统问题。揭开友好的 QR 码外衣,里面藏着的是每个分布式系统都要面对的老龙:共识、分区容忍和网络的永恒不可靠。

🔥 深度洞察:从数字世界到物理世界的鸿沟

Node 系统解决的问题,本质上是**控制论(Cybernetics)**的核心命题——如何让一个信息处理系统影响物理世界?Norbert Wiener 在 1948 年就指出:任何控制系统都需要三个要素——传感器(感知)、处理器(决策)和执行器(行动),以及连接它们的反馈回路。OpenClaw 的 Node 系统是这个理论的完美实例:手机相机是传感器,Gateway 中的 Agent 是处理器,手机的通知/快捷指令是执行器,WebSocket 是反馈回路。这不是"连接手机"这么简单——这是赋予数字 Agent 物理存在感的哲学跨越。一个只存在于服务器上的 Agent 是一个"纯精神存在";通过 Node 系统,它获得了"身体"——虽然这个身体分散在多台设备上,但它能看(相机)、能听(麦克风)、能触(通知推送)。

11.2 架构设计:网关作为编排中心

11.2.1 架构概览

图 11-1:Node 系统架构

每台连接的设备广播其能力——相机、GPS、通知、剪贴板、屏幕截取。网关的工具路由层使用这些能力声明将工具调用定向到适当的设备。Agent 调用 camera 工具时,网关检查哪些连接节点具有相机能力并据此路由。

关键概念:基于能力的工具路由(Capability-Based Tool Routing) Node 系统不通过设备名称路由工具调用,而是通过设备声明的"能力"(如相机、GPS、剪贴板)进行匹配。Agent 调用 camera 工具时,系统自动查找具有相机能力的在线设备,无需知道具体是哪台手机。这种设计使得设备可以随时加入或离开,系统自动适应。

关键设计决策:Agent 从不直接与设备交互。它通过与浏览器自动化或命令执行相同的接口调用工具。Node 系统在工具级别是透明的——完美应用的适配器模式。这意味着所有工具系统的安全策略(第10章的七层管线)自动适用于设备工具,无需任何额外配置。

11.2.2 为什么不用 P2P 架构?

一个自然的替代方案是 P2P(点对点)架构——让设备之间直接通信,网关只负责协调发现。这种方案有明显的优势:降低网关负载、减少单点故障。

但 OpenClaw 选择了网关中心化架构,原因是三个关键约束:

  1. NAT 穿透:大多数移动设备在运营商级 NAT 之后,P2P 连接需要打洞(STUN/TURN),增加了延迟和复杂性,且不保证成功。网关作为公网可达的中介自然解决了这个问题。

  2. 安全审计:所有工具调用经过网关,形成单一审计点——系统记录每次设备操作。P2P 架构中,审计日志分散在各设备上,难以集中管理。

  3. 策略执行:工具策略管线在网关中执行。设备调用一旦绕过网关,策略管线就形同虚设。P2P 架构需要将策略逻辑复制到每台设备上,增加了攻击面。

⚠️ 注意:Node 设备的配对凭证(pairing token)具有时效性。如果设备长时间断线后重连失败,通常需要重新执行配对流程。建议在部署多设备场景时,记录每台设备的配对状态,并配置断线告警。

💡 最佳实践:在多设备场景中,为每台设备分配明确的角色标签(如 office-camerahome-macbook),而非依赖自动路由。这样 Agent 可以通过 node=office-camera 精确指定目标设备,避免工具调用被路由到意外的设备。

权衡:中心化架构意味着网关是单点瓶颈——所有设备通信都经过它。对于个人或小团队使用场景(OpenClaw 的主要目标用户),这个瓶颈不是问题。但如果未来需要支持企业级规模(数千台设备),可能需要引入网关集群或混合架构。

11.3 配对协议:从无到信任

Node 系统中最有趣的工程挑战不是设备能力本身——而是在没有先验关系的服务器和手机之间建立信任。

11.3.1 威胁模型

在设计配对协议之前,必须明确防什么:

  • 中间人攻击:攻击者拦截配对流程,连接自己的设备到目标网关。
  • 重放攻击:攻击者捕获并重放合法的配对请求。
  • 暴力猜测:攻击者枚举配对码直到找到有效的。
  • 长期密钥泄露:配对完成后,第三方窃取信任令牌。

11.3.2 质询-响应协议

OpenClaw 的配对协议(src/pairing/)使用通过短时配对码中介的质询-响应机制:

  1. 码生成:网关生成随机配对码(包含网关地址、配对密钥和有效期信息),编码为 QR 码或文本码。码的有效期 5 分钟——足够用户完成扫描,但短到暴力猜测不可行。
  2. 码传递:通过物理渠道传递(用户眼睛看到 QR 码,手机相机扫描)。这一步天然抗远程攻击——攻击者必须物理接近才能截获码。
  3. 质询请求:移动应用扫描码后,向网关发送附带设备信息的质询请求。
  4. 验证:网关确认配对码未过期、未曾使用,生成长期信任令牌。
  5. 令牌下发:信任令牌返回给设备,后续所有通信使用此令牌认证。

数字化的配对流程示例

用一个具体的数字化示例走完整个流程,帮助你建立直觉:

步骤1: 网关生成配对码
  ├─ 生成 pairSecret(32字节随机数),设定 300 秒过期
  └─ 构造 URL: openclaw://pair?host=...&secret=...&exp=... → 编码为 QR 码

步骤2: 用户扫码 → 手机获得 host、secret、exp

步骤3: 手机 POST /pair/challenge
  { "pairSecret": "a7f3c9...", "deviceId": "android-pixel7-x8k2", "capabilities": [...] }

步骤4: 网关验证
  ├─ 检查 secret 匹配 ✅ → 未过期 ✅ → 未使用 ✅
  ├─ 标记已使用(防重放)
  └─ 生成 trustToken = HMAC-SHA256(serverKey, deviceId + timestamp)

步骤5: 返回 { trustToken, gatewayId, wsEndpoint }

后续: 手机用 trustToken 建立 WebSocket 长连接
  Authorization: Bearer b9e4d2...f7a8

注意几个关键的安全属性:

  • 配对码 5 分钟过期:即使攻击者事后获得码也无法使用
  • 一次性使用:码在步骤4后即失效,防止重放攻击
  • 物理渠道传递:攻击者必须在场才能看到 QR 码
  • 信任令牌独立于配对码:长期令牌使用不同的密码学材料生成,即使配对码泄露也不影响已建立的信任

11.3.3 为什么选择短时码而不是证书?

替代方案 A:预共享密钥(PSK)。运营者将密钥手动输入到手机配置中。简单但痛苦——输入一个 32 字符的密钥在手机上是折磨。

替代方案 B:证书基础设施。网关作为 CA 签发客户端证书。安全性强,但需要理解 PKI 的运营者才能配置——这不是大多数 OpenClaw 用户的画像。

替代方案 C:配对码(最终选择)。类似蓝牙配对——简短、临时、通过物理渠道传递。安全性适中(依赖物理渠道安全和码的短时有效期),但极其简单。

选择配对码的根本原因是受众。OpenClaw 的目标用户是技术人员(他们理解安全概念),但不一定是安全专家(他们不想管理证书链)。配对码在"足够安全"和"足够简单"之间取得了正确的平衡。

11.3.4 逐设备权限模型

信任令牌的权限在配对时根据设备类型和运营者配置确定。Android 手机可能获得相机和 GPS 权限但不包括文件系统访问。macOS 伴侣可能获得截屏和剪贴板权限。

这种能力白名单模型(而非默认允许一切)确保:

  1. 即使设备遭到入侵,攻击者也只能访问该设备明确获授的能力。
  2. 运营者对"这台设备能做什么"有清晰的、可审计的认知。
  3. 新能力默认不可用——必须显式授予。

11.4 传输层:为什么选择 WebSocket?

11.4.1 候选方案分析

在选择网关与设备之间的传输协议时,OpenClaw 评估了四种方案:

HTTP 轮询:设备定期向网关请求"有没有给我的指令?"。实现最简单,但延迟高(取决于轮询间隔)、浪费带宽(大多数轮询返回空)、耗电(对移动设备致命)。

HTTP 长轮询:请求挂起直到有数据或超时。比普通轮询好,但每次都需要重新建立连接,TCP 握手和 TLS 协商的开销在移动网络上显著。

Server-Sent Events(SSE):单向流——服务器推送事件到客户端。只能单向,设备不能主动向网关发送消息(如能力变更通知)。

WebSocket:全双工连接。建立一次后,双方可以随时发送消息,无需重新握手。

11.4.2 WebSocket 的决定性优势

OpenClaw 选择 WebSocket,基于四个决定性因素:

基于 VitePress 构建