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

53 KiB
Raw Permalink Blame History

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 接入要点:

# 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 命令包: 移动到点 / 旋转 / 充电 / 货架升降
# 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):

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

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

模型版本管理 (新增):

# 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 标准接口

所有适配器实现统一接口:

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 (新增签名 + 协议反查)

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

# 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 语义规约

# 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 必跑)

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

-- 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)

{"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)

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

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