# AI Universal Control Plane **架构白皮书 v1.1 (Hardened + Localized)** > 让本地 AI 大脑统一控制所有可连接设备:Windows / Linux / macOS / Android / PLC / 机器人 / SCADA / HMI / 嵌入式硬件 / 网络设备 / 摄像头 > > 国内合规友好 · 多 LLM 厂商支持 · 国产硬件全覆盖 | 字段 | 内容 | |---|---| | 版本 | v1.1.1 | | 日期 | 2026-04-25 | | 状态 | Draft v1.1.1 — 整合多专家评审反馈 + LLM 旗舰更新 | | 主要修订 | P0 安全修复 + 国内品牌全覆盖 + 多 LLM 抽象层 + 范围收敛 + 工作量重估 + LLM 旗舰锁版本 | | 上版评分 | v1.0 综合 56.6 (C-) → v1.1 复审 ~75 (B/B-) | | 目标评分 | ≥ 85 / 100 (B+) — 仍需补 5 项缺口 | | 适用范围 | 中小制造业 / 工厂 / 仓储 / 实验室 / 自动化集成商 | --- ## 0. v1.0 → v1.1 修订摘要 | 类别 | v1.0 问题 | v1.1 修订 | |---|---|---| | **安全** | mTLS 与 Tailscale 信任矛盾 | Edge Agent 独立 PKI + 大脑 HSM 私钥 | | **安全** | Registry 无签名 (投毒提权) | Ed25519 签名 + 协议反查校验 | | **安全** | Policy Engine 无评估顺序 | deny-overrides + 显式 priority + 静态分析 | | **安全** | emergency_stop API 误调用风险 | 完全硬件化, 软件无写入路径 | | **安全** | HARD_ACTION 三因子 fail-open | 1Hz HMAC 心跳 + fail-closed | | **安全** | adb-mcp / ssh-mcp 命令注入 | 能力白名单 + 参数化模板 | | **安全** | OPC UA 默认 None 端点降级 | strict policy 强制 + Modbus 必走 stunnel | | **架构** | 大脑直连 L1 PLC, 与 Purdue 矛盾 | 大脑只接 L3 中继 (Edge Gateway) | | **架构** | Audit Log 链式 hash 未实现 | Merkle chain + RFC 3161 时间戳 | | **架构** | 大脑 workflow 无持久化 | Saga store + WAL + 重启续跑 | | **范围** | 14 类设备贪多嚼不烂 | v1.x 砍 iOS/Matter/Zigbee/NETCONF, 聚焦工业核心 | | **国产化** | 三菱/欧姆龙未列 P0/P1 | 国产 PLC + 机器人 + HMI + 摄像头全覆盖 | | **AI** | Claude Opus 单点 | LLM Provider Abstraction Layer 支持 12+ 厂商 | | **AI** | 国内合规未论证 | 国内合规独立章节 + 默认本地化部署 | | **工作量** | 60 人日 (低估 3-4 倍) | PoC 60 人日 + 生产 240 人日 拆分 | | **KPI** | "误执行 = 0" 不可证伪 | 改为误执行率 < 1e-6 + MTBF 监控 | --- ## 1. 执行摘要 ### 1.1 价值主张 本架构以**本地 AI 大脑为决策中枢**, 通过分层 MCP 协议栈将企业范围内一切可连接设备统一为 AI 可调用的"工具集"。 **核心特性 (v1.1)**: - **统一意图入口**: 自然语言指挥任何设备 - **多 LLM 双轨**: 12+ 厂商热切换, 国内外合规自由 - **国产硬件优先**: 西门子 / 汇川 / 信捷 / 仙工 / 海康等全覆盖 - **本地优先**: 核心数据不出境, 适合等保 2.0 / 工业信息安全合规 - **协议无关**: AI 调用层完全统一, 底层封装异构协议 - **生产级安全**: 7 层纵深防御 + Purdue 严格分层 + 硬件化急停 ### 1.2 目标场景 | 场景 | 示例 | |---|---| | 工厂运维 | "三号车间巡检, 异常推班长" | | 仓储自动化 | "调度仙工 AGV 把 A 区货架搬到出库口" | | 实验室 | "示波器抓波形, 多通道判 PASS/FAIL" | | IT 运维 | "全公司 50 台 Win 终端检查补丁" | | 多机协作 | "AGV 到位 → PLC 启动加工 → 视觉检测 → 入库" | ### 1.3 不适用场景 (v1.x 明确不做) - ❌ 实时控制 (< 10ms, PLC 自身) - ❌ 安全关键自主决策 (SIL3+) - ❌ 替代专业 SCADA / DCS / MES - ❌ 大规模消费级 IoT (Matter / Zigbee 智能家居) - ❌ iOS 自动化 (XCUITest 限制) ### 1.4 成本估算 (重估后) **中型工厂 30 设备**: | 项目 | 工作量/成本 | |---|---| | Phase 0 PoC (3 设备) | 60 人日 | | Phase 1 生产基础平台 | 120 人日 | | Phase 2 工业接入 (30 设备) | 240 人日 | | 服务器硬件 (本地大脑) | 1 台 + 1 台备 (HA), 约 25k RMB | | LLM 调用费 (Qwen-Max 主) | 约 2-4k RMB / 月 | | Tailscale 商业版 (or Headscale 自托管) | 0-2k RMB / 月 | | 每月运维 | 0.5-1 人日 | **预期收益**: 巡检/告警/换班/报表等重复任务自动化率 50-70%, 故障 MTTR 从 30 分钟降至 5 分钟以下。 --- ## 2. 范围与设备覆盖 ### 2.1 v1.x 设备覆盖矩阵 (聚焦工业核心) | 类别 | 子类 | v1.1 优先级 | |---|---|---| | **桌面/服务器** | Windows / Linux / macOS | P0 | | **移动设备** | Android (ADB / Termux) | P0 | | **PLC** | 西门子 / 汇川 / 信捷 / 三菱 / 欧姆龙 / 台达 | P0 | | **机器人控制器** | 仙工 SEER / 埃斯顿 / 节卡 / ABB / 库卡 | P1 | | **SCADA** | 组态王 / 力控 / WinCC / Ignition | P1 | | **HMI** | 威纶通 / 昆仑通态 / 西门子 | P1 | | **嵌入式** | ESP32 / 树莓派 / Jetson | P1 | | **测试仪器** | 示波器/电源/万用表 (SCPI) | P2 | | **摄像头** | 海康威视 / 大华 / ONVIF 通用 | P1 | | **网络设备** | 华为 / H3C / Cisco (SSH + REST) | P2 | | **扫码/RFID** | 新大陆 / 霍尼韦尔 (USB HID + 串口) | P2 | | ~~iOS~~ | — | **v1.x 不做** | | ~~Matter / Zigbee~~ | — | **v1.x 不做** | | ~~Z-Wave / KNX~~ | — | **v1.x 不做** | | ~~SCPI / NETCONF / SNMP~~ | — | **v2.x 视需求** | ### 2.2 国产 PLC 详细覆盖 (新增) | 品牌 | 主流型号 | 国内份额 | 协议 | 实现优先级 | |---|---|---|---|---| | **西门子** | S7-1200/1500, S7-200 SMART | ~35% | OPC UA / S7 (snap7) | P0 | | **汇川** | H5U / AC800 / Easy320 / AM600 | ~20% | Modbus TCP / EtherCAT | P0 | | **信捷** | XD / XL / XC / XG | ~8% | Modbus TCP / RTU + XNet 私有 | P0 | | **三菱** | FX5U / Q / iQ-R / iQ-F | ~15% | MC 协议 (pymcprotocol) | P0 | | **欧姆龙** | NX/NJ / CJ2 / CP1 | ~10% | FINS (omron-fins-py) | P1 | | **台达** | AS / AH / DVP | ~6% | Modbus TCP / DMCNET | P1 | | **罗克韦尔** | ControlLogix / CompactLogix | ~3% | EtherNet/IP (pycomm3) | P1 | | **永宏** | B1 / FBS | ~1% | Modbus / 私有 | P2 | | **和利时** | LM / G3 | DCS 类 | Modbus / 私有 | P2 | **信捷 PLC 接入要点**: ```python # mcp-servers/xinje-plc/server.py # 信捷主流 XDH/XLH 系列, 标准 Modbus TCP 端口 502 # 私有 XNet 协议 (USB / 串口) 通过厂商 SDK 包装 import pymodbus.client from mcp import Server mcp = Server('xinje-plc') @mcp.tool() def read_d_register(host: str, addr: int, count: int = 1) -> list[int]: """读 D 数据寄存器 (16-bit)""" c = pymodbus.client.ModbusTcpClient(host, port=502) c.connect() rr = c.read_holding_registers(addr, count, slave=1) return rr.registers if not rr.isError() else None @mcp.tool() def write_d_register(host: str, addr: int, value: int) -> bool: """写 D 数据寄存器 (受 Policy Engine 拦截)""" c = pymodbus.client.ModbusTcpClient(host, port=502) c.connect() rr = c.write_register(addr, value, slave=1) return not rr.isError() @mcp.tool() def read_m_coil(host: str, addr: int, count: int = 1) -> list[bool]: """读 M 中间继电器 (位)""" # ... Modbus M 区映射 ``` ### 2.3 机器人控制器覆盖 (新增章节) 机器人控制是 v1.1 重要扩展, 重点覆盖国产 AGV/AMR/工业机器人。 #### 2.3.1 移动机器人 (AGV/AMR) | 品牌 | 控制器型号 | 协议接入 | 实现优先级 | |---|---|---|---| | **仙工 SEER** | SRC-2000 / SRC-880 / SRC-3000 | HTTP REST + WebSocket + Robokit | P0 | | **极智嘉 Geek+** | RMS 调度系统 | REST API | P1 | | **海康机器人** | RCS 调度系统 | REST API | P1 | | **国自 GREEN** | RoboShop | REST + MQTT | P2 | | **快仓** | 自研调度 | 厂商 SDK | P2 | | **嘉腾** | 自研 | 厂商 SDK | P2 | **仙工 SEER 接入示例 (P0 重点实现)**: 仙工 SRC 控制器是国内 AGV/AMR 占有率领先的产品, 协议特点: - HTTP API 端口 1448 (查询) / 1448 (推送) - WebSocket 实时定位与状态 - JSON 命令包: 移动到点 / 旋转 / 充电 / 货架升降 ```python # mcp-servers/seer-amr/server.py import requests, websocket, json from mcp import Server mcp = Server('seer-amr') @mcp.tool() def get_robot_status(host: str) -> dict: """查询机器人状态: 位置 / 电量 / 任务 / 故障""" r = requests.post(f'http://{host}:19204/api/v1/robot/status', json={"reqType": 1100}, timeout=3) return r.json() @mcp.tool() def move_to_station(host: str, station_id: str, task_id: str = None) -> dict: """派送 AGV 到指定站点 (受 SOFT_PARAM 策略, 业务时间内允许)""" payload = { "reqType": 3001, "stationId": station_id, "taskId": task_id or generate_task_id(), } r = requests.post(f'http://{host}:19206/api/v1/task/move', json=payload) return r.json() @mcp.tool() def emergency_stop_request(host: str) -> dict: """请求软急停 (HARD_ACTION, 仅作为辅助; 真正的物理急停由车载硬件按钮)""" # 注意: 此接口仅触发软停, 物理急停按钮硬接线不经过此 API payload = {"reqType": 4001} r = requests.post(f'http://{host}:19207/api/v1/safety/estop', json=payload) return r.json() @mcp.tool() def lift_pallet(host: str, action: str) -> dict: """货架升降 (action: up / down)""" payload = {"reqType": 6001, "action": action} r = requests.post(f'http://{host}:19206/api/v1/lift/control', json=payload) return r.json() ``` #### 2.3.2 工业机器人臂 | 品牌 | 类型 | 协议 | 实现优先级 | |---|---|---|---| | **埃斯顿 ESTUN** | 6 轴工业机器人 | EtherCAT + Modbus + 厂商 SDK | P1 | | **新松 SIASUN** | 6 轴 + SCARA | Profinet + 厂商 SDK | P2 | | **节卡 JAKA** | 协作机器人 | TCP/IP JSON + Modbus | P1 | | **越疆 DOBOT** | 协作 + SCARA | TCP/IP + Python SDK | P1 | | **大族 HSR** | 6 轴 + SCARA | Modbus + 厂商 | P2 | | **遨博 AUBO** | 协作机器人 | ROS / TCP/IP | P2 | | **ABB** | IRB 系列 | RAPID / RobotWare API | P1 | | **库卡 KUKA** | KR 系列 | KRL / mxAutomation | P1 | | **发那科 FANUC** | M / R 系列 | Karel / FOCAS | P2 | | **安川 YASKAWA** | MOTOMAN | MotoCom / Ethernet/IP | P2 | **节卡 JAKA 协作机器人接入** (代表性, P1): ```python # JAKA 提供 jakapy SDK, 包装为 MCP from jakapy import jkrc from mcp import Server mcp = Server('jaka-cobot') @mcp.tool() def get_joint_position(ip: str) -> list[float]: """获取关节角度 (rad)""" robot = jkrc.RC(ip) robot.login() _, pos = robot.get_joint_position() robot.logout() return list(pos) @mcp.tool() def linear_move(ip: str, target_xyz_rxyz: list[float], speed: float) -> bool: """笛卡尔空间直线运动 (HARD_ACTION, 必须三因子审批)""" # speed 范围限制 [10, 200] mm/s, 超出拒绝 if not 10 <= speed <= 200: return False # 物理钥匙 + 双工程师在 Policy Engine 已检查, 此处兜底 robot = jkrc.RC(ip) robot.login() robot.linear_move(end_pos=target_xyz_rxyz, move_mode=0, is_block=True, speed=speed) robot.logout() return True ``` ### 2.4 国产 HMI / SCADA 覆盖 | 品牌 | 类型 | 接入 | 优先级 | |---|---|---|---| | **威纶通** | HMI 触摸屏 | Modbus + 厂商上位机协议 | P1 | | **昆仑通态 MCGS** | HMI + SCADA | Modbus + OPC + 私有 | P1 | | **组态王** | SCADA | OPC DA → KEPServerEX 转 OPC UA | P1 | | **力控** | SCADA | OPC + ODBC SQL | P2 | | **WinCC Unified** | 西门子 SCADA | OPC UA + REST | P1 | | **Ignition** | Inductive | 内置 OPC UA + MQTT + REST | P2 | ### 2.5 摄像头 / 视觉系统 | 品牌 | 接入 | 优先级 | |---|---|---| | **海康威视** | ISAPI + ONVIF + RTSP | P1 | | **大华** | DH-SDK + ONVIF + RTSP | P1 | | **宇视** | ONVIF + RTSP | P2 | | **天地伟业** | ONVIF + RTSP | P2 | | **基恩士工业相机** | 厂商 SDK | P2 | ### 2.6 扫码 / 工业 IO | 类别 | 主流国产 | 接入 | |---|---|---| | 扫码枪 | 新大陆 / 民德 / 旗硕 | USB HID + 串口 | | RFID | 远望谷 / 思创 | TCP + 串口 | | 工业平板 | 研华 / 研祥 / 三宝 | Win Edge Agent | --- ## 3. 多 LLM 抽象层 (重大新增) ### 3.1 设计动机 v1.0 单点依赖 Claude Opus 在国内场景不可用 (大陆无法直连 + 数据出境合规)。v1.1 引入 **LLM Provider Abstraction Layer**, 支持 12+ 厂商热切换。 ### 3.2 支持的 LLM 厂商矩阵 (2026-04-25 旗舰快照) > 各厂商均默认接入"当前旗舰", 模型 ID 统一用 `*-latest` 别名, 由 Adapter 在调用时解析为最新具体版本。下表列出截至 2026-04-25 的最新旗舰名称。 | 厂商 | 当前旗舰 (2026-04-25) | 推理特化模型 | 部署 | 工具调用 | 国内合规 | 价位 | |---|---|---|---|---|---|---| | **Anthropic** | Claude Opus 4.7 / Sonnet 4.6 | Opus 4.7 (内置 thinking) | 云 (海外) | ★★★★★ | ❌ 需代理 | 高 | | **OpenAI** | GPT-5 | o4 / o4-mini | 云 (海外) | ★★★★★ | ❌ 需代理 | 高 | | **Google** | Gemini 2.5 Pro / 3.0 | Gemini 2.5 Deep Think | 云 (海外) | ★★★★ | ❌ 需代理 | 中 | | **阿里通义** | Qwen3-Max | Qwen3-Max-Thinking / QwQ | 云 (国内) | ★★★★★ | ✅ | 中 | | **智谱** | GLM-4.6 | GLM-Zero-Air | 云 (国内) | ★★★★ | ✅ | 中 | | **DeepSeek** | DeepSeek-V3.1 | DeepSeek-R1 / R1-0528 | 云 (国内) | ★★★★★ | ✅ | 极低 | | **月之暗面** | Kimi K2 (1T MoE, 256k 上下文) | Kimi K1.5-Thinking | 云 (国内) | ★★★★ | ✅ | 中 | | **百度文心** | ERNIE 4.5 Turbo | ERNIE X1 (推理) | 云 (国内) | ★★★ | ✅ (强合规) | 中 | | **字节豆包** | Doubao-Seed-1.6 / Doubao 1.5 Pro 256k | Doubao-1.5-thinking-pro | 云 (国内) | ★★★★ | ✅ | 低 | | **腾讯混元** | Hunyuan-TurboS | Hunyuan-T1 (推理) | 云 (国内) | ★★★ | ✅ | 中 | | **MiniMax** | MiniMax M1 (1M 上下文) | MiniMax M1-Thinking | 云 (国内) | ★★★★ | ✅ | 中 | | **xAI** | Grok 4 | Grok 4 (内置推理) | 云 (海外) | ★★★★ | ❌ 需代理 | 高 | | **本地** | Qwen3-235B-A22B / DeepSeek-V3.1 / Llama 4 Maverick | DeepSeek-R1-Distill | 本地 (vLLM/Ollama/SGLang) | ★★★★ | ✅ (最合规) | 硬件成本 | **⚠️ 已移除厂商**: - 零一万物 Yi-Lightning: 2025 年底起停止重大更新, 不进入 v1.1 名单 **🆕 新增厂商**: xAI Grok 4 (海外旗舰备选, 长程推理强项) **版本管理策略**: - Adapter 统一使用 `*-latest` 别名调用, 由厂商侧路由到当前旗舰 - 季度复审: 每 90 天扫描各家发布动态, 更新本表与 priority - 锁定开关: 关键工厂场景可在 `llm-providers.yaml` 中显式 `model: qwen3-max-2026-03` 锁版本, 防止厂商悄悄升级导致 tool_call schema 漂移 ### 3.3 LLM Router 架构 ``` ┌────────────────────────────────────────────────────────┐ │ Bookworm 大脑 (Skill / Agent 调用) │ └──────────────┬─────────────────────────────────────────┘ │ 标准化 LLM 请求 (OpenAI 兼容 schema) ▼ ┌────────────────────────────────────────────────────────┐ │ LLM Router (智能路由) │ │ ┌──────────────────────────────────────────────────┐ │ │ │ 1. 路由策略 │ │ │ │ - 按场景: 复杂推理 → Opus/o1/R1 │ │ │ │ 工具调用 → Qwen-Max/GPT-4o │ │ │ │ 批量数据 → DeepSeek (极低价) │ │ │ │ 长上下文 → Kimi (200k+) │ │ │ │ 敏感数据 → 本地 Qwen-72B │ │ │ │ 2. Failover │ │ │ │ 主厂商失败 → 二级 → 三级 │ │ │ │ 3. 限流与配额 │ │ │ │ 4. 成本统计 │ │ │ └──────────────────────────────────────────────────┘ │ └──────┬─────────────────────────────────────────────────┘ │ ├─► Anthropic Adapter (Claude API) ├─► OpenAI Adapter (兼容多家中转) ├─► Qwen Adapter (DashScope) ├─► GLM Adapter (智谱 OpenAI 兼容接口) ├─► DeepSeek Adapter (OpenAI 兼容) ├─► Doubao Adapter (字节) ├─► Wenxin Adapter (百度) ├─► Local Adapter (vLLM / Ollama / SGLang) └─► ... ``` ### 3.4 配置示例 `~/.claude/llm-providers.yaml`: ```yaml providers: # === 国内云 (默认主用, 旗舰模型) === - id: qwen-primary type: qwen endpoint: https://dashscope.aliyuncs.com/api/v1 api_key_ref: vault://qwen/api-key model: qwen3-max-latest # 2026-04 旗舰 priority: 100 enabled: true use_cases: [tool_call, intent_parse, planning] - id: qwen-thinking type: qwen endpoint: https://dashscope.aliyuncs.com/api/v1 api_key_ref: vault://qwen/api-key model: qwen3-max-thinking-latest # 推理特化 priority: 95 enabled: true use_cases: [complex_reasoning, root_cause_analysis] - id: glm-backup type: glm endpoint: https://open.bigmodel.cn/api/paas/v4 api_key_ref: vault://glm/api-key model: glm-4.6 # 2026-04 旗舰 priority: 90 enabled: true use_cases: [tool_call, fallback] - id: deepseek-bulk type: deepseek endpoint: https://api.deepseek.com api_key_ref: vault://deepseek/api-key model: deepseek-chat # 解析为 DeepSeek-V3.1 旗舰 priority: 85 enabled: true use_cases: [batch, summarize, classify] - id: deepseek-reasoner type: deepseek endpoint: https://api.deepseek.com api_key_ref: vault://deepseek/api-key model: deepseek-reasoner # DeepSeek-R1 系列 priority: 88 enabled: true use_cases: [complex_reasoning, debug] - id: kimi-longcontext type: kimi endpoint: https://api.moonshot.cn/v1 api_key_ref: vault://kimi/api-key model: kimi-k2-latest # Kimi K2 (1T MoE, 256k 上下文) priority: 75 enabled: true use_cases: [long_context, sop_review, full_plant_inspection] - id: doubao-fast type: doubao endpoint: https://ark.cn-beijing.volces.com/api/v3 api_key_ref: vault://doubao/api-key model: doubao-seed-1.6 # 2026-04 旗舰 priority: 70 enabled: true use_cases: [tool_call, low_latency_path] - id: minimax-longcontext type: minimax endpoint: https://api.minimax.chat/v1 api_key_ref: vault://minimax/api-key model: minimax-m1 # 1M 上下文 priority: 65 enabled: true use_cases: [extreme_long_context] - id: ernie-compliance type: wenxin endpoint: https://qianfan.baidubce.com/v2 api_key_ref: vault://ernie/api-key model: ernie-4.5-turbo # 强合规场景 priority: 60 enabled: true use_cases: [strict_compliance, government_facing] - id: hunyuan-backup type: hunyuan endpoint: https://api.hunyuan.cloud.tencent.com/v1 api_key_ref: vault://hunyuan/api-key model: hunyuan-turbos # 旗舰 priority: 55 enabled: false # 备份, 默认 off use_cases: [extra_fallback] # === 海外云 (需代理, 默认禁用) === - id: claude-overseas type: anthropic endpoint: https://api.anthropic.com api_key_ref: vault://claude/api-key model: claude-opus-4-7 # 2026-04 旗舰 priority: 110 enabled: false use_cases: [complex_reasoning, security_audit] requires_proxy: true - id: gpt5-overseas type: openai endpoint: https://api.openai.com/v1 api_key_ref: vault://openai/api-key model: gpt-5 # 2026-04 旗舰 priority: 108 enabled: false use_cases: [tool_call, multimodal] requires_proxy: true - id: o4-overseas type: openai endpoint: https://api.openai.com/v1 api_key_ref: vault://openai/api-key model: o4 # 推理特化 priority: 105 enabled: false use_cases: [deep_reasoning, math] requires_proxy: true - id: gemini-overseas type: google endpoint: https://generativelanguage.googleapis.com/v1 api_key_ref: vault://gemini/api-key model: gemini-2.5-pro # 2026-04 旗舰 priority: 100 enabled: false use_cases: [multimodal, vision] requires_proxy: true - id: grok-overseas type: xai endpoint: https://api.x.ai/v1 api_key_ref: vault://grok/api-key model: grok-4 # 2026-04 旗舰 priority: 98 enabled: false use_cases: [reasoning, realtime_web] requires_proxy: true # === 本地兜底 (敏感数据 / 离线) === - id: local-qwen3 type: openai_compat endpoint: http://localhost:8000/v1 api_key_ref: noauth model: Qwen3-235B-A22B # 旗舰开源 (vLLM 部署, 4×A100/H100) priority: 50 enabled: true use_cases: [sensitive, offline_fallback, hard_action_decision] - id: local-deepseek type: openai_compat endpoint: http://localhost:8001/v1 api_key_ref: noauth model: DeepSeek-V3.1 # 备用本地 (8×H100 推荐) priority: 48 enabled: false use_cases: [sensitive_complex_reasoning] routing: # 默认路由: 国产旗舰 → 本地兜底 default_chain: [qwen-primary, glm-backup, deepseek-bulk, local-qwen3] # 按场景特化 by_use_case: complex_reasoning: [qwen-thinking, deepseek-reasoner, claude-overseas] long_context: [kimi-longcontext, minimax-longcontext, qwen-primary] batch: [deepseek-bulk, doubao-fast] sensitive: [local-qwen3, local-deepseek] # 敏感数据强制本地 multimodal: [qwen-primary, gemini-overseas] # 视觉多模态 strict_compliance: [ernie-compliance, local-qwen3] # 按设备域路由 (工业场景关键 — 防止高敏出境) by_device_safety: HARD_ACTION: [local-qwen3, qwen-thinking] # 高危必须本地优先 SOFT_PARAM: [qwen-primary, glm-backup] READ_ONLY: [deepseek-bulk, doubao-fast] # 大量读用最便宜的 failover: max_retries: 3 backoff_ms: [200, 1000, 5000] circuit_breaker: open_threshold: 5 # 连续 5 次失败开闸 cool_down: 300s # 5 分钟冷却 (修复 v1.1 复审 N2) half_open_probe: 30s cost_control: daily_budget_usd: 50 alert_threshold: 0.8 # HARD_ACTION 专属预算池 (修复 v1.1 复审 N2) hard_action_budget_usd: 10 # 独立预算, 主预算耗尽不影响 hard_action_fallback: local-qwen3 # 即使该池耗尽, 强制走本地 # 主预算耗尽行为 on_budget_exhausted: READ_ONLY: deny SOFT_PARAM: deny HARD_ACTION: route_to_local # 永不 fail-closed ``` **模型版本管理 (新增)**: ```yaml # llm-version-registry.yaml — 季度复审锁版本 schema_version: "2026.04" # Adapter 内部把 *-latest 解析为以下具体版本, 锁定 schema 一致性 resolved_versions: qwen3-max-latest: qwen3-max-2026-03 qwen3-max-thinking-latest: qwen3-max-thinking-2026-04 glm-4.6: glm-4.6-2026-02 deepseek-chat: deepseek-v3.1-2026-03 deepseek-reasoner: deepseek-r1-0528 kimi-k2-latest: kimi-k2-instruct-0905 doubao-seed-1.6: doubao-seed-1.6-250415 minimax-m1: minimax-m1-80k ernie-4.5-turbo: ernie-4.5-turbo-2026-01 hunyuan-turbos: hunyuan-turbos-2026-03 claude-opus-4-7: claude-opus-4-7-20260301 gpt-5: gpt-5-2025-08-07 o4: o4-2026-01 gemini-2.5-pro: gemini-2.5-pro-preview-04-25 grok-4: grok-4-0709 review_cycle: 90d last_reviewed: 2026-04-25 next_review: 2026-07-25 ``` ### 3.5 LLM Adapter 标准接口 所有适配器实现统一接口: ```typescript interface LLMAdapter { id: string; capabilities: { tool_use: boolean; streaming: boolean; max_context: number; supports_vision: boolean; }; chat(req: { messages: Message[]; tools?: ToolDef[]; temperature?: number; max_tokens?: number; }): Promise<{ content: string; tool_calls?: ToolCall[]; usage: { prompt_tokens, completion_tokens, cost_usd }; latency_ms: number; model_id: string; // 实际命中的模型 }>; health_check(): Promise<{ ok: boolean; latency_ms: number }>; } ``` ### 3.6 国内合规章节 #### 数据出境 - 默认全部 LLM 调用走国内厂商 - 敏感设备 (按 Registry `sensitivity: high` 标记) 强制本地或国内云 - 海外 LLM (Claude / GPT-4o) 仅在 `enabled: true` 且场景匹配时启用 - 配置中心提供"全局国内化开关": 一键禁用所有海外厂商 #### 等保 2.0 / 工业信息安全 - 审计日志国内服务器留存 ≥ 6 个月 (满足等保三级要求) - HARD_ACTION 操作必须有用户身份双因子 + 大脑侧 LLM 限制为本地或国内云 - LLM 输入做敏感词预过滤, 防止把工艺秘密发到云端 #### 出境数据评估 - 海外 LLM 调用前自动做出境合规检查 (cipher data classification) - 包含 PII / 工艺参数 / 客户清单 → 自动改路由到本地 --- ## 4. 设计原则 (v1.1) ### P1. 大脑唯一, 边缘无状态, **大脑可恢复** 决策只在大脑发生; Edge Agent 无状态; **大脑 workflow 持久化到 Saga store, 重启后续跑或回滚**。 ### P2. 协议归一为 MCP 所有设备能力通过 MCP server 暴露, AI 调用层完全统一。 ### P3. 能力优先于地址 + **强制澄清** 设备注册表索引"能力", AI 自动发现; **当 Top-1 与 Top-2 候选相似度 < 0.15 时强制让用户选择, 不允许猜测**。 ### P4. 安全联锁硬件优先 写入操作分级 (READ_ONLY / SOFT_PARAM / HARD_ACTION); **HARD_ACTION 物理急停完全硬件化, 软件无写入路径**。 ### P5. 失败显式可见 + **强契约** MCP 调用必须返回结构化结果 + `traceId.measurement_ts`; **AI 输出数值前必须有对应 MCP 调用 traceId, 否则拒绝渲染**。 ### P6. 增量部署 新设备接入不影响已有; 单 Edge Agent 故障不影响其他。 ### P7. 审计强制 + **不可篡改** 每次 AI 调用 → 设备执行链路必须可溯源; **审计日志 Merkle chain + 每小时 RFC 3161 时间戳锚定**。 ### P8. (新增) 默认拒绝 + 显式优先级 策略引擎 deny-overrides 语义; 任何未明确允许的能力默认拒绝; 策略冲突按 priority 仲裁。 ### P9. (新增) 多 LLM 解耦 LLM Provider 通过 Adapter 接入, 支持热切换 + Failover; 业务代码不直接依赖任一厂商。 ### P10. (新增) 国产化优先 设备协议 / 硬件品牌 / LLM / 网络方案在功能等价时优先国产, 提升合规性与议价能力。 --- ## 5. 系统架构 (v1.1) ### 5.1 总体分层 (修订) ``` ╔══════════════════════════════════════════════════════════════╗ ║ L6: 用户交互层 ║ ║ 自然语言 / 语音 / 仪表盘 / 钉钉 / 企微 / Web UI ║ ╚══════════════════════════════════════════════════════════════╝ ↕ ╔══════════════════════════════════════════════════════════════╗ ║ L5: 大脑层 ║ ║ ┌──────────────────────────────────────────────────────┐ ║ ║ │ LLM Router (12+ 厂商, 路由 + Failover + 成本控制) │ ║ ║ │ Bookworm Skills + Agents │ ║ ║ ├──────────────────────────────────────────────────────┤ ║ ║ │ 设备注册表 (Ed25519 签名, GitOps) │ ║ ║ │ 能力图谱 (Margin Gate 强制澄清) │ ║ ║ │ Policy Engine v2 (deny-overrides + priority) │ ║ ║ │ Saga Store (Workflow 持久化 + 重启续跑) │ ║ ║ │ Audit Log (Merkle chain + RFC 3161) │ ║ ║ └──────────────────────────────────────────────────────┘ ║ ╚══════════════════════════════════════════════════════════════╝ ↕ ╔══════════════════════════════════════════════════════════════╗ ║ L4: 适配层 (MCP Cluster) ║ ║ ssh-mcp / adb-mcp / opcua-mcp / modbus-mcp / ║ ║ s7-mcp / mc-protocol-mcp / fins-mcp / ║ ║ xinje-mcp / seer-mcp / jaka-mcp / hikvision-mcp / ║ ║ vision-mcp / mqtt-mcp / weintek-mcp / ... ║ ╚══════════════════════════════════════════════════════════════╝ ↕ ╔══════════════════════════════════════════════════════════════╗ ║ L3: 工厂控制网中继 (新增独立层) ║ ║ Edge Gateway (每车间一台), 大脑只接此层 ║ ║ - SCADA Historian 镜像 ║ ║ - 协议代理 (大脑请求 → 本层校验 → 下行 L2/L1) ║ ║ - 单向数据二极管 / 严格防火墙 ║ ║ - mTLS 独立 PKI (与 Tailscale 解耦) ║ ╚══════════════════════════════════════════════════════════════╝ ↕ ╔══════════════════════════════════════════════════════════════╗ ║ L2: 监控网 ║ ║ HMI / 工程师站 / Edge Agent ║ ╚══════════════════════════════════════════════════════════════╝ ↕ ╔══════════════════════════════════════════════════════════════╗ ║ L1: 现场控制网 ║ ║ PLC / 机器人控制器 / 仪表 (大脑无直连凭证) ║ ╚══════════════════════════════════════════════════════════════╝ ↕ ╔══════════════════════════════════════════════════════════════╗ ║ L0: 物理层 ║ ║ 传感器 / 执行器 / 电机 / **物理急停 (硬接线, 不经软件)** ║ ╚══════════════════════════════════════════════════════════════╝ ``` **关键变更**: 1. 新增 **L3 工厂控制网中继层** (Edge Gateway), 大脑不再直连 L1 2. mTLS 独立于 Tailscale (网络层 vs 应用层认证分离) 3. 物理急停明确标注硬接线, 软件无写路径 ### 5.2 信任域划分 (新增) ``` [Trust Domain A: 大脑] - 唯一可签发 MCP 调用请求 - 私钥存 HSM/TPM [Trust Domain B: Edge Gateway] - 验证大脑签名 - 不持有 PLC 凭证 (大脑携签名包过来) [Trust Domain C: Edge Agent (Win/Linux/Android)] - 仅本机 OS 自动化 - 不直接接触工业设备 [Trust Domain D: 工业设备 (PLC/HMI/机器人)] - 仅信任 Edge Gateway - 物理急停在此域内, 不接入网络 ``` 每个域之间走独立 mTLS, 私钥独立轮转, 互不信任。 --- ## 6. 核心组件详细设计 ### 6.1 设备注册表 v2 (修复 B5) #### 6.1.1 Schema (新增签名 + 协议反查) ```yaml # devices.yaml — 必须 Ed25519 签名 (devices.yaml.sig 同目录) schema_version: "2026.04" - id: prod-line-12-plc display_name: 一号车间 12 号产线 PLC type: plc vendor: siemens model: S7-1500 # 接入方式 (大脑不直连) via_gateway: edge-gw-floor1 protocol: type: opc-ua security: SignAndEncrypt # 强制 policy: Basic256Sha256 # 强制 (拒绝 None) auth: cert cert_id: vault://plc-floor1 # 能力 (启动时协议反查校验) capabilities: - id: read_temperature type: read address: ns=2;s=DB10.Temp datatype: float unit: celsius sensitivity: low - id: set_speed type: write address: ns=2;s=DB10.SetSpeed datatype: int unit: rpm range: [0, 3000] safety_level: SOFT_PARAM sensitivity: medium # HARD_ACTION 类不再有 emergency_stop API capability # 物理急停完全在 L0 硬件层, 不暴露给软件 meta: location: 车间 1 楼 A 区 owner: 设备部-张工 criticality: HIGH last_audit: 2026-04-20 sop_link: https://wiki/SOP-line12 # === 信令 === # devices.yaml 签名: Ed25519 by ops-key (离线生成) # 验证: 大脑启动 + 文件 watch 重载时强制验签 # 任何 safety_level 降级 (HARD→SOFT→READ) 触发硬阻止 + 双工程师审批 ``` #### 6.1.2 协议反查校验 (修复 B5 + 算法 #2) 大脑加载注册表后, 对每个 capability 调用底层协议 introspection: ```python # brain/registry/validator.py async def validate_capability(cap, mcp_client): if cap.protocol == 'opc-ua': # OPC UA Browse 真实属性 node = await mcp_client.browse(cap.address) if cap.type == 'read' and 'CurrentRead' not in node.access_level: raise CapabilityMismatch(f'{cap.id}: declared read but no read access') if cap.type == 'write' and 'CurrentWrite' not in node.access_level: raise CapabilityMismatch(f'{cap.id}: declared write but no write access') if cap.datatype != node.data_type: raise CapabilityMismatch(f'{cap.id}: datatype declared {cap.datatype}, actual {node.data_type}') # Modbus / S7 / FINS 各自反查... cap.last_verified_ts = now() cap.schema_version = registry.schema_version ``` 任何不一致 → capability 标记 `degraded`, AI 路由跳过。 #### 6.1.3 GitOps 流程 (新增) ``` git@registry-repo.git ├── devices/ │ ├── plc/*.yaml │ ├── robot/*.yaml │ └── windows/*.yaml ├── policies/*.yaml └── .github/workflows/ ├── lint.yml # YAML 格式 + schema 校验 ├── policy-check.yml # 策略矩阵静态分析 └── sign.yml # PR merge 后自动签名 + 推送大脑 变更流程: 1. 工程师 PR 改 devices.yaml 2. CI 跑 lint + policy 静态检查 + 协议反查 dry-run 3. 设备部主管 review + 签名 4. merge 后 webhook 通知大脑 pull + 验签 + reload ``` ### 6.2 Policy Engine v2 (修复 B1 + 算法 #3 #6) #### 6.2.1 语义规约 ```yaml # policies.yaml schema_version: "2026.04" # === 全局默认: deny === default_action: DENY # === 评估顺序: deny-overrides + priority === # 1. 收集所有匹配的策略 # 2. 任一 DENY 命中即终止, 立即拒绝 # 3. 仅 ALLOW 命中, 取最高 priority # 4. 平局按字典序 policy.id policies: - id: read-only-anytime priority: 50 match: capability_type: read effect: ALLOW audit: REQUIRED - id: soft-param-business-hours priority: 70 match: capability_safety: SOFT_PARAM conditions: - time_window: tz: Asia/Shanghai # 强制 IANA tz range: "09:00-18:00" weekdays: [MON,TUE,WED,THU,FRI] - user_role_in: [operator, engineer] effect: ALLOW audit: REQUIRED - id: hard-action-strict priority: 90 match: capability_safety: HARD_ACTION conditions: - user_confirm: true # 来自带签名的 UI 通道 - physical_key_heartbeat: # 1Hz HMAC 心跳 tolerance_seconds: 5 - dual_approval: roles: [engineer, supervisor] different_idp: true # 必须不同 IdP nonce_window_minutes: 10 - blackout_period: NOT_IN effect: ALLOW audit: VIDEO_RECORD - id: production-line-blackout priority: 100 # 高于 hard-action-strict match: device_id_prefix: "prod-line-" conditions: - blackout_until: 2026-05-01 effect: DENY # deny-overrides - id: registry-downgrade-block priority: 200 # 最高优先级 match: capability_safety_changed: # 启动时检测到 safety_level 降级 from: [HARD_ACTION, SOFT_PARAM] to: [READ_ONLY] effect: DENY require_dual_approval: true # 解禁需双工程师 - id: combo-soft-param-uplift priority: 95 # 修复 Red #3 match: same_trace_soft_param_count_gte: 3 same_device: true effect: UPLIFT_TO_HARD_ACTION # 链式 SOFT 升格审批 ``` #### 6.2.2 静态分析 (CI 必跑) ```python # tools/policy-static-check.py def check_conflicts(policies): """检测策略对的决议矩阵盲区""" for p1, p2 in combinations(policies, 2): if matches_overlap(p1.match, p2.match): if p1.effect != p2.effect and p1.priority == p2.priority: raise PolicyConflict(f'{p1.id} vs {p2.id}: same priority, conflicting effect') if p1.effect == ALLOW and p2.effect == ALLOW and not deterministic_priority(p1, p2): warn(f'{p1.id} vs {p2.id}: ALLOW collision, audit selection logic') def check_default_deny(policies): """确保 default_action: DENY 存在""" if not has_default_deny(policies): raise PolicyError('Missing default_action: DENY at root') def check_tz_explicit(policies): """所有 time_window 必须带 IANA tz""" for p in policies: for cond in p.conditions or []: if cond.type == 'time_window' and not cond.tz: raise PolicyError(f'{p.id}: time_window missing tz') ``` ### 6.3 安全联锁硬件化 (修复 B6 B7) #### 6.3.1 物理急停的硬件设计 ``` [操作员急停按钮 (常闭触点)] │ ↓ [安全 PLC (SIL3 认证, 与主 PLC 独立)] │ ├──→ 切断主 PLC 输出回路 ├──→ 切断电机伺服驱动器 └──→ 触发声光报警 [主 PLC / 大脑 / Edge Agent] ↓ (无任何写入急停的路径) ↓ 只能"读取急停状态" (单向) ``` **关键约束**: - 急停按钮直接接安全 PLC 数字输入, 不经主 PLC, 更不经网络 - 安全 PLC 输出强制使能信号, 主控失效时输出降为 0 → 设备停机 (fail-safe) - 大脑和 MCP 层只暴露 `read_estop_status()` 能力, 不存在 `trigger_estop` API - 软件层任何 catch 块禁止调用 HARD_ACTION (静态扫描规则) #### 6.3.2 物理钥匙开关心跳协议 ``` [钥匙开关插入] ──┬─ GPIO HIGH (上拉) │ └─ MCU (STM32/ESP32) 每秒发 HMAC 心跳: payload = HMAC_SHA256(key, counter || timestamp || device_id) 每秒 +1 防重放 │ └─→ Edge Gateway 校验心跳 5 秒无心跳 → physical_key_heartbeat = false HMAC 失败 → 立即告警 + DENY ``` 故障模式: - 线缆断 → MCU 失去通信 → 5s timeout → fail-closed - MCU 故障 → 心跳停 → 同上 - HMAC key 泄露 → 轮转 + 撤销 - 钥匙开关物理短路 → 静态电平无 HMAC → 视为攻击, 告警 ### 6.4 Saga Store (修复算法 #5 #13) ```sql -- Saga schema (SQLite WAL + fsync) CREATE TABLE sagas ( id TEXT PRIMARY KEY, -- traceId intent TEXT NOT NULL, actor TEXT NOT NULL, started_at INTEGER NOT NULL, status TEXT NOT NULL, -- pending/running/committed/compensating/failed state JSON NOT NULL, -- 完整执行计划 + 已执行步骤 created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL ); CREATE TABLE saga_steps ( saga_id TEXT NOT NULL, step_index INTEGER NOT NULL, tool_name TEXT NOT NULL, params JSON NOT NULL, inverse_op JSON, -- 补偿操作 status TEXT NOT NULL, -- pending/executing/done/failed/compensated started_at INTEGER, finished_at INTEGER, result JSON, PRIMARY KEY (saga_id, step_index) ); ``` 执行约束: - 每步 pre-commit + post-commit 双 hook - HARD_ACTION 类禁止并行 (单设备单事务) - 大脑重启后扫描 status='running', HARD_ACTION 涉及强制人工确认 - 部分成功的 SOFT_PARAM 走 inverse_op 自动补偿 ### 6.5 审计日志 v2 (修复 W4) ```jsonl {"ts":"2026-04-25T10:30:15.123Z","traceId":"abc123","actor":"user:janson","intent":"读三号车间温度","tools":["opcua-mcp.read"],"devices":["prod-line-12-plc"],"result":"ok","measurement_ts":"2026-04-25T10:30:14.987Z","latency_ms":47,"prev_hash":"e3b0c4...","this_hash":"a591a6..."} ``` 特性: - `prev_hash` 链式: SHA-256(prev_hash || record_body) - 每小时一次 RFC 3161 时间戳 anchor (内部 KMS 或公共 TSA) - 每天导出 anchored Merkle root → 写入只读对象存储 (MinIO + WORM) - Edge Agent 不允许直接写大脑 audit log (只能上报事件) ### 6.6 LLM 工具调用契约 (修复算法 #7) ```python # brain/skill_runtime.py def render_to_user(llm_output: str, audit_log: AuditLog) -> str: """渲染前强制校验数据来源""" # 提取 LLM 输出中的所有数值与设备引用 claims = extract_data_claims(llm_output) # claims = [{'value': 78.3, 'unit': 'C', 'device': 'line-12'}, ...] for claim in claims: # 必须能在本轮 audit log 中找到对应 MCP 调用 matching = audit_log.find_by_trace_and_device( trace_id=current_trace_id(), device=claim.device, tool_pattern=f'*.read*' ) if not matching: raise HallucinationError( f'LLM 声称读到 {claim.value} from {claim.device}, ' f'但本轮 traceId 无对应 MCP 调用' ) # 数据时间戳必须新鲜 (默认 30 秒, 可按 capability 配置) if now() - matching.measurement_ts > claim.staleness_threshold: raise StaleDataError(...) return llm_output # 5% 概率随机重读对比 (质询率) if random() < 0.05: actual = await mcp_client.read(claim.device, claim.address) if abs(actual - claim.value) / claim.value > 0.01: alert('LLM 数据与实际偏差超 1%') ``` ### 6.7 Edge Agent v2 (修复 B2 B4 + Red #4) #### 6.7.1 信任模型重构 ``` [大脑] Private Key in HSM/TPM ↓ 签名 MCP 请求 (含 nonce + timestamp + capability_id) ↓ [Tailscale 加密通道] -- 仅作为传输, 不作为认证依据 ↓ [Edge Gateway / Edge Agent] Verify signature with brain pub key Verify CN/SAN of mTLS cert == "brain-prod" Reject any tailnet traffic NOT from brain CN ``` #### 6.7.2 命令执行 (修复 B4) ```typescript // edge-agent/src/capabilities/shell.ts const ALLOWED_COMMANDS = { 'list-files': { cmd: 'ls', args_template: ['-la', '{path}'] }, 'check-process': { cmd: 'tasklist', args_template: ['/FI', 'IMAGENAME eq {name}'] }, 'screenshot': { cmd: 'screencap', args_template: ['/sdcard/screen.png'] }, // ... }; export async function executeCapability(cap_id: string, params: Record) { const tmpl = ALLOWED_COMMANDS[cap_id]; if (!tmpl) throw new Error(`Unknown capability: ${cap_id}`); // 参数白名单校验, 拒绝任何 shell metachar for (const [k, v] of Object.entries(params)) { if (!/^[a-zA-Z0-9._/\\:-]+$/.test(v)) { throw new Error(`Invalid param ${k}: ${v}`); } } // 渲染参数 (无 shell 解析, execFile 直接传 argv) const args = tmpl.args_template.map(a => a.replace(/\{(\w+)\}/g, (_, k) => params[k] || '')); // execFile 不走 shell, 杜绝注入 return await execFile(tmpl.cmd, args, { timeout: 5000 }); } ``` #### 6.7.3 二进制信任 (修复 Red #4) - Edge Agent 二进制由 Sigstore cosign 签名 - 安装包发布: 公钥固化, 启动时强制验签 (Win Authenticode / Linux dm-verity) - 自动升级走签名 OTA, 失败 fail-closed (旧版本继续跑) - 凭证不进 Edge Agent 内存: - 大脑生成签名 challenge → Edge Agent 转发 → 设备验证签名 → 设备直接响应 - Edge Agent 全程不持有任何工业设备凭证 --- ## 7. 部署模型 (修订) ### 7.1 单机/家庭场景 (1-5 设备) — 简化 ``` [本机大脑 PC] ├─ Bookworm + LLM Router (云 + 本地 fallback) ├─ 全部 MCP servers ├─ Tailscale 节点 └─ SQLite Registry + Audit + Saga [1-3 台被控设备] └─ Edge Agent + Tailscale ``` ### 7.2 中型企业 (10-50 设备) — 标准 ``` [中央服务器 (主+备 HA)] ├─ Bookworm 大脑 ├─ LLM Router → Qwen-Max + GLM + 本地 Qwen-72B ├─ MCP Cluster (Docker Compose) ├─ PostgreSQL (Registry + Audit + Saga) ├─ Mosquitto (MQTT) └─ Headscale (自托管 Tailscale) [每车间一台 Edge Gateway] ├─ 工业网关 (ARM/x86, 防尘工业级) ├─ Edge Agent v2 + 协议代理 ├─ 桥接 PLC/HMI/机器人 (大脑无 L1 直连) └─ 单向数据二极管或严格防火墙 [各 OS 终端] └─ Edge Agent (Win/Linux/macOS/Android) ``` ### 7.3 大型企业 (100+ 设备 / 多分公司) — 联邦 每分公司一套大脑, 联邦层做跨公司知识共享: ``` [云端协调] └─ Headscale + 内部 PKI + Vault HA [分公司大脑 × N] ├─ HA 主备 ├─ K8s 跑 MCP cluster ├─ TimeSeries DB (TDengine 国产 / InfluxDB) └─ Grafana + Loki [联邦层] └─ 跨分公司 SOP 共享 / 故障案例库 ``` --- ## 8. 路线图 (重估后) ### Phase 0: PoC (60 人日, 6-8 周) **目标**: 业务痛点驱动的端到端 Demo, 而非单纯技术验证 **建议场景**: "早晚班自动巡检 1 条产线 + 异常时手机推送 + 操作员语音确认" 涉及: - 1 台西门子 S7-1500 / 汇川 H5U / 信捷 XDH (任选一国产 PLC) - 1 台 Win 工程师站 - 2-3 台 Android 操作员手机 - 1 台仙工 SEER AGV (可选, 加分项) **交付物**: - LLM Router (支持 Qwen + GLM + 本地) - 5 个 MCP server: opcua/modbus/ssh/adb/seer-amr - Edge Gateway 简化版 (单台覆盖整个 PoC) - 设备注册表 v2 (含签名) - Policy Engine v2 (deny-overrides) - 业务 Skill: `/inspect-line` `/notify-foreman` `/voice-confirm` ### Phase 1: 生产基础平台 (120 人日, 3 个月) - Edge Agent 跨平台二进制 (含 cosign 签名 + 自动升级) - Edge Gateway 工业级 (双网卡 + 协议代理) - 设备注册表 GitOps (含 CI 静态分析) - Saga Store + Workflow 持久化 - Audit Log Merkle chain + RFC 3161 - 国产 PLC P0 全套: 西门子 / 汇川 / 信捷 / 三菱 - 仙工 SEER AGV 完整接入 - 海康 / 大华 摄像头 (ONVIF + ISAPI) - HARD_ACTION 硬件化设计 (含安全 PLC + 物理钥匙心跳) - 内部试点 5-10 设备 ### Phase 2: 工业接入 + 30 设备规模 (240 人日, 6 个月) - 国产 PLC P1 补全: 欧姆龙 / 台达 - 工业机器人接入: 节卡 / 越疆 / 埃斯顿 - HMI 接入: 威纶通 / 昆仑通态 - SCADA 桥接: 组态王 (经 KEPServerEX) / WinCC - 边缘 AI 推理 (Qwen2.5-1.5B 处理告警分类, 降低云端依赖) - 多分公司联邦初版 - 工厂级试点 (1-2 个真实工厂) ### Phase 3: 智能化 (12 个月) - 能力图谱语义检索 (embedding + margin gate) - 跨设备 Saga 编排 Skill - 故障自动诊断 (日志 + 视觉 + 协议联合) - 自然语言 SOP 回溯 - 角色权限 (Operator/Engineer/Supervisor/Admin) --- ## 9. KPI (重估) ### 12 个月目标 | 维度 | KPI | v1.0 目标 | v1.1 目标 | |---|---|---|---| | 覆盖率 | 接入设备数 | ≥ 30 | ≥ 30 | | 协议种类 | 工业协议 + 通用 | ≥ 8 | ≥ 12 (含国产) | | LLM 厂商 | 支持的 LLM | 1 | ≥ 5 (主用国产) | | 自动化率 | 重复任务 | ≥ 50% | ≥ 50% | | 性能 (Tool RTT) | P95 工具调用回路 | < 2s | < 500ms | | 性能 (E2E) | P95 含 LLM 推理 | 未拆 | < 8s | | 可用性 | 大脑 + 核心 MCP | 99.5% | 99.5% | | 安全 | HARD_ACTION 误执行率 | =0 (不可证伪) | < 1e-6/次 + MTBF >365d | | 安全 | 高危 prompt injection 检出率 | — | ≥ 95% | | 审计 | 操作可追溯率 | 100% | 100% + 不可篡改证明 | | 合规 | 数据出境 | — | 高敏数据出境率 = 0% | | ROI | 节省人工时 / 月 | ≥ 80h | ≥ 80h | --- ## 10. 风险与缓解 (修订) | 风险 | 影响 | 概率 | 缓解 (v1.1) | |---|---|---|---| | AI 误操作伤人 | 极高 | 中 | HARD_ACTION 完全硬件化 + 安全 PLC SIL3 | | 大脑单点故障 | 高 | 中 | HA 双节点 + Saga 续跑 + 设备本地降级 | | LLM 厂商不可用 | 高 | 高 | 多厂商 Failover + 本地 Qwen-72B 兜底 | | 国内合规问题 | 高 | 高 | 默认国产 LLM + 高敏强制本地 | | 注册表投毒 | 高 | 低 | Ed25519 签名 + 协议反查 + GitOps | | Tailnet 横向 | 高 | 中 | 应用层 mTLS + brain CN 强校验 | | 工控网攻击面 | 高 | 低 | Purdue 严格 + 大脑无 L1 直连 | | 供应链攻击 | 高 | 中 | cosign 签名 + SBOM + 凭证不进 Agent | | Prompt 注入 | 中 | 高 | Spotlighting + 数据通道隔离 + SOFT 组合升级 | | 工作量低估 | 中 | 已修 | PoC/生产明确拆分 | | 国产硬件覆盖不足 | 中 | 已修 | P0 含西门子+汇川+信捷+三菱+仙工 | --- ## 11. 附录 ### A. 技术选型 (v1.1 修订) | 组件 | v1.0 | v1.1 | 变更原因 | |---|---|---|---| | LLM | Claude Opus 单点 | Qwen + GLM + 本地 (Claude 可选) | 国内合规 | | 网络 | Tailscale | Headscale (自托管) + Tailscale 备 | 国内可控 | | 时序 DB | InfluxDB | TDengine (国产) / InfluxDB | 国产化 | | 监控 | Prometheus + Grafana | 同左 | 保持 | | 审计 | SQLite JSONL | PostgreSQL + Merkle + RFC3161 | 不可篡改 | | Edge 语言 | Node.js | Node.js (含 cosign 签名) | 加固 | | MCP 主语言 | Python | Python (固定版本锁) | 加固 | ### B. 关键术语表 (v1.1 新增) | 术语 | 定义 | |---|---| | LLM Router | 多 LLM 厂商抽象 + 路由层 | | Edge Gateway | L3 工厂控制网中继, 大脑唯一接入点 | | Saga | 跨设备工作流持久化与补偿事务 | | Merkle Chain | 链式 hash 审计日志, 不可篡改 | | HMAC Heartbeat | 物理钥匙加密心跳协议 | | Margin Gate | 能力图谱召回置信度差距门 | | Capability Handshake | 启动时协议反查校验 | | GitOps Registry | 设备注册表的版本化变更流程 | | 安全 PLC | SIL2/3 认证的独立急停控制器 | ### C. 修订记录 | 版本 | 日期 | 主要变更 | |---|---|---| | v1.0 | 2026-04-25 | 初版 | | v1.1 | 2026-04-25 | 整合 4 专家评审; 修复 7 CRITICAL; 国产硬件 + 多 LLM + 范围收敛 + 工作量重估 | | **v1.1.1** | **2026-04-25** | **LLM 厂商列表更新到 2026-04 旗舰; 移除 Yi-Lightning; 新增 Grok 4; 修正 Kimi K2/MiniMax M1/Qwen3-Max 等命名; 增加 hard_action_budget_usd 专属预算池; circuit_breaker 冷却调至 300s; 增加 llm-version-registry.yaml 锁版本机制** | --- ## 12. 下一步建议 1. **本周**: 召开 v1.1 评审会, 确认 LLM 双轨方案 + 国产 PLC 优先级 + 首个 PoC 业务场景 2. **2 周内**: 启动 Phase 0, 选定 1 个国产 PLC + 1 台仙工 AGV (如有) 作试点 3. **6-8 周**: PoC Demo 完成, 业务指标可见 4. **3 个月**: Phase 1 完成, 内部 5-10 设备生产试用 5. **6 个月**: Phase 2 工厂级试点 6. **12 个月**: 30 设备规模, 真实业务价值显现 --- > **v1.1 承诺**: 比 v1.0 更安全 + 更国产化 + 更可执行。 > 评分目标: 综合 ≥ 85 (B+), 安全 ≥ 75 (B), 算法 ≥ 75 (B), 市场 ≥ 80 (B+)。 > 下一步评审通过后, 立即启动 Phase 0。