Skip to content

2026 AI 空间智能体 - 设备语义管理 PRD (v4.0)

版本: v4.1 日期: 2026-07-13 目标: 设备级点位映射全面上移至产品管理。设备语义管理精简为:继承产品映射 + 设备级 per-signal 启用/禁用 + 语义别名管理。消除重复配置,减轻 LLM 上下文负担。

v4.1 变更: 引入弹窗重构为全量展示模式,新增物联平台空间树,引入时自动检测空间/产品依赖。


1. 核心设计理念

1.1 物理与语义解耦

系统在 AI 层通过"语义增强"建立映射。设备的功能属性(Property)被转化为 AI 可识别的角色(RW-读写, RO-只读)。由于系统对接的是经过抽象的自控平台,AI 层面不再需要处理底层的点动(Write-Only)或状态分离逻辑。

1.2 核心设计准则

  • 强空间依赖 (No Space, No Device): 任何设备接入前,其所属的空间路径必须已通过 AI 纳管(见 空间语义管理)。
  • 产品映射继承 (Product Mapping Inheritance): 设备的点位映射配置继承自所属产品的产品级映射(见 产品语义管理)。设备级不再维护完整映射配置,仅通过 disabled_signals[] 实现差异覆盖。
  • 设备级仅可控开关 (Device-Level Toggle Only): 设备级仅能控制产品已启用点位的开启/关闭,不得修改产品级定义的 label/range/step/AI指引。

1.3 核心术语表 (Terminology)

NOTE

设备资产 (IoT Devices): 管理具体执行终端,为 AI 提供控场能力映射。 语义别名 (Alias): AI 识别设备的自然语言凭证,如"主灯"、"空调"。 产品映射继承: 设备自动继承其所属产品的点位映射配置(label/range/step/AI指引),设备级仅存储差异禁用列表。 disabled_signals: 设备级禁用点位列表。设备有效点位 = 产品 enabled=true 的点位 - disabled_signals

1.4 为什么要 disabled_signals:真实场景

同一产品型号部署在不同空间时,管理要求可能不同:

空间设备允许的操作需禁用的信号
CEO 办公室大金空调_01开关 + 温度 + 风速 + 模式
开放办公区大金空调_02仅开关hvac_target_temp, hvac_fan_speed, hvac_mode
会议室大金空调_03开关 + 温度hvac_fan_speed, hvac_mode

三台设备是同一产品(大金空调),但管理策略不同。靠产品分类无法解决——不可能为每个空间建一个产品 SKU。因此设备级需要 disabled_signals[] 数组做差异化控制,LLM 上下文中也由此出现了 enabled_device_countcurrent_values[]——每个点位启用的设备数不同,当前值数组长度自然也不同。


2. 管理模块概述 (Device Hub)

2.1 设备管理模块 (Device Hub)

设备管理是能力的"执行器"。将物理实体的属性映射为 AI 意图动作,实现精准控场。

2.2 核心特性

  • 强关联接入 (Scoped Import): 设备必须在确定的空间环境下被引入。
  • 产品映射自动继承: 引入时关联产品的映射配置,设备级仅需控制点位的启用/禁用。
  • 默认别名继承: 首次引入时,AI 别名自动初始化为物理名称。
  • 多维度异常感知: 包括物理位移、物模型属性漂移的全面检测。

3. 一致性管控逻辑 (Consistency Governance - Device Focus)

系统遵循 "列表防御性停用,抽屉阶梯式对账" 的分层治理原则。

3.1 异常感知与熔断

针对设备特有的异常触发逻辑:

  • 物模型属性漂移 (Property Drift): 若底层物模型变更导致映射失效,系统触发异常并锁定为 ⚪ 已停用
  • 💀 物联信息丢失 (Orphan): IoT 端物理删除设备,AI 端同步熔断。

3.2 采纳与闭环 (Stepped Adoption)

  • 分支:采纳项: 支持一键同步名称变更、空间路径迁移。
  • 分支:配置项: 对于属性漂移,不可自动采纳。管理员需前往 产品语义管理 重新配置产品级映射。

4. 全资源纳管与配置全流程 (Business Process - Device)

设备映射配置不再在设备级维护,而是继承自产品级映射。设备级仅做 per-signal 启用/禁用。

6. 设备资源管理 (Device Management UI)

核心原则: "无空间,不设备"。AI 系统仅纳管已明确归属到 AI 空间下的设备。

6.1 界面总览:强空间依赖

设备管理完全复用"空间管理"的三栏布局。左侧树为"已纳管的 AI 空间树"

text
+----------------+--------------------------+-------------------------------------------------------------+
| [APP NAV]      | [ 已纳管 AI 空间树     ] |  首页 / 设备资源管理 / 金螳螂 / 1楼 / 305会议室             |
|                |                          +-------------------------------------------------------------+
|  [🏢] 空间管理 |  v 21默认项目            | [ 工作区: 305会议室 (已纳管设备) ]                          |
|                |    v 金螳螂              |                                                             |
|  [💡] 设备管理 |      v 1楼               |  产品品类: [ 全部 v ]  搜索: [ 设备名称/产品名称...  ]       |
|  (Active)      |         305会议室 <Active|  [ + 引入 IoT 设备 ]                                          |
|                |      > 4楼               |  [ 已选 1 项 ] [ 批量生效 ]  [ 批量失效 ] (有勾选项时列出)  |
|                |                          |  +-------------------------------------------------------------------------------------------------+ |
|                |                          |  | [v] | 设备名称 | 归属空间 | 产品品类 | 产品名称 | 总点位 | 已启用 | 别名(语义) | 数据状态 | 异常 | 操作 | |
|                |                          |  |-----|----------|----------|----------|----------|--------|--------|------------|----------|------|------| |
|                |                          |  | [x] | 305主灯  | 305会议室| 照明     | 灯产品   | 10     | 1      | [主灯][灯] | 🟢生效   | -    | 配置 | |
|                |                          |  +-------------------------------------------------------------------------------------------------+ |
|                |                          |                                                             |
+----------------+--------------------------+-------------------------------------------------------------+
注意:空间树,取自 `空间资源管理` 已维护的AI空间树

6.1.2 关键交互说明

  1. 强行级联过滤: 列表中的设备,必须严格依据左侧空间树的选中节点进行过滤(选中父节点,将展示其下属所有层级的全部设备)。
  2. 状态列说明: 【数据状态】
    • 🟢 生效: 设备基础数据在系统中正常生效,被意图引擎识别。
    • ⚪ 停用: 用户手动停用或因底层异常被系统熔断锁定。 【同步异常】
    • [-]: 正常。
    • [⚠️ 变更/漂移]: 物理层名称、空间路径修改,或物模型属性发生漂移。
    • [💀 物联信息丢失]: 物理删除,强关联置为停用。
  3. 安全批量操作 (Batch Safety): 和空间管理一样,勾选执行批量生效时,自动过滤具有异常的设备。
  4. 生效前置校验: 点击 [生效] 时,若该设备的 AI 别名(含原名、别称列表)为空,系统拦截并报错,确保纳管资源具备语义入口。
  5. 意图承接逻辑 (Intent Resolution): 针对空间级意图(如"调高 305 的温度"),系统优先匹配空间的"原生逻辑点位"(见空间管理 PRD);设备层不再承担空间级群控的默认承接职责。
  6. 归属空间显式化: 由于支持级联展示,列表页新增"归属空间"列,用于标明设备所属的物理空间,辅助管理员在混合列表中快速定位。
  7. 总点位/已启用列逻辑:
    • 总点位: 该设备所属产品在自控平台的全部信号点位数量(product.mappings[] 总长度),不论 AI 是否启用
    • 已启用: 该设备实际启用给 AI 使用的点位数量(产品 enabled=true 的点位 - disabled_signals)。此值 ≤ 产品的已启用点位数量

6.1.3 权限真相原则 (Physical Source of Truth)

  • 语义仅定义意图: 标准语义 (StandardSemantics) 仅代表 AI 的逻辑入口。
  • 物理决定权限: 设备功能的 可看/可控 权限由 IoT 物理点位的 AccessMode (R/W/RW) 最终决定。该权限在产品级映射中已定义,设备级继承。

6.2 核心流程 A:引入 IoT 设备 (Import Modal v4.1)

点击 [+ 引入 IoT 设备]。弹窗不再自动按主页面 AI 空间树过滤,改为展示物联中台全量设备,配合左侧物联平台空间树进行筛选。

text
+----------------------------------------------------------------------------------------+
|  引入 IoT 设备                                                                  [ X ]  |
+----------------------------------+-----------------------------------------------------+
|  [物联平台空间]                  |  品类:[全部 v]  产品:[全部 v]  搜索:[..........]     |
|                                  |  ☐ 显示已纳管                                      |
|  ▼ 金螳螂                        |  已选 2 项                                          |
|    ▼ 1楼                         |  +---------------------------------------------------+ |
|      305会议室                   |  | [x]  设备名称   | 归属空间  | 品类  | 产品   |编码| |
|      401大会议室                 |  |-----------------|-----------|-------|--------|-----| |
|    ▶ 4楼                         |  | [x] 305#新风机  | 305会议室 | 暖通  | 新风系统|... | |
|  ▶ 北楼                          |  | [x] 305#投影幕布| 305会议室 | -     | 升降幕布|... | |
|                                  |  | [ ] 105#落地灯  | 105接待室 | 照明  | 智能灯控|... | |
|                                  |  | [已纳管] 105#环境宝|105接待室| 环境 | 传感器  |... | |
|                                  |  +---------------------------------------------------+ |
+----------------------------------+-----------------------------------------------------+
|                                     [取消]                              [确定引入]       |
+----------------------------------------------------------------------------------------+

6.2.1 引入逻辑细节 (Import Specifics v4.1)

  1. 全量展示(去除自动空间过滤): 弹窗不再根据主页面选中空间自动过滤设备,而是展示物联中台全部 IoT 设备。左侧「物联平台空间树」独立于页面的 AI 纳管空间树,数据源为物联中台原始空间层级。

  2. 物联平台空间树: 左侧树展示物联中台的完整物理空间层级(建筑→楼层→房间),与主页面 AI 纳管空间树无关。点击节点时级联筛选该空间及其所有子空间下的设备。

  3. 去重默认隐藏,可切换显示: 已纳管的设备默认不展示(避免重复引入),但提供「显示已纳管」复选框供管理员查看。已纳管设备在列表中显示为灰态(opacity 0.5),标签标注为"已纳管",复选框禁用。

  4. 过滤条件: 弹窗支持"产品品类"下拉 + "产品"下拉 + "设备名称/编码"文本搜索三组条件联合过滤,所有条件下钻基于左侧物联平台空间树的筛选结果。

  5. 引入依赖检查(v4.1 新增): 用户点击「确定引入」时,系统自动检查以下依赖关系:

    • 空间依赖: 设备的归属房间是否已在 AI 空间管理中纳管
    • 产品依赖: 设备关联的产品是否已在 AI 产品管理中导入
    • 两者均为阻断性条件,缺失时将弹出确认摘要弹窗,用户必须确认后才能继续引入。
  6. 引入确认摘要弹窗:

    text
    +------------------------------------------------------------------+
    |  引入确认                                                         |
    +------------------------------------------------------------------+
    |                                                                   |
    |  将引入 3 台设备至 AI 系统                                        |
    |                                                                   |
    |  ⚠ 以下关联项尚未纳入 AI 系统,将一并自动引入:                    |
    |  · 空间 1 个(含父路径自动创建)                                  |
    |  · 产品 2 个(含点位属性)                                        |
    |                                                                   |
    +------------------------------------------------------------------+
    |                        [取消]     [确认引入(含关联项)]            |
    +------------------------------------------------------------------+
    • 摘要不逐条列举设备和关联项,仅展示数量摘要
    • 空间和产品不可选择排除(阻断性约束,必须全量自动引入)
    • 若无任何缺失依赖,则直接执行引入,跳过确认弹窗
  7. 关联项自动引入行为:

    • 空间自动引入: 对所缺空间执行递归父路径创建,在 managedAssets 中建立完整空间链(建筑→楼层→房间),初始状态为 disabled
    • 产品自动引入: 从物联中台产品数据源拉取产品信息,自动生成点位属性模板(与产品管理页面 IoTProductImportModal._generateMockSignals 同逻辑),点位默认 enabled=false,语义映射为空。后续需在产品管理中手动配置
  8. 别名继承机制: 设备初次引入,系统默认把 [原始名称] 设为初始可用别名,确保能够即引入即服务。

  9. 产品关联与抽屉适配:

    • 引入时如果产品已在产品管理中配置完成,设备自动关联 product_id
    • 产品未导入: 设备抽屉显示"暂无产品映射,请先导入产品"
    • 产品已导入但语义未配置: 设备抽屉显示"产品已导入但未配置语义映射,请先前往产品管理配置点位映射"

6.3 核心流程 B:设备级点位启用/禁用配置

设备级不再维护完整 Capability Mapping,改为继承产品映射 + per-signal 开关

6.3.1 界面原型:设备配置抽屉 (v4.0)

text
+---------------------------------------------------------------+
|  设备配置详情: 走廊筒灯_01                              [ X ]  |
+---------------------------------------------------------------+
|                                                               |
|  == 基础信息 (只读) ==                                         |
|  所属产品:  某品牌筒灯 (prod_light)                         |
|  归属空间:  走廊 (SP_CORRIDOR)                                |
|  IoT 编码:  DEV_L_001                                         |
|                                                               |
|  == AI 语义增强 ==                                            |
|  语义别名:  [ 走廊灯 x ]                                      |
|                                                               |
|  == 点位映射(继承自产品: 某品牌筒灯)==                        |
|  总点位: 10  产品已启用: 3  本设备已启用: 1   [查看产品映射]   |
|                                                               |
|  +-------------------------------------------------------------+ |
|  | [ON ]  照明开关 (LightSwitch)     语义映射: 灯具开关        | |
|  |        [布尔(Bool)] [读写(RW)] 0→关闭, 1→开启          | |
|  |        AI指引: 控制灯具开关                                  | |
|  +-------------------------------------------------------------+ |
|                                                               |
|  +-------------------------------------------------------------+ |
|  | [OFF]  亮度调节 (Brightness)      语义映射: 亮度调节        | |
|  |        [数值(Num)] [读写(RW)] min=0,max=100,step=1     | |
|  |        AI指引: 数值越大越亮  本设备已禁用                    | |
|  +-------------------------------------------------------------+ |
|                                                               |
|  ──── 以下点位产品未启用,本设备不可单独开启 ────               |
|                                                               |
|  +-------------------------------------------------------------+ |
|  | [ — ]  色温调节 (ColorTemp)         语义映射: 色温调节     | |
|  |        [数值(Num)] [读写(RW)] 产品未启用               | |
|  +-------------------------------------------------------------+ |
|                                                               |
+---------------------------------------------------------------+
|                                      [ 取消 ]   [ 保存生效 ]  |
+---------------------------------------------------------------+

图标说明

图标含义设备能否操作
[ON ]switch 开启状态,产品已启用 + 本设备已启用可点击关闭
[OFF]switch 关闭状态,产品已启用 + 本设备已禁用可点击开启
[ — ]switch 置灰状态,产品未启用不可操作,引导去产品管理

6.3.2 点位映射列表规则

状态switch 显示含义设备能否操作
已启用[ON ] 滑块在右产品已启用 + 本设备已启用可点击关闭
已禁用[OFF] 滑块在左产品已启用 + 本设备已禁用可点击开启
产品未启用[ — ] 置灰锁定产品级 enabled=false不可操作,引导前往产品管理

规则说明

  1. 列表展示该产品所有点位(mappings[] 全部),按产品 enabled 状态分组:产品已启用的在上、产品未启用的在下
  2. 每个点位展示:switch 图标 + signal_label (signal_name) + 关联标准语义 + 数据类型 + 读写角色 + 摘要 + AI指引
  3. 每个点位的 switch 状态 = 产品 enabled=true && signal_name ∉ disabled_signals
  4. 产品 enabled=false 的点位 switch 置灰不可操作,引导文案"产品未启用,如需使用请先前往产品管理开启"
  5. 产品已启用的点位以分隔线分组,顶部统计"产品已开启 X/Y 个点位,本设备已启用 Z 个"

6.3.3 设备级数据治理与异常闭环

  1. 防御性状态保持与异常消警
    • 与 v3.1 保持一致。异常状态下点位列表整体置为只读。
  2. 产品映射变更感知
    • 设备下次打开抽屉时自动同步产品最新映射:
      • 产品新增点位 → 追加到列表,switch 默认跟随产品 enabled
      • 产品删除点位 → disabled_signals 自动清理残留引用
      • 产品修改 label/range → 详情面板自动更新
  3. 降级只读模式
    • 设备遭遇 [💀物联信息丢失] → 整个抽屉(含别名、点位 switch)强制 ReadOnly

6.3.4 设备级保存逻辑

json
{
  "product_id": "prod_light",
  "disabled_signals": ["brightness", "color_temp"]
}

运行时:有效点位 = 产品 enabled=true 的点位 - disabled_signals


7. 核心技术策略 (Technical Strategy - Device Focus)

7.1 向量化策略 (One-to-Many Vectorization)

采用拆分存储策略,一条 SQL 实体记录对应多条 Vector DB 记录,以覆盖不同的自然语言表达。

  • ETL 触发: 用户点击配置抽屉的 [保存生效]
  • 拆分逻辑: 遍历 aliases 数组(含原名、物理全路径名、人工别名)。
  • 前置属性 (Pre-Filter Fields)
    • entity_type: 固定为 DEVICE
    • cap_tags: 通过产品级映射的 enabled=true 点位 + 设备级 disabled_signals 计算得来。例如仅开启了 light_power["light_power"]
  • 存储示例:
    • vec("走廊筒灯_01") -> Payload: { "ref_id": "DEV01", "entity_type": "DEVICE", "product_id": "prod_light", "cap_tags": ["light_power"] }
    • vec("走廊/走廊筒灯_01") -> Payload: { "ref_id": "DEV01", "entity_type": "DEVICE", "product_id": "prod_light", "cap_tags": ["light_power"] }

7.2 数据一致性与冲突检查

  • 弹性校验: 设备别名不在强制全项目唯一。系统支持同空间内别名去重,但允许跨空间共享相同别称(如每个办公室都有"灯"),具体匹配逻辑下沉至 Agent 推理层结合上下文处理。
  • 后端存储: 保存时仅执行格式校验与同空间重名检查。

7.3 Agent 槽位填充策略 (Slot Filling)

解决用户指令中设备缺失的问题。

  • 显式提取: LLM 直接从话语中提取设备标识(如 "打开 305 的空调")。
  • 隐式推理 (Implicit Inference):
    • 若 Device 槽位缺失,Agent 锁定空间后,查找该空间下具备对应 Intent 能力(如 hvac_power)的设备。
    • 设备的能力列表由 产品级 enabled 点位 - disabled_signals 运行时计算得出。

8. 数据模型 (Data Model - Device Focus)

8.1 实体基础表 (ai_entities - Device)

字段类型必填说明
idUUIDYesAI 系统内部唯一主键
iot_ref_idStringYesIoT 平台原始设备 ID
parent_idUUIDYes归属空间 ID (指向 Space 的 AI ID)
typeEnumYes固定为 DEVICE
product_idStringNo关联产品 ID,运行时从产品管理查询映射配置
ai_statusEnumYesACTIVE (生效中), DISABLED (已停用)
sync_errorEnumNoCHANGED (名称/路径变更), ORPHAN (物理丢失), DRIFT (属性漂移)
aliasesJSONYes字符串数组 ["空调", "AC"]
disabled_signalsJSONNo本设备禁用的信号名称数组 ["brightness", "color_temp"]

8.2 设备数据模型 (v4.0)

json
{
  "id": "dev_light_01",
  "iot_ref_id": "DEV_L_001",
  "parent_id": "SP_CORRIDOR",
  "type": "DEVICE",
  "product_id": "prod_light",
  "ai_status": "ACTIVE",
  "sync_error": null,
  "aliases": ["走廊灯"],
  "disabled_signals": ["brightness", "color_temp"]
}

运行时有效点位计算规则

有效点位 = 产品 enabled=true 的点位 - disabled_signals
场景switch 状态结果
产品 enabled=true + 信号 ∉ disabled_signals[ON ]点位在该设备生效
产品 enabled=true + 信号 ∈ disabled_signals[OFF]点位在该设备禁用,可重新开启
产品 enabled=false[ — ] 置灰点位在该设备不可用,引导去产品管理开启

Released under the Private License.