bookworm-smart-assistant/docs/AI-Universal-Control-Plane-WhitePaper-v1.1.md
Bookworm Admin b7a8e29d21 release: v6.7.0 - OTA E2E test release
- VERSION file as authoritative version source
- export.mjs reads VERSION with package.json fallback
- bw-ota.ps1 DryRun mode for safe testing
- auto-setup.ps1 bumped to v3.2.0 (Phase 8 OTA)
2026-04-27 17:59:44 +08:00

1395 lines
53 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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。