1395 lines
53 KiB
Markdown
1395 lines
53 KiB
Markdown
|
|
# 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<string,string>) {
|
|||
|
|
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。
|