---
name: energy-suggestion-executor
description: "MANDATORY: When user selects or clicks an energy optimization suggestion by name (e.g., '高峰日专项治理', '节能成效复盘推广', or any suggestion name that was previously shown in ##### markers), you MUST: (1) read this SKILL.md file first, (2) generate SQL based on the suggestion, (3) execute the Python script. DO NOT answer with plain text analysis. This skill executes energy suggestions by querying the database and returning HTML reports."
---
# energy-suggestion-executor

## ⚠️ 关键规则 — 执行前必读

**必须执行 Python 脚本。无例外。**
- ❌ 禁止用纯文字回答建议内容，不得生成分析报告文字
- ❌ 禁止自行编造文件路径中的时间戳数字
- ❌ 禁止跳过脚本执行
- ❌ 禁止仅回复文件路径而不包含数据分析摘要
- ❌ **禁止安装任何依赖包**（requests 已预装，无需 pip install）
- ✅ 必须先生成 SQL，再执行脚本
- ✅ 必须先写数据分析摘要，再输出 `@@@@@` 地址标记
- ✅ 地址标记必须使用脚本输出 JSON 中的 `address` 字段原始值
- ✅ 脚本所有依赖（requests、json、os 等）均已可用，直接执行即可

## 触发条件（When to Use）

**以下情况必须调用此 Skill，不得直接文字回答：**
- 用户消息是一个建议名称（通常是之前 `#####` 标记中的名称），如「高峰日专项治理」「节能成效复盘推广」「设备能效分析」等
- 用户说「执行建议：XXX」「我选择 XXX」「执行 XXX」「查询 XXX」
- 用户选择了某条优化建议，希望获取数据支撑

**判断依据：** 如果用户的消息是一个简短的建议名称（4-15个字），且之前的对话中出现过该名称（在 `#####` 标记中），则必须调用此 Skill。

## 功能描述
接收用户选择的能耗优化建议名称，自动生成对应的 SQL 查询语句，调用数据库 API 执行查询，将结果以可视化报告形式返回，并给出后续优化建议。

## 使用方法

### Part 1 — 分析建议并生成 SQL

**Step 1：识别建议类型**

根据建议名称和描述，判断建议类型：

| 类型 | 关键词 | 对应操作 |
|------|--------|----------|
| 溯源排查型 | 排查、定位、回溯、核查、分析原因、专项治理 | 查询指定时间段的设备用电明细 |
| 预警规则型 | 设置、配置、阈值、预警、告警、基线 | 查询当前告警规则和计价规则 |
| 对比分析型 | 对比、趋势、基准、环比、同比、复盘、推广 | 查询多时段用电数据进行对比 |

**Step 2：根据建议内容生成 SQL**

根据建议描述中的时间、设备、企业等信息，结合以下视图生成对应的 MySQL SQL 语句：

**电力相关视图：**
- `电力设备天数据`：字段 park_name, enterprise_name, identification, device_name, year, month, day, kwh, carbon_electricity
- `电力设备小时数据`：字段 park_name, enterprise_name, identification, device_name, hour(日期类型), kwh
- `电力设备月数据`：字段 park_name, enterprise_name, identification, device_name, year, month, kwh
- `电力分项设备用电量`：字段 park_name, enterprise_name, terminal_type, year, month, day, kwh, standard_coal_amount
- `电力设备信息`：字段 park_name, enterprise_name, device_name, device_status(0离线1在线), identification, building_name

**告警和规则视图：**
- `告警设置`：字段 park_name, enterprise_name, year, general_alarm, common_alarm, critical_alarm
- `超排放预警`：字段 enterprise_name, park_name, year, alarm_type, carbon_emissions
- `计价规则`：字段 energy_type, pricing_name, year, month, tip_price, peak_price, flat_price, the_valle_price, deep_price, tip_price_initiate, peak_price_initiate, flat_price_initiate, the_valle_price_initiate

**能耗汇总视图：**
- `园区企业能耗天数据`：字段 park_name, enterprise_name, energy_consumption_electricity, energy_consumption_gas, energy_consumption_heat, year, month, day
- `园区企业能耗年数据`：字段 park_name, enterprise_name, energy_consumption_electricity, year
- `园区企业碳排月数据`：字段 park_name, enterprise_name, carbon_emissions_electricity, carbon_emissions_gas, carbon_emissions_heat, year, month
- `终端设备数据`：字段 park_name, enterprise_name, terminal_equipment_name, hour_0~hour_23, year, month, day

**SQL 生成规则：**
- 视图名称必须用反引号包裹，如 `` `电力设备天数据` ``
- 字符串条件使用单引号，数字条件不加引号
- 时间条件优先从建议描述中提取，无法提取时查询最近数据
- 结果限制最多 100 条，使用 LIMIT 100
- 必须包含 ORDER BY，排序字段优先选择 kwh 或时间字段

**Step 3：调用脚本执行**

生成 SQL 后，调用以下命令执行脚本：

```
python3 /home/admin/.openclaw/workspace-agent-200/skill/energy-suggestion-executor/executor.py \
  --suggestion_name "建议名称" \
  --suggestion_detail "建议详细描述" \
  --sql "生成的SQL语句"
```

脚本会返回 JSON 格式结果（**必须读取并引用 `data_summary` 中的数字**）：
```json
{
  "address": "/skill/energy-suggestion-executor/output/result_xxx.html",
  "status": "success",
  "row_count": 30,
  "message": "查询成功，共 30 条记录",
  "data_summary": {
    "row_count": 30,
    "energy_consumption_electricity": {
      "display_name": "电力能耗",
      "total": 1441488.5,
      "avg": 48049.6,
      "max": {"value": 111294.0, "at": "month=4, day=25, 测试9"},
      "min": {"value": 1200.5, "at": "month=4, day=1, 测试9"},
      "anomalies_above_1_5x_avg": [
        {"label": "month=4, day=25", "value": 111294.0},
        {"label": "month=4, day=24", "value": 90123.0}
      ]
    },
    "time_coverage": {
      "month": {"range": "4 至 5", "distinct_count": 2},
      "day": {"range": "1 至 31", "distinct_count": 30}
    }
  }
}
```

### Part 2 — 输出结果

**输出格式（严格按照以下顺序）：**

第一部分：数据分析摘要（2-5句话，**必须引用脚本输出 JSON 中 `data_summary` 字段的具体数字**）

**分析摘要必须包含以下内容（从 `data_summary` 中提取）：**
- 总量：引用 `total` 字段的具体数字
- 均値：引用 `avg` 字段的具体数字
- 最大値：引用 `max.value` 和 `max.at`（发生时间/实体）
- 最小値：引用 `min.value` 和 `min.at`
- 异常分析：引用 `anomalies_above_1_5x_avg`（超过均値 1.5 倍的异常记录）
- 时间覆盖：引用 `time_coverage` 中的范围信息

**❗ 禁止写泛泛的描述性语言（如“可以看出趋势”、“建议核查”），必须引用具体数字。**

**正确示例：**
```
查询 2025 年 4 月各日用电数据，共 30 条记录。总用电 1,441,488 kWh，日均 48,049 kWh。
4 月 25 日用电量最高，达 111,294 kWh，是日均的 2.3 倍，属于明显异常。
异常超高日（超过均値 1.5 倍）共 5 天：4 月 25 日（111,294）、4 月 24 日（90,123）等。
```

**错误示例（禁止）：**
```
已执行建议，获取了 30 条记录，可以看出用电趋势。建议核查异常日期。
```

第二部分：报告路径标记（必须在单独一行）：
```
@@@@@/skill/energy-suggestion-executor/output/result_xxx.html@@@@@
```
- 直接使用脚本输出 JSON 中的 `address` 字段值
- ❌ 禁止自行编造或修改文件名中的数字部分

第三部分：后续建议（必须在单独一行，固定三种类型）：

❗ **建议内容必须固定为以下三种标准类型，不得随意生成其他建议：**

| 序号 | 建议名称 | 说明 |
|------|---------|------|
| 1 | 总结问题，生成报告 | 根据分析结果生成正式能耗分析报告 |
| 2 | 发送短信通知相关人员 | 将异常或关键数据通知责任人 |
| 3 | 继续调查问题原因 | 针对异常数据进一步深入查询 |

**建议描述规则（每条建议的描述内容有固定要求）：**

| 建议名称 | 描述内容规则 |
|---------|------------|
| 总结问题，生成报告 | **对本次查询发现的问题进行简单描述**（如：X设备用电异常、X日峰值情况等），不超过2句话 |
| 发送短信通知相关人员 | **固定内容**：`需要我帮您列出相关人员的信息吗？或者输入手机号进行发送。` |
| 继续调查问题原因 | 说明下一步调查方向，结合具体数据（异常日期、设备、时段） |

格式：
```
#####%总结问题，生成报告%￥描述一￥ %发送短信通知相关人员%￥需要我帮您列出相关人员的信息吗？或者输入手机号进行发送。￥ %继续调查问题原因%￥描述三￥#####
```

**完整输出示例：**
```
查询 2025 年 4 月 25 日各设备用电明细，共发现 18 台设备有记录，其中 3 台设备单日用电超过 5,000 kWh，最高为设备 A 的 12,450 kWh（均值 2.5 倍，属异常）。高用电设备集中在 2 号楼。

@@@@@/skill/energy-suggestion-executor/output/result_1773640000.html@@@@@

#####%总结问题，生成报告%￥4 月 25 日设备 A 用电 12,450 kWh（均值 2.5 倍），2 号楼 3 台设备存在异常高耗情况。￥ %发送短信通知相关人员%￥需要我帮您列出相关人员的信息吗？或者输入手机号进行发送。￥ %继续调查问题原因%￥针对设备 A（12,450 kWh）异常高耗，进一步查询当日小时级用电明细，定位具体异常时段。执行方案：调取设备 A 当日小时级用电数据，排查异常时段和原因。￥#####
```
