---
name: dialog-interpret
description: |
  对煤矿"一通三防智能管控平台"的监测指标进行智能数据解读。当用户在对话中询问某个巷道、工作面或测风点的风速、风量、瓦斯(甲烷)、一氧化碳(CO)、氧气(O₂)、温度等监测数据情况时使用——典型问法如"XXX巷道风速风量怎么样""分析一下XXX巷道传感器数据""解读一下XXX巷道当前风速风量情况""XXX回风巷瓦斯为什么报红""近7天XXX工作面温度趋势"等。只要用户提到巷道/工作面/测风点名称并结合监测指标提问，就应触发本技能，自动完成"选巷道与指标→查巷道属性→查规程阈值→查计划风量→比对判断→给结论与建议"全流程解读。此外，还支持根据巷道名称查询设备列表、根据模型ID获取巷道列表等辅助功能。
---

# 智能通风数据解读技能

本技能封装"数据解读 Agent"的核心能力：依据用户自然语言提问，查询巷道属性、监测数据、规程阈值、计划风量，完成合规判断，输出结构化中文结论与系统调整建议。

**两条铁律：**
1. 规程依据统一以《煤矿安全规程》**2025 版**为准。
2. 所有数值结论必须来自工具返回的实测数据与规程阈值，不得臆造；结论中需标注依据条款与数据来源。

## 1. 触发判断

当用户输入符合下列任一情形时触发：

- 提到具体巷道/工作面/测风点名称（如"北二盘区变电所回风巷""15216 辅运起坡段"），并询问其监测数据情况；
- 使用"风速/风量/瓦斯/甲烷/CO/一氧化碳/O₂/氧气/温度/传感器数据"等指标词，配合"怎么样/情况/分析/解读/是否满足/为什么报红/趋势"等询问词；
- 询问某指标在**指定巷道/工作面内**的排名、对比或历史趋势（如"近7天温度趋势""该巷道风速变化"）；
- 询问某巷道下有哪些设备、某模型下有哪些巷道等设备/巷道列表查询需求。
- 询问"有哪些设备类型""设备分类""设备大类小类""传感器类型有哪些""strType 编码含义"等设备类型字典查询需求。

> ⚠️ 涉及"全矿/所有巷道"跨巷道聚合排名类问题（如"全矿瓦斯浓度最高的三个点"），当前工具不支持跨巷道聚合；触发后按第 6.3 节处理，告知用户暂不支持并引导改为指定巷道查询。

**缺省规则：** 用户只问巷道名未说指标 → 默认解读"风速 + 风量"；未给时间范围 → 默认解读"当前（实时）"数据。

## 2. 解读流程总览

```
用户提问
   │
   ▼
① 解析意图与参数（巷道 / 指标 / 时间范围）
   │
   ▼
② 查巷道属性（类型、断面、用途、关联传感器）   ← query_tun_data_by_id / query_devices_by_tunnel / query_devices_by_tunnel_id / query_tunnel_list / query_tunnels_by_model
	   │
   ▼
③ 查计划风量                                  ← get_tunnel_plan_flow（可选）
   │
   ▼
④ 查监测数据（实时 / 历史）                    ← query_device_data_by_id / list_ventanaly_monitor_data_days
	   │
   ▼
⑤ 查规程阈值（按巷道用途与指标类型）            ← get_wind_limit / get_gas_limit / get_co_limit / get_o2_limit / get_temperature_limit
   │
   ▼
⑥ 合规比对判断（风速 / 风量 / 气体 / 温度）
   │
   ▼
⑦ 生成结论 + 系统调整建议（结构化中文输出）
```

> 说明：下方声明的工具为**预期接口契约**。工具尚未实现时，按契约组织查询并明确告知用户"数据接口待接入"；工具就绪后即可按序调用。

## 3. 第一步：解析意图与参数

从用户提问中提取三类参数：

| 参数 | 是否必填 | 说明 | 缺省处理 |
|------|---------|------|---------|
| 巷道名称 | 必填 | 巷道/工作面/测风点名称 | 缺失时反问用户确认，不要猜测 |
| 指标类型 | 可选 | 风速 / 风量 / 瓦斯 / CO / O₂ / 温度 / 压力 / 湿度 | 未指定默认"风速 + 风量" |
| 时间范围 | 可选 | 实时 / 近 N 天 / 起止时段 | 未指定默认"当前实时" |

- 巷道名称在库中匹配到多个（重名/模糊匹配）时，列出候选请用户确认。
- 涉及历史趋势（"近 7 天""上个月"）时，换算为起止时间调用历史数据工具。
- 当用户询问巷道下设备列表时，调用 `query_devices_by_tunnel` 或 `query_devices_by_tunnel_id`。
- 当用户需要按模型查询巷道列表时，**优先使用 `query_tunnel_list`**（model_id + tunnel_name 模糊匹配，返回精简列表仅含 modelId/tunnelId/tunnelName）。若该工具无结果，再回退使用 `query_tunnels_by_model` 获取全量列表。模型ID使用 .env 中的 `DEFAULT_MODEL_ID`。

## 4. 第二步：调用工具查询（声明式接口契约）

以下工具为预期接口契约，按声明组织查询。

### 4.1 巷道与设备列表查询

| 工具 | 所属服务 | 入参 | 出参 |
|------|---------|------|------|
| `get_tunnel_info` | tunnel-knowledge-server | 巷道名称 或 巷道ID | 巷道ID、巷道名称、用途类型(useType)、断面积、关联传感器列表 |
| `get_tunnel_plan_flow` | tunnel-knowledge-server | 巷道名称 或 巷道ID | 计划风量(m³/min)、计划风速(m/s)、测风日期 |
| `query_devices_by_tunnel` | tunnel-device-server | 巷道名称、设备类型(可选) | 该巷道绑定的设备列表及实时数据 |
| `query_devices_by_tunnel_id` | tunnel-device-server | 巷道ID、模型ID(可选)、设备类型(可选) | 该巷道ID下绑定的设备列表 |
| `get_tun_list_by_modelid` | tunnel-model-server | 模型ID | 指定模型下的巷道列表 |
| `query_tunnels_by_model` | tunnel-model-server | 模型ID | 根据模型ID查询巷道列表（新接口，含名称、类型、需风量等详情） |
| `query_tunnel_list` | tunnel-model-server | 模型ID + 巷道名称（模糊） | **优先使用**。按模型+名称模糊匹配巷道，仅返回 modelId/tunnelId/tunnelName |
| `get_device_kind_dict` | device-dict-server | 无 | 查询设备大类(deviceKind)和小类(strType)的编码-中文名称全量映射字典 |
| `get_device_list_by_kind` | device-dict-server | device_kind（必填） | 根据设备大类编码查询该类型下的全量设备列表，返回 device_id、device_name、install_pos、station_name |
| `query_device_realtime_data` | data-query-server | device_id（必填） | 查询指定设备的实时监测快照，返回最新读数、单位、采集时间、在线状态、报警信息 |

> **设备类型字典场景**：当用户询问"有哪些设备类型""设备分类有哪些""系统中监控哪些传感器类型""设备大类小类有哪些"、或需要将设备类型编码（如 `modelsensor_speed`）翻译为中文时，调用 `get_device_kind_dict` 获取全量字典后解答。该工具无参数，返回 deviceKind（大类）和 strType（小类）两个维度的映射表。
>
> **按类型查设备场景**：当用户询问"列出所有风速传感器""有哪些甲烷传感器""某类型设备有哪些"时，先调用 `get_device_kind_dict` 获取 deviceKind 编码，再调用 `get_device_list_by_kind` 传入对应编码获取该类型的全部设备列表。参数 device_kind 为必填，需从 get_device_kind_dict 的返回结果中提取。
>
> **单设备实时数据场景**：当用户询问"设备XXX当前读数""传感器XXX的实时值""某个具体设备的最新数据"时，调用 `query_device_realtime_data` 传入设备ID获取实时快照。与 `query_device_data_by_id`（含报警+分页）相比，本工具返回结构更精简、延迟更低，适合单设备快速查询场景。设备ID可从前序工具（get_device_list_by_kind、query_devices_by_tunnel 等）的返回结果中提取。

> **设备列表查询场景**：当用户询问"XXX巷道有哪些设备"或"查看XXX巷道的传感器"时，优先使用 `query_devices_by_tunnel`（按名称查询更直观）；当已知巷道ID时使用 `query_devices_by_tunnel_id`。

> **模型巷道列表场景**：当用户需要按通风模型筛选巷道时，使用 `query_tunnels_by_model` 或 `get_tun_list_by_modelid` 获取模型下的巷道清单，再针对具体巷道进行数据解读。

> 计划风量来源以 `model_sensor.planM3` 或 `doc_vent_plan_wind_measurement.air_volume` 为候选；无计划风量时该步骤返回空，结论中需提示"无计划风量对比"。

**多传感器选择规则**：一条巷道可能关联多个传感器，按以下优先级取值：
1. 优先取 `bRealCal = 1`（参与实时计算）的传感器；
2. 仍多于一个时，取同指标类型中设备状态在线、数据时间最新的；
3. 仍无法判断时，列出全部候选传感器及各自读数，请用户确认以哪个为准。

### 4.2 监测数据查询

| 工具 | 所属服务 | 入参 | 出参 |
|------|---------|------|------|
| `query_device_data_by_id` | data-query-server | 设备ID、page_size(可选) | 设备实时数据 + 报警数据 |
| `list_ventanaly_monitor_data_days` | data-query-server | strtype(设备类型)、gdeviceids(设备ID)、ttime_begin(开始时间)、ttime_end(结束时间)、device_num(设备编号)、skip(采样间隔) | 历史时序数据（风速、风量、瓦斯、温度等趋势） |

**`list_ventanaly_monitor_data_days` 参数说明**：
- strtype: 设备类型，如 "fanmain_stem_wp_2"
- gdeviceids: 设备ID，如 "11111004"
- ttime_begin / ttime_end: 时间范围，格式 "yyyy-MM-dd HH:mm:ss"
- device_num: 设备编号，如 "Fan1"
- skip: 查询采样间隔，默认8，1=5秒//2=10秒//3=30秒//4=1分钟//5=5分钟//6=10分钟//7=30分钟8=1小时，如果半天内默认按10分钟查询，如果需要跨天则默认按1小时查询，其他情况请按合适的采样间隔获取，考虑数据库的压力。

> 历史趋势类问题（如"近7天温度趋势""该巷道风速变化"）使用 `list_ventanaly_monitor_data_days`。
> 实时数据 + 报警查询使用 `query_device_data_by_id`。

**指标 → valueCode 映射表**（调用 `query_history_data` 时按此填 valueCode）：

| 指标 | valueCode | 单位 |
|------|-----------|------|
| 风速 | vaValue | m/s |
| 风量 | m3Value | m³/min |
| 瓦斯 | gasValue | % |
| 一氧化碳 | coValue | % |
| 氧气 | o2Value | % |
| 温度 | temperatureValue | ℃ |
| 粉尘 | dustval | mg/m³ |

> 工具就绪前，valueCode 名称可能与上表不同；以 data-query-server 实际返回字段为准。

设备与指标的对应关系（用于定位传感器，依据 model_sensor.nSensorType）：

| 指标 | 传感器类型 nSensorType | strType 示例 | 实时值字段 |
|------|----------------------|-------------|-----------|
| 风速 | 1 / 11 | modelsensor_speed / windrect | windSpeed / vaValue |
| 风量 | 11 | windrect | m3 / m3Value |
| 瓦斯(CH₄) | 2 | modelsensor_ch4 | ch4 / gasValue |
| 一氧化碳(CO) | 3 | modelsensor_co | co |
| 氧气(O₂) | 7 | modelsensor_o2 | o2 |
| 温度 | 10 / 4 | modelsensor_temperature / modelsensor_multi | temperature / temperatureValue |

### 4.3 规程阈值查询

| 工具 | 所属服务 | 入参 | 出参 |
|------|---------|------|------|
| `get_wind_limit` | regulation-server | 巷道用途类型 | 风速下限 vmin、风速上限 vmax、依据条款、备注 |
| `get_gas_limit` | regulation-server | 设置地点类型 | 报警浓度、断电浓度、复电浓度、依据条款 |
| `get_co_limit` | regulation-server | — | 最高允许浓度、依据条款 |
| `get_o2_limit` | regulation-server | — | 最低浓度、依据条款 |
| `get_temperature_limit` | regulation-server | 地点类型 | 一级阈值、二级阈值、依据条款 |

> 各指标规程阈值结构详见 `references/regulation-thresholds.md`（背景知识，正式数值以 2025 版为准，由 regulation-server 工具返回）。

## 5. 第三步：合规比对判断

拿到实测值与规程阈值后，按以下规则判断（均为简单数值比较，由本技能直接完成，无需额外工具）：

### 5.1 风速
- 实测风速 > vmax → **超上限（风速超限）**
- 实测风速 < vmin → **低于下限**
- vmin ≤ 实测风速 ≤ vmax → **合规**
- 注：部分巷道仅设上限（如主要进、回风巷）或仅设下限（如其他通风人行巷道），按实际返回的阈值判断。

### 5.2 风量
- 有计划风量时：实测风量 ≥ 计划风量 → **满足**；实测风量 < 计划风量 → **不足**，缺口比例 =（计划风量 − 实测风量）/ 计划风量 × 100%。
- 无计划风量时：仅判断风速，结论提示"无计划风量对比"。

### 5.3 瓦斯（CH₄）
- 实测浓度 ≥ 该设置地点的报警浓度 → **报警**（按设置地点取报警/断电浓度）。

### 5.4 一氧化碳（CO）
- 实测浓度 ≥ 0.0024% → **超限**。

### 5.5 氧气（O₂）
- 实测浓度 < 20% → **不足**。

### 5.6 温度
- 按地点类型取阈值：采掘工作面 26℃/30℃、机电设备硐室 30℃/34℃（一级/二级）；超一级缩短作业时间，超二级须停止作业。

### 5.7 综合风险等级
- 全部合规 → **正常**；
- 任一指标超限/不足 → 至少 **一般风险预警**；
- 瓦斯/CO 超限或温度达二级阈值 → **重大风险预警**。

## 6. 第四步：生成结论与系统调整建议

### 6.1 处理建议库（按异常类型选用）

| 异常类型 | 建议措施 |
|---------|---------|
| 风量不足 | 检查通风阻力、风门开闭状态、局部通风机频率、风筒是否漏风 |
| 风速超上限 | 调节风窗/风门、降低局部通风机频率、排查短路漏风 |
| 风速过低 | 检查巷道是否堵塞、风门状态，必要时提高通风动力 |
| 瓦斯超限 | 立即停止作业、切断电源、加强通风、查明瓦斯来源 |
| CO 超限 | 排查自燃发火隐患、停止作业、加强通风 |
| O₂ 不足 | 检查通风、停止作业、撤离人员 |
| 温度超限 | 超一级缩短作业时间并给高温保健；超二级停止作业、加强降温 |

全部正常时，给出"维持当前通风配置、持续监测"等中性建议。

### 6.2 输出格式（严格遵守）

```
**【{巷道名称}】数据解读**

📍 监测对象：{巷道名称}（巷道类型：{用途类型}）
📊 当前数据：
- 风速：{值} m/s
- 风量：{值} m³/min
- {其他指标…}

📏 规程依据（《煤矿安全规程》2025版 {条款}）：
- 风速允许范围：{vmin} ~ {vmax} m/s
- 计划风量：{值} m³/min

🔍 分析结论：
- 风速：✅ 正常 / ❌ 超上限 / ⚠️ 低于下限
- 风量：✅ 满足计划 / ⚠️ 不足（缺口 {X}%）
- 综合状态：🟢 正常 / 🟡 一般风险预警 / 🔴 重大风险预警

💡 处理建议：
- {建议1}
- {建议2}
```

**输出示例**（数值仅为示例）：

> **【北二盘区变电所及水泵房回风巷】数据解读**
>
> 📍 监测对象：北二盘区变电所及水泵房回风巷（巷道类型：采区回风巷）
> 📊 当前数据：风速 5.62 m/s；风量 1806 m³/min
> 📏 规程依据（《煤矿安全规程》2025版 风速相关条款）：风速允许范围 0.25 ~ 6 m/s；计划风量 2100 m³/min
> 🔍 分析结论：风速 ✅ 正常（未超限）；风量 ⚠️ 不足（缺口 14.0%）；综合状态 🟡 一般风险预警
> 💡 处理建议：检查通风阻力、风门开闭状态及局部通风机频率；核实计划风量设定是否合理。

历史趋势类问题，额外用平均值/最值/趋势方向描述，并使用下方趋势输出模板：

```
**【{巷道名称}】{指标} 趋势解读（{时间范围}）**

📊 统计指标：平均 {avg} {单位}；最低 {min} {单位}；最高 {max} {单位}
📈 趋势方向：↗ 上升 / ↘ 下降 / → 平稳 / 波动
🔍 分析结论：{是否超限、超限时段、合规性}
💡 处理建议：{建议}
```

### 6.3 跨巷道聚合问题处理

当用户提问涉及"全矿/所有巷道中某指标最高/最低/排名"（如"全矿瓦斯浓度最高的三个点"）时：
1. 先确认现有工具是否支持跨巷道批量查询与排序。当前声明式工具仅支持**按巷道/设备查询**，不支持跨巷道聚合。
2. **工具未支持时**：明确告知用户"当前仅支持按指定巷道查询，暂不支持全矿聚合排名"，并请用户给出具体巷道名；不要凭空编造排名结果。
3. **工具后续支持时**：使用新增的 `query_top_n_by_indicator`（预期工具，入参：指标类型、数量 N、时间范围；出参：排序后的巷道-传感器-读数列表）完成查询，再套用单巷道解读模板逐条输出。

## 7. 注意事项

1. **规程版本**：阈值与条款一律以《煤矿安全规程》2025 版为准；工具返回的条款编号优先，`references/regulation-thresholds.md` 中的数值仅作背景参考。
2. **避免幻觉**：所有实测数值、阈值、计划风量必须来自工具返回；工具未实现或缺数据时，明确告知"当前数据暂不可查"，不要编造数字。
3. **数据来源与条款**：结论中标注规程依据条款与数据来源（传感器/设备ID）。
4. **无计划风量**：明确提示"无计划风量对比"，仅做风速合规判断。
5. **单位统一**：风速 m/s，风量 m³/min，气体浓度 %，温度 ℃。
6. **多轮追问**：保留会话上下文，支持"那上个月呢""给出处理建议"等追问。

## 8. 参考资料

- `references/regulation-thresholds.md`：各指标规程阈值表（背景知识，正式以 2025 版为准）
