# AI Universal Control Plane **架构白皮书 v1.0** > 让本地 AI 大脑统一控制所有可连接设备:Windows / Linux / macOS / Android / PLC / SCADA / HMI / 嵌入式硬件 / 网络设备 / 智能家居 | 字段 | 内容 | |---|---| | 版本 | v1.0 | | 日期 | 2026-04-25 | | 作者 | Bookworm Architecture Team | | 状态 | Draft - 待 PoC 验证 | | 目标读者 | 系统架构师 / 工程主管 / IT 决策层 | --- ## 1. 执行摘要 本架构以**本地 Bookworm 智能助手 (Claude Opus 4.7) 为决策大脑**, 通过分层 MCP (Model Context Protocol) 协议栈, 将企业范围内一切可连接设备统一为 AI 可调用的"工具集"。 **核心价值主张**: - **统一意图入口**:用户用自然语言指挥任何设备 ("把三号车间 12 号产线降速到 60%") - **跨设备编排**:一句指令触发跨 N 台设备的工作流 ("早班巡检:读 PLC + 摄像头识别 + 写报表 + 发邮件") - **协议无关**:底层封装 OPC UA / Modbus / SSH / ADB / SCPI / MQTT 等异构协议, AI 调用层完全统一 - **本地优先**:核心 AI 运行在本地, 数据不必上云, 适合工业场景的合规与延迟要求 **关键设计决策**: 1. 决策层 vs 执行层物理分离 → 大脑可单点部署, 边缘代理无状态 2. MCP 作为唯一适配协议 → 新设备接入只需写 MCP server, 无需改大脑 3. 设备注册表是知识层核心 → 不是 IP 列表, 是"能力图谱" 4. 安全联锁硬件优先 → AI 永远不能绕过物理急停 **预期成本与收益(中型工厂场景, 30 设备)**: | 项目 | 成本 | |---|---| | 一次性开发 | 60 人日 | | Edge Agent 部署 | 30 设备 × 1 小时 | | 服务器硬件 (本地大脑) | 1 台中端 PC, ~12k RMB | | 每月运维 | 约 0.5 人日 | | 节省工时 | 估算 40-60% 重复运维操作自动化 | --- ## 2. 愿景与范围 ### 2.1 愿景 > "让企业里每一台可连接设备, 都成为本地 AI 大脑的可调用器官; 用户只需用自然语言表达意图, AI 自动决策、跨设备协作、安全执行。" ### 2.2 范围(v1.0 覆盖设备类别) | 类别 | 子类 | 协议/接入方式 | |---|---|---| | **桌面/服务器** | Windows | OpenSSH + Edge Agent (UIAutomation/COM) | | | Linux | SSH + Edge Agent (D-Bus/CLI) | | | macOS | SSH + Edge Agent (AppleScript/Accessibility) | | **移动设备** | **Android** | ADB / Scrcpy / Termux + MCP / UIAutomator2 | | | iOS | XCUITest (越狱) / Shortcuts API (受限) | | **工业控制** | PLC | OPC UA / Modbus / S7 / EtherNet-IP | | | SCADA | OPC UA / SQL / REST API | | | HMI | RustDesk + Vision / 厂商 API | | **嵌入式/电子** | ESP32/Arduino/STM32 | USB Serial / MQTT / WiFi | | | Raspberry Pi/Jetson | SSH + Edge Agent | | | FPGA / JTAG | OpenOCD CLI | | | PCB 测试仪器 | SCPI over LXI / GPIB / VISA | | **网络设备** | 路由器/交换机 | SSH + NETCONF / SNMP | | | 防火墙/AP | RESTCONF / 厂商 API | | **智能家居/IoT** | Matter / Thread | python-matter-server | | | Zigbee | Home Assistant + MQTT | | | Z-Wave | zwave-js-server | | **音视频** | 摄像头/NVR | RTSP / ONVIF | | | 麦克风/扬声器 | Edge Agent (本地 OS API) | ### 2.3 非目标(v1.0 不包含) - ❌ 替代 SCADA / DCS / MES 等专业平台 - ❌ 实时控制(< 10ms 周期, 留给 PLC 自身) - ❌ 安全关键执行器的自主决策(医疗 / 化工功能安全 SIL3+) - ❌ 多 AI 模型联邦学习(v2.0 考虑) --- ## 3. 设计原则 ### P1. 大脑唯一, 边缘无状态 决策只在本机大脑发生; Edge Agent 只是 API gateway, 重启后零状态恢复。 ### P2. 协议归一为 MCP 所有设备能力通过 MCP server 暴露; AI 看到的永远是统一的 "tool" 接口, 不感知底层是 SSH 还是 ADB 还是 Modbus。 ### P3. 能力优先于地址 设备注册表索引"能力"而非 IP; 用户说"读温度", AI 自动找有 `read_temperature` 能力的设备。 ### P4. 安全联锁硬件化 写入操作分级 (READ_ONLY / SOFT_PARAM / HARD_ACTION); HARD_ACTION 必须双因子 + 物理钥匙开关同时满足。 ### P5. 失败显式可见 MCP 调用必须返回结构化结果 + 时间戳; AI 不允许"猜测"未确认的状态; 错误必须带可执行的修复建议。 ### P6. 增量部署 新设备接入不影响已有设备; 单台 Edge Agent 故障不影响其他设备控制。 ### P7. 审计强制 每次 AI 调用 → 设备执行的链路必须可溯源 (traceId 贯穿); HARD_ACTION 全量录像或日志归档至少 90 天。 --- ## 4. 系统架构 ### 4.1 总体分层 ``` ╔══════════════════════════════════════════════════════════════╗ ║ L5: 用户交互层 (User Layer) ║ ║ 自然语言 / 语音 / 仪表盘 / Slack / 微信 / Web UI ║ ╚══════════════════════════════════════════════════════════════╝ ↕ ╔══════════════════════════════════════════════════════════════╗ ║ L4: 大脑层 (Brain Layer) ║ ║ ┌─────────────────────────────────────────────────────┐ ║ ║ │ Claude Opus 4.7 + Bookworm Skills + Agents │ ║ ║ ├─────────────────────────────────────────────────────┤ ║ ║ │ 设备注册表 (Device Registry) │ ║ ║ │ 能力图谱 (Capability Graph) │ ║ ║ │ 操作策略 (Policy Engine) │ ║ ║ │ 审计日志 (Audit Log) │ ║ ║ └─────────────────────────────────────────────────────┘ ║ ╚══════════════════════════════════════════════════════════════╝ ↕ ╔══════════════════════════════════════════════════════════════╗ ║ L3: 适配层 (Adapter Layer) ║ ║ ┌─────────────────────────────────────────────────────┐ ║ ║ │ MCP Server Cluster (本地) │ ║ ║ │ ├─ ssh-mcp - 通用 SSH 通道 │ ║ ║ │ ├─ adb-mcp - Android 控制 │ ║ ║ │ ├─ opcua-mcp - 工业控制 │ ║ ║ │ ├─ modbus-mcp - PLC/仪表 │ ║ ║ │ ├─ scpi-mcp - 测试仪器 │ ║ ║ │ ├─ mqtt-mcp - IoT/消息总线 │ ║ ║ │ ├─ vision-mcp - 视觉识别 │ ║ ║ │ └─ ... │ ║ ║ └─────────────────────────────────────────────────────┘ ║ ╚══════════════════════════════════════════════════════════════╝ ↕ ╔══════════════════════════════════════════════════════════════╗ ║ L2: 传输层 (Transport Layer) ║ ║ Tailscale (mesh VPN) / WireGuard / MQTT Broker ║ ║ TLS 1.3 / mTLS 双向证书 / Vault 凭证管理 ║ ╚══════════════════════════════════════════════════════════════╝ ↕ ╔══════════════════════════════════════════════════════════════╗ ║ L1: 边缘层 (Edge Layer) ║ ║ 每台被控设备本地运行的 Edge Agent / 协议端点 ║ ║ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ║ ║ │ Win Agent│ │Linux Agt │ │macOS Agt │ │Android Tx│ ║ ║ └──────────┘ └──────────┘ └──────────┘ └──────────┘ ║ ║ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ║ ║ │ PLC OPCUA│ │ HMI VNC │ │ESP32 MQTT│ │Scope SCPI│ ║ ║ └──────────┘ └──────────┘ └──────────┘ └──────────┘ ║ ╚══════════════════════════════════════════════════════════════╝ ↕ ╔══════════════════════════════════════════════════════════════╗ ║ L0: 物理层 (Physical Layer) ║ ║ 工业以太网 / WiFi / 蓝牙 / 串口 / 现场总线 / 蜂窝 ║ ║ ★ 物理急停按钮 / 安全 PLC / 联锁硬件 ║ ╚══════════════════════════════════════════════════════════════╝ ``` ### 4.2 关键架构图:单次指令的端到端链路 ``` [用户] │ "看下三号车间温度并截屏存档" ▼ [L5: Claude Code 终端] │ ▼ [L4: Bookworm 大脑] │ 1. 意图解析 → 需要 read_temperature + screenshot │ 2. 查注册表 → device:line-12 (PLC), device:hmi-3 (Win) │ 3. 策略检查 → READ_ONLY 操作, 直接放行 │ 4. 编排 → 并行调用 [opcua.read, win.screenshot] ▼ [L3: MCP Servers] │ opcua-mcp.read_node(line-12, ns=2;s=Temp) │ ssh-mcp.exec(hmi-3, screenshot.ps1) ▼ [L2: Tailscale Mesh] │ 加密 + NAT 穿透 ▼ [L1: Edge Layer] │ PLC line-12 ←→ OPC UA endpoint │ Windows hmi-3 ←→ Edge Agent ▼ [结果聚合] │ Temperature: 78.3°C │ Screenshot: \\storage\archive\2026-04-25-1830.png ▼ [L4 → L5] 返回用户 + 写入 Audit Log ``` --- ## 5. 设备分类与接入方案 ### 5.1 桌面/服务器类 #### Windows | 能力 | 实现 | |---|---| | Shell 命令 | OpenSSH Server + PowerShell | | UI 自动化 | pywinauto / FlaUI / windows-mcp | | COM 对象 (Office) | mcp-com-server | | 屏幕截图 | Edge Agent (GDI+) | | 文件操作 | SSH/SFTP | | 服务管理 | sc.exe / Get-Service | **关键坑**: SSH 默认 Session 0 看不到 GUI → 必须用任务计划在用户登录会话起 Edge Agent (端口 8901, 仅 Tailscale 网内访问)。 #### Linux | 能力 | 实现 | |---|---| | Shell | SSH (默认) | | GUI 自动化 | xdotool + scrot (X11) / ydotool (Wayland) | | 系统服务 | systemd / D-Bus | | 容器编排 | Docker / Podman API | #### macOS | 能力 | 实现 | |---|---| | Shell | SSH (启用 Remote Login) | | UI 自动化 | AppleScript / osascript / Accessibility API | | 屏幕截图 | screencapture | **关键坑**: 13.0+ 屏幕录制权限弹窗 → 首次手动授权 + 系统设置永久允许。 ### 5.2 移动设备类 #### Android(重点扩展) Android 接入有 **3 种模式**, 按权限/能力递增: ##### 模式 A:ADB 网络模式(最常用)⭐ 适用:开发机、工程机、测试机、商用 Android 设备 ``` [本机 adb-mcp] ──Tailscale──> [Android 设备 ADB-over-WiFi:5555] ``` **配置步骤**: ```bash # Android 11+ 无线调试 (设备本地一次性) 设置 → 开发者选项 → 无线调试 → 配对(显示 IP:PORT + 配对码) # 本机 PC 配对一次 adb pair : adb connect :5555 ``` **MCP 能力包装**: ```python # mcp-servers/android-adb/server.py from mcp import Server import subprocess mcp = Server('android-adb') @mcp.tool() def list_devices() -> list: """列出所有 ADB 连接的 Android 设备""" out = subprocess.check_output(['adb', 'devices', '-l']) return parse_devices(out) @mcp.tool() def shell(device: str, cmd: str) -> str: """在指定 Android 设备上执行 shell 命令""" return subprocess.check_output(['adb', '-s', device, 'shell', cmd]).decode() @mcp.tool() def install_apk(device: str, apk_path: str) -> bool: """安装 APK""" subprocess.run(['adb', '-s', device, 'install', '-r', apk_path], check=True) return True @mcp.tool() def tap(device: str, x: int, y: int): """模拟点击屏幕坐标""" subprocess.run(['adb', '-s', device, 'shell', 'input', 'tap', str(x), str(y)]) @mcp.tool() def type_text(device: str, text: str): """输入文本""" subprocess.run(['adb', '-s', device, 'shell', 'input', 'text', text]) @mcp.tool() def screenshot(device: str, save_path: str) -> str: """截屏保存到本机""" subprocess.run(['adb', '-s', device, 'exec-out', 'screencap', '-p'], stdout=open(save_path, 'wb')) return save_path @mcp.tool() def screen_record(device: str, seconds: int, save_path: str) -> str: """录屏""" subprocess.run(['adb', '-s', device, 'shell', 'screenrecord', f'--time-limit={seconds}', '/sdcard/_rec.mp4']) subprocess.run(['adb', '-s', device, 'pull', '/sdcard/_rec.mp4', save_path]) return save_path @mcp.tool() def logcat(device: str, tag: str = None, lines: int = 100) -> str: """读取应用日志""" args = ['adb', '-s', device, 'logcat', '-d', '-t', str(lines)] if tag: args += ['-s', tag] return subprocess.check_output(args).decode() @mcp.tool() def list_packages(device: str) -> list: """列出已安装应用""" out = subprocess.check_output(['adb', '-s', device, 'shell', 'pm', 'list', 'packages']) return [l.replace('package:', '') for l in out.decode().splitlines()] ``` ##### 模式 B:Termux + Node MCP(深度集成) 适用:自有/管理的 Android 设备, 想跑 7×24 后台 Agent ``` [本机大脑] ──SSH──> [Android Termux SSH 服务器] ──> [本地 Node MCP Server + Termux:API] ``` **优势**: - 真正的 Linux 环境(apt 装 nodejs/python/git) - Termux:API 访问 Android 原生 API(摄像头、传感器、通知、TTS、振动、剪贴板、定位、电池) - Termux:Boot 开机自启 - 无需 root, 但有 root 后能力更强 **部署清单**: ```bash # 1. F-Droid 装 Termux + Termux:API + Termux:Boot (官方 Play 商店版本已停止维护) # 2. 在 Termux 里: pkg install openssh nodejs-lts python git sshd # 启动 SSH passwd # 设密码 (或 ~/.ssh/authorized_keys) ifconfig # 查 IP # 3. 装 Bookworm Edge Agent git clone cd bookworm-edge && npm install node server.js --port 8901 ``` ##### 模式 C:Scrcpy + Vision(视觉兜底) 适用:无法装 Termux/无 ADB 权限的设备 (受控企业设备 / 用户私设) ``` [本机 askui-vision] ──看──> [本地 Scrcpy Viewer 窗口] ──镜像──> [Android 屏幕] [本机 input 转发] ──发──> [Scrcpy Viewer] ──控制──> [Android] ``` ##### Android 特殊场景能力 | 场景 | 实现 | |---|---| | 自动化运营手机店 / 群控 | adb-mcp 多设备并发 | | 应用测试 / 自动化 QA | uiautomator2 + MCP wrapper | | 移动设备 IT 资产管理 | 批量 logcat / 安装策略 | | 工业 PDA / 扫码枪 | Termux + 串口透传 | | 家庭老人手机远程辅助 | scrcpy + 视觉 + TTS | | 抓包分析 | tcpdump (root) / Frida | #### iOS(受限支持) | 能力 | 实现 | |---|---| | 屏幕镜像 | QuickTime / scrcpy-iOS | | 自动化 | XCUITest (开发模式) / Shortcuts URL Scheme | | 越狱设备 | Frida + SSH | ### 5.3 工业控制类 #### PLC 接入决策树 ``` PLC 品牌 / 系列? ├── 西门子 S7-1200/1500 → 优先 OPC UA (内置), 备选 S7 协议 (snap7) ├── 西门子 S7-300/400 → S7 协议 (snap7) ├── 罗克韦尔 ControlLogix → EtherNet/IP (pycomm3) 或 OPC UA (FactoryTalk Linx) ├── 三菱 FX/Q → MC 协议 (pymcprotocol) ├── 欧姆龙 CJ/CP → FINS (omron-fins-py) ├── 汇川 H5U/AC800 → Modbus TCP └── 其他 → 优先 Modbus TCP, 备选厂商 SDK ``` #### SCADA 接入 | 平台 | 接入方式 | |---|---| | 西门子 WinCC Unified | OPC UA + REST API | | 罗克韦尔 FactoryTalk | OPC UA via Linx Gateway | | Inductive Ignition | 内置 MQTT / OPC UA / REST | | 国产组态王 / 力控 | OPC DA → KEPServerEX 转 OPC UA | | Wonderware InTouch | OPC UA + SQL 后端 | ### 5.4 嵌入式/电子类 | 设备 | 接入 | |---|---| | ESP32 / ESP8266 | MQTT (PubSubClient) + OTA | | Arduino | USB Serial (pyserial) | | STM32 | UART / SWD (OpenOCD) | | Raspberry Pi | SSH + Edge Agent | | Jetson | SSH + Edge Agent + GPU APIs | | FPGA (Xilinx/Lattice) | OpenOCD JTAG / 厂商 SDK | | **PCB ATE 测试仪器** | SCPI over LXI/USB (pyvisa) | | 万用表/示波器/电源 | SCPI (Keysight/Rigol/Siglent 通用) | ### 5.5 网络与基础设施 | 设备 | 协议 | |---|---| | Cisco / H3C / 华为路由交换 | SSH + NETCONF/YANG | | 防火墙 (FortiGate/PaloAlto) | REST API | | Wi-Fi AP (Unifi/Aruba) | REST API + SSH | | UPS | SNMP | | 监控摄像头 | RTSP + ONVIF | | NAS (Synology/QNAP) | SSH + REST API | --- ## 6. 核心组件详细设计 ### 6.1 大脑 (Brain) 组件 #### 6.1.1 设备注册表 (Device Registry) **存储**: SQLite (单机) / PostgreSQL (集群) **访问**: 大脑启动时全量加载, 内存索引 + 文件 watch 热更新 **Schema**: ```yaml # devices.yaml - id: prod-line-12-plc # 全局唯一 ID display_name: 一号车间 12 号产线 PLC type: plc vendor: siemens model: S7-1500 # 网络位置 (可选, 仅当大脑直连时) network: transport: tailscale # tailscale / lan / mqtt-broker endpoint: opc.tcp://prod-line-12-plc.tail-net:4840 # 边缘代理 (可选, 仅当通过 Edge Agent 间接访问) via_agent: edge-floor1-gw # 引用另一个设备 ID # 协议描述 protocol: type: opc-ua security: SignAndEncrypt auth: cert cert_id: vault://plc-floor1 # 能力清单 (能力图谱的核心) capabilities: - id: read_temperature type: read address: ns=2;s=DB10.Temp datatype: float unit: celsius tags: [temperature, monitor] - id: set_speed type: write address: ns=2;s=DB10.SetSpeed datatype: int unit: rpm range: [0, 3000] safety_level: SOFT_PARAM # READ_ONLY / SOFT_PARAM / HARD_ACTION - id: emergency_stop type: write address: ns=2;s=DB10.EStop datatype: bool safety_level: HARD_ACTION requires: [user_confirm, physical_key, two_engineers] # 元信息 meta: location: 车间 1 楼 A 区 owner: 设备部-张工 criticality: HIGH last_audit: 2026-04-20 sop_link: https://wiki/SOP-line12 ``` #### 6.1.2 能力图谱 (Capability Graph) 将设备注册表升级为可查询的语义图: ``` 能力 "read_temperature" ├── 设备: prod-line-12-plc, lab-thermo-01, hvac-floor1 ├── 同义词: 测温度, get temp, 温度读数 └── 上下文: 工业产线 / 实验室 / 楼宇 意图 "三号车间温度异常" ├── 触发设备: workshop-3 范围内所有有 temperature 能力的 ├── 关联 SOP: 报警确认 → 通知班长 → 写日志 └── 安全级别: 仅 READ ``` 实现:用 embedding 向量化 + 关键词倒排索引混合检索, AI 调用前先查图谱, 召回 Top-K 设备 + 能力候选。 #### 6.1.3 策略引擎 (Policy Engine) **职责**: 决定一个 AI 调用是否被允许执行 ```yaml # policies.yaml - name: read-only-anytime match: capability_type: read effect: ALLOW - name: soft-param-business-hours match: capability_safety: SOFT_PARAM conditions: - time_window: "09:00-18:00 weekdays" - user_role: ["operator", "engineer"] effect: ALLOW audit: REQUIRED - name: hard-action-strict match: capability_safety: HARD_ACTION conditions: - user_confirm: true # AI 不能自动执行 - physical_key_present: true # 物理钥匙开关 - dual_approval: ["engineer", "supervisor"] - blackout_period: NOT_IN # 不在停产/检修禁令期 effect: ALLOW audit: VIDEO_RECORD # 全程录像 - name: production-line-blackout match: device_id_prefix: "prod-line-" conditions: - blackout_until: 2026-05-01 # 大检修期间禁所有写入 effect: DENY_WRITE ``` #### 6.1.4 审计日志 (Audit Log) 每次 MCP 调用追加一行 JSON Lines, traceId 贯穿大脑 → 适配 → 边缘: ```jsonl {"ts":"2026-04-25T10:30:15Z","traceId":"abc123","actor":"user:janson","intent":"读三号车间温度","tools":["opcua-mcp.read"],"devices":["prod-line-12-plc"],"result":"ok","latency_ms":47} {"ts":"2026-04-25T10:31:02Z","traceId":"def456","actor":"user:janson","intent":"将12号线降速到60%","tools":["opcua-mcp.write"],"devices":["prod-line-12-plc"],"safety":"SOFT_PARAM","approved_by":"engineer:wang","result":"ok","old_value":2400,"new_value":1800} ``` 90 天热存储 (SQLite/Loki) + 1 年冷归档 (S3/MinIO)。 ### 6.2 适配层 (MCP Servers) #### 6.2.1 标准化 MCP Server 模板 每个 MCP server 应提供: - `list_capabilities()` - 自描述支持的能力 - `health_check()` - 探活 - `execute(capability_id, params)` - 统一执行入口 - 结构化错误码 (E001-DEVICE_OFFLINE, E002-PERMISSION_DENIED, ...) #### 6.2.2 必需的 MCP Server 清单 | 优先级 | MCP Server | 实现栈 | 工作量 | |---|---|---|---| | P0 | ssh-mcp | Node + ssh2 | 复用现成 | | P0 | adb-mcp (Android) | Python + adb cli | 1 周 | | P0 | opcua-mcp | Python + asyncua | 2 周 | | P0 | modbus-mcp | Python + pymodbus | 1 周 | | P0 | edge-agent (Win/Linux/macOS) | Node + 平台 API | 3 周 | | P1 | scpi-mcp | Python + pyvisa | 1 周 | | P1 | mqtt-mcp | Python + paho-mqtt | 3 天 | | P1 | vision-mcp | 已有 askui-vision | 复用 | | P2 | s7-mcp | Python + snap7 | 1 周 | | P2 | snmp-mcp | Python + pysnmp | 1 周 | | P2 | matter-mcp | python-matter-server | 1 周 | | P3 | bacnet-mcp | BAC0 | 1 周 | | P3 | netconf-mcp | ncclient | 1 周 | ### 6.3 传输层 #### 6.3.1 Tailscale Mesh VPN **职责**: 跨网络可达性 + 端到端加密 + 零信任 ACL **关键能力**: - MagicDNS: 用 hostname 替代 IP - Tailscale ACLs: 谁能访问谁、走什么端口、什么协议 - Subnet Router: Edge Agent 可作为子网网关, 暴露下游 PLC - Tailscale SSH: 内置 SSH (无需密码/密钥) **ACL 示例**: ```hujson { "groups": { "group:brain": ["leesu@example.com"], "group:engineer": ["janson@example.com", "wang@example.com"], "group:operator": ["op-1@example.com"], }, "tagOwners": { "tag:plc": ["group:engineer"], "tag:edge-win": ["group:engineer"], "tag:edge-android":["group:engineer"], }, "acls": [ // 大脑可以访问所有设备 { "action": "accept", "src": ["group:brain"], "dst": ["*:*"] }, // 工程师可访问 PLC + Win 边缘 (业务时间) { "action": "accept", "src": ["group:engineer"], "dst": ["tag:plc:4840", "tag:edge-win:8901"] }, // 操作员只读 PLC { "action": "accept", "src": ["group:operator"], "dst": ["tag:plc:4840"] } ] } ``` #### 6.3.2 MQTT Broker (异步消息) **用途**: ESP32 / 现场仪表 / 异步事件流 **部署**: Mosquitto (轻量) 或 EMQX (集群) ### 6.4 边缘层 (Edge Agent) #### 6.4.1 通用 Edge Agent 架构 跨平台单二进制 (Node.js + pkg), 组件: ``` ┌────────────────────────────────────────┐ │ Edge Agent (Node.js) │ ├────────────────────────────────────────┤ │ HTTP Server :8901 (本机) │ │ ├─ /mcp - MCP 协议端点 │ │ ├─ /health - 健康检查 │ │ ├─ /metrics - Prometheus 指标 │ │ └─ /version │ ├────────────────────────────────────────┤ │ Capability Modules │ │ ├─ shell.js - 执行命令 │ │ ├─ filesystem.js- 文件操作 │ │ ├─ ui-automation.js - GUI 控制 │ │ ├─ screenshot.js │ │ ├─ process.js - 进程管理 │ │ └─ platform-specific/ │ │ ├─ windows-com.js │ │ ├─ linux-dbus.js │ │ └─ macos-applescript.js │ ├────────────────────────────────────────┤ │ Auth & Audit │ │ ├─ mTLS (Tailscale 内信任) │ │ └─ 本地 audit.log │ └────────────────────────────────────────┘ ``` #### 6.4.2 Edge Agent 部署形态 | 平台 | 形态 | 启动方式 | |---|---|---| | Windows | EXE / MSI | 任务计划在用户登录会话起 | | Linux | systemd service | 默认 root, GUI 任务用 user systemd | | macOS | launchd plist | LaunchAgent (用户) / LaunchDaemon (系统) | | Android (Termux) | shell script | Termux:Boot 开机自启 | | 树莓派 | Docker / systemd | 推荐 Docker 便于升级 | --- ## 7. 数据流与控制流 ### 7.1 同步控制流 (用户实时指令) ``` 用户 → 大脑 → 策略检查 → MCP → Edge/协议 → 设备 (NLU) (Policy) (Tailscale) ↓ 用户 ← 大脑 ← 结果聚合 ← MCP ← Edge ← 设备响应 ``` **目标延迟**: P95 < 2 秒(不含 LLM 推理) ### 7.2 异步事件流 (设备主动上报) ``` 设备 → MQTT Broker → 事件订阅服务 → 规则引擎 → 大脑触发 (传感器/告警) (Bookworm Hook) (匹配) (主动通知用户/动作) ``` **用途**: 温度超限自动报警、PLC 心跳监控、设备异常事件 ### 7.3 定时巡检流 ``` Cron / Scheduler → 大脑加载 SOP Skill → 并行调多个设备 → 聚合报表 → 推送 (每小时/班次) (/inspect-line) (OPC UA 读 N 个点) (邮件/钉钉) ``` --- ## 8. 安全架构 ### 8.1 威胁模型 (STRIDE) | 威胁 | 场景 | 缓解 | |---|---|---| | **S**poofing | 假冒大脑发指令 | mTLS 双向证书 + Tailscale 设备认证 | | **T**ampering | 篡改 MCP 调用 | TLS 完整性 + Audit Log 链式 hash | | **R**epudiation | 否认操作 | 审计日志 + HARD_ACTION 录像 | | **I**nformation Disclosure | 设备数据泄露 | 端到端加密 + 字段级脱敏 | | **D**enial of Service | 被攻击瘫痪 | Rate limit + 隔离区 + 物理冗余 | | **E**levation of Privilege | 越权写入 | Policy Engine 强制 + 物理钥匙 | ### 8.2 凭证管理 **禁止**: - ❌ 硬编码密码 / 证书 / API Key 到代码或配置 - ❌ 凭证明文写日志 **强制**: - ✅ 所有凭证存 Vault / 1Password / DPAPI - ✅ MCP server 启动时按需拉取, 内存暂存 - ✅ 90 天轮转 - ✅ 凭证使用全部审计 ### 8.3 操作分级矩阵 | 级别 | 示例 | AI 自主权 | 强制要求 | |---|---|---|---| | **READ_ONLY** | 读温度、查日志、截屏 | 完全自主 | 仅审计 | | **SOFT_PARAM** | 调速度、改设定值、启停应用 | 需要用户口头 OK | 双人 + 审计 + 业务时间 | | **HARD_ACTION** | 急停、合分闸、删数据库、刷固件 | **永远不自动** | 物理钥匙 + 双工程师 + 录像 + 上级审批 | | **DESTRUCTIVE** | 格式化磁盘、删除生产数据 | **完全禁用** | 不实现 / 走专门工单 | ### 8.4 网络隔离区 工业现场推荐 Purdue Model 分层: ``` Level 5: 企业网 (办公 + 大脑可放此层 DMZ) Level 4: 业务网 (MES / ERP) ─── 防火墙 ──────────────────────────── Level 3: 工厂控制网 (SCADA Server / Historian) Level 2: 监控网 (HMI / 工程师站) Level 1: 现场控制网 (PLC / DCS) Level 0: 物理设备 (传感器 / 执行器 / 电机) ``` 大脑放 L4-L5; Edge Agent 跨 L3-L4 (单向数据二极管或严格防火墙); L0-L2 严格隔离, AI 永远不直接接触。 --- ## 9. 部署模型 ### 9.1 单机/家庭场景 (1-5 设备) ``` [本机大脑 Win/Mac/Linux PC] ├─ Claude Code + 全部 MCP servers ├─ Tailscale 节点 └─ 本地 SQLite Registry [1-3 台被控设备] └─ Edge Agent + Tailscale ``` 部署 1 天内完成。 ### 9.2 中型企业 (10-50 设备) ``` [中央服务器] ├─ Bookworm 大脑 (1 台中端 PC, 32GB RAM) ├─ MCP Cluster (Docker Compose) ├─ PostgreSQL (Registry + Audit) ├─ MQTT Broker (Mosquitto) └─ Tailscale Coordination Server (自托管 Headscale) [每楼层/车间一台 Edge Gateway] ├─ 工业网关或 NUC ├─ Edge Agent + Subnet Router └─ 桥接 PLC/HMI (无法直接装 Tailscale 的设备) [终端被控设备] └─ Edge Agent (Win/Linux/macOS/Android) ``` 部署 2-4 周。 ### 9.3 大型企业 (100+ 设备 / 多分公司) ``` [云端协调层 (可选)] └─ Tailscale / Headscale / 内部 PKI [每分公司一套大脑 + 集群] ├─ 主备 (HA) 大脑节点 ├─ Kubernetes 跑 MCP cluster ├─ TimeSeries DB (InfluxDB) ├─ Grafana 可视化 └─ ELK / Loki 日志 [联邦层] └─ 跨分公司知识共享 (设备 SOP / 故障案例库) ``` 部署 3-6 个月。 --- ## 10. 技术选型 ### 10.1 核心技术栈 | 层 | 选型 | 理由 | |---|---|---| | AI 大脑 | Claude Opus 4.7 | 工具调用 + 长上下文 + 推理质量 | | 编排框架 | Bookworm Skills + Agents | 已有基础设施 | | 协议 | MCP (Model Context Protocol) | 业界标准化, 工具发现 + 流式 | | 网络 | Tailscale (商业) / Headscale (自托管) | NAT 穿透 + 零信任 + 易用 | | MCP SDK 语言 | Python (主) + Node.js (辅) | Python 生态最全 (工业/AI) | | Edge Agent 语言 | Node.js (跨平台单二进制) | pkg 打包 + 性能 + 平台 API 全 | | 注册表 | SQLite → PostgreSQL | 单机起步, 集群升级 | | 时序数据 | InfluxDB / TimescaleDB | 工业数据优化 | | 消息总线 | MQTT (Mosquitto/EMQX) | 工业事实标准 | | 凭证管理 | HashiCorp Vault / 1Password CLI | 企业级 | | 容器化 | Docker Compose (中型) / K8s (大型) | 标准化部署 | | 可视化 | Grafana | 通用 | | 日志 | Loki + Promtail | 轻量 | ### 10.2 依赖清单 (PyPI / npm) **Python (适配层主语言)**: ``` asyncua # OPC UA pymodbus # Modbus python-snap7 # 西门子 S7 pycomm3 # 罗克韦尔 EtherNet/IP pyvisa # SCPI 仪器 paho-mqtt # MQTT pysnmp # SNMP ncclient # NETCONF uiautomator2 # Android UI pywinauto # Windows UI mcp-server-sdk # MCP 协议 ``` **Node.js (Edge Agent + 部分 MCP)**: ``` @modelcontextprotocol/sdk ssh2 # SSH 客户端 node-windows # Windows 服务/COM @nut-tree/nut-js # 跨平台 GUI 控制 ``` --- ## 11. 路线图 ### Phase 0: 立项 + PoC (Week 1-2) - [ ] 选定 1 台 Win + 1 台 Android + 1 个 PLC (或模拟器) 作试点 - [ ] 部署 Tailscale 三节点 - [ ] 实现 ssh-mcp / adb-mcp / opcua-mcp 三个 MCP server - [ ] 设备注册表 v0.1 (3 条 YAML) - [ ] **验证目标**: 用 Bookworm 一句话: "读 PLC 温度, 在 Win 上弹窗显示, 同时推送到 Android 通知栏" **交付**: PoC Demo 视频 + 架构验证报告 ### Phase 1: 基础平台 (Week 3-8) - [ ] Edge Agent 跨平台二进制 (Win/Linux/macOS) - [ ] Android Termux Edge Agent - [ ] 设备注册表 SQLite + 基础 Web UI - [ ] 策略引擎 v1.0 (READ/WRITE 二级) - [ ] 审计日志 + Grafana 可视化 - [ ] Bookworm Skill `/device` 统一入口 - [ ] CI/CD: Edge Agent 一键部署脚本 **交付**: 内部可用 v1.0, 5-10 台设备 ### Phase 2: 工业接入 (Week 9-16) - [ ] OPC UA / Modbus / S7 三协议生产级 MCP - [ ] SCADA 集成 (至少 1 个主流平台) - [ ] HMI 视觉控制 (RustDesk + askui-vision) - [ ] 操作分级策略 (SOFT_PARAM + HARD_ACTION) - [ ] 双因子审批 + 物理钥匙集成 - [ ] 工业现场试点 (1 个车间) **交付**: 工厂级 v1.5, 真实生产数据接入 ### Phase 3: 智能化 (Week 17-26) - [ ] 能力图谱 + 语义检索 - [ ] 跨设备 Workflow 编排 Skill - [ ] 异常自动诊断 (日志 + 视觉 + 协议联合) - [ ] 自然语言 SOP (用户说"上次故障怎么处理的?" → 自动回溯) - [ ] 角色权限 (Operator/Engineer/Manager) **交付**: AI 运维助手 v2.0 ### Phase 4: 规模化 (Month 7-12) - [ ] 多分公司部署架构 - [ ] 跨地点知识联邦 - [ ] 时序数据 + 趋势预测 - [ ] 故障案例库自学习 - [ ] SLA 监控 + 灾备 **交付**: 企业级生产平台 v3.0 --- ## 12. 风险与缓解 | 风险 | 影响 | 概率 | 缓解措施 | |---|---|---|---| | AI 误操作伤人/毁设备 | 极高 | 中 | HARD_ACTION 必须物理钥匙 + 双人 + 录像; 安全 PLC 独立硬件 | | 单点大脑故障 | 高 | 中 | HA 双节点 + 设备本地降级 (PLC 自身逻辑保底) | | 网络中断 | 高 | 高 | Edge Agent 本地缓存最近指令; MQTT 断线重连 | | 凭证泄露 | 高 | 低 | Vault + 90 天轮转 + Tailscale 双重网络隔离 | | 协议厂商私有变更 | 中 | 中 | OPC UA 优先, 私有协议作为备份 | | 工控网攻击面扩大 | 高 | 低 | 严格 Purdue 分层 + 单向数据二极管 | | AI 幻觉决策 | 中 | 中 | 强制 MCP 调用返回真实数据时间戳, 决策前必读 | | 部署/运维复杂度 | 中 | 高 | Edge Agent 一键安装脚本; 可观测性建设 | | 人员抗拒 | 中 | 高 | 从只读巡检场景切入, 让员工先看到价值 | | 合规审计 | 中 | 中 | 全程审计 + 法务前置评估 | --- ## 13. 成功标准 (KPI) ### 12 个月目标 | 维度 | KPI | 目标值 | |---|---|---| | 覆盖率 | 接入设备数 | ≥ 30 | | 协议种类 | 支持的设备协议 | ≥ 8 种 | | 自动化率 | 重复任务自动化比例 | ≥ 50% | | 响应延迟 | P95 端到端控制延迟 | < 2 秒 | | 可用性 | 大脑 + 核心 MCP 月可用 | ≥ 99.5% | | 安全 | HARD_ACTION 误执行 | = 0 | | 审计 | 操作可追溯率 | = 100% | | ROI | 节省人工时 / 月 | ≥ 80 小时 | --- ## 14. 附录 ### A. 参考实现 (开源) - **MCP 协议规范**: https://modelcontextprotocol.io - **Tailscale**: https://tailscale.com / https://github.com/juanfont/headscale - **OPC UA Python**: https://github.com/FreeOpcUa/opcua-asyncio - **PyVISA**: https://github.com/pyvisa/pyvisa - **Termux**: https://termux.dev / https://f-droid.org/packages/com.termux/ - **uiautomator2**: https://github.com/openatx/uiautomator2 - **scrcpy**: https://github.com/Genymobile/scrcpy - **askui-vision**: 已集成于 Bookworm ### B. 关键术语表 | 术语 | 定义 | |---|---| | MCP | Model Context Protocol, AI 工具调用标准协议 | | Edge Agent | 部署在被控设备本地的轻量代理 | | Capability | 设备暴露的能力单元 (如 read_temperature) | | Policy Engine | 决定 AI 调用是否被允许执行的规则引擎 | | Tailscale | 基于 WireGuard 的零信任 mesh VPN | | ADB | Android Debug Bridge, Android 控制协议 | | OPC UA | OPC Unified Architecture, 工业互联协议标准 | | SCPI | Standard Commands for Programmable Instruments, 测试仪器协议 | | Purdue Model | 工业控制网络分层参考模型 | ### C. 第一台设备接入清单 (Quick Start) #### 接入 Windows 设备 - [ ] 装 Tailscale + 加入 tailnet - [ ] 装 OpenSSH Server + 推送公钥 - [ ] 装 Edge Agent + 任务计划用户会话启动 - [ ] 大脑端 ~/.claude.json 注册 MCP - [ ] 测试: 远程启动 Notepad #### 接入 Android 设备 - [ ] 装 Tailscale (Play 商店) + 登录 - [ ] 启用无线调试 + adb pair / 或装 Termux + sshd - [ ] 大脑端配置 adb-mcp 或 ssh-mcp - [ ] 测试: 截图 + 推送通知 #### 接入西门子 PLC - [ ] 在 TIA Portal 启用 OPC UA Server - [ ] 配置证书 + 命名空间 - [ ] 大脑端配置 opcua-mcp + endpoint - [ ] 测试: 读 1 个 DB 变量 --- ## 15. 修订记录 | 版本 | 日期 | 作者 | 变更摘要 | |---|---|---|---| | v1.0 | 2026-04-25 | Bookworm Architecture | 初版, 含 Win/Linux/macOS/Android/工控/嵌入式/网络/IoT 全覆盖 | --- > **下一步**: 阅毕本白皮书后, 建议召开 1 小时 Kick-off 会议, 选定 Phase 0 的 3 台试点设备, 启动 PoC。