主题
M5 双碳与能源月报(Demo 场景 PRD)
| 项 | 内容 |
|---|---|
| 文档定位 | 08_移动端AI场景设计.md §10 中反引号标记的 demo 模块的场景 PRD。本文是 M5;模板见 公共规范.md §8 |
| 通用规范 | 前端形态、系统提示词边界、定时任务方式、数据与输出规范见 公共规范.md;本文只写 M5 场景本身 |
| 能力来源 | 01_能源类AI能力-现状与自有发挥.md §4 示例 8/9(双碳核算、月报)、应用板块碳核算与报告引擎 |
| 版本 | v0.1 |
1. 场景定义
1.1 一句话
管理者问「10 月院区碳排多少,按楼栋拆一下」,Agent 调碳核算给碳排与来源结构;说「出一份能源月报」,Agent 汇总当月能耗、费用、碳排与异常,给一页摘要 + 报告引擎链接。
1.2 用户与价值
| 项 | 内容 |
|---|---|
| 用户 | 管理者(demo 固定账号 M1001,数据范围全院) |
| 价值 | 不用等应用板块出表、不用手工对数;碳排当场拆解,月报当场给链接 |
| 频次 | 按需,无定时推送 |
| 层级 | L2 数据查询 + L6 报告生成 |
1.3 触发方式
- 被动问答,没有定时任务。
- 典型 query:
- 「10 月院区碳排多少?按楼栋拆一下。」
- 「碳排来源是什么?电、气、冷热各占多少?」
- 「年度碳目标完成多少了?」
- 「出一份 10 月能源月报。」
- 两个意图一轮只处理一个:先答碳排,用户再说「顺手出个月报」时另起一条,不合并。
- 月份不明确时,默认上一个自然月,并在回答中写明。
1.4 边界
| 不做 | 原因 |
|---|---|
| 不做用能画像 | 单空间树节点的能耗结构归 M3 |
| 不做异常诊断与归因 | 异常清单、规则命中归 M4 |
| 不做节能建议 | 规则诊断解释归 M6;优化策略不在本期 |
| 不自建碳核算 | 因子库、分摊规则、核算标准由应用板块提供;M5 只调用与展示 |
| 不做动态报告排版 | 报告引擎是固定模板,M5 给 URL + 摘要;动态 LLM 报告属专项改造 |
| 不做 PDF 下载/邮件发送 | 只在聊天区展示并给链接 |
| 不做月度主动推送 | 主动推送归 M10 月度报告 |
2. Demo 形态
通用形态见 公共规范.md(小程序悬浮球打开 DeerFlow 聊天区、单会话、Markdown + Mermaid)。
本场景只约定:
- 管理者在常驻会话里直接提问,回答落在聊天区,不写首页洞察卡片(M5 不是 L4 主动服务)。
- 月报以「摘要 + 报告链接」交付,不生成文件、不发邮件。
- 追问沿用上下文:先问碳排,再问「按系统拆呢」,Agent 沿用同一个月和范围。
注:演示方式——登录管理者账号,点悬浮球,依次问「10 月院区碳排多少?按楼栋拆一下」「出一份 10 月能源月报」。
3. Agent 输出设计
3.1 输出元素
| 元素 | 用途 |
|---|---|
| Markdown 文字 | 结论、口径说明、因子版本、数据缺口 |
| Markdown 表格 | 碳排来源、空间节点拆分、月报总览 |
Mermaid pie | 碳排来源占比 |
Mermaid xychart-beta | 月内能耗趋势(月报时可选) |
| Markdown 链接 | 报告引擎 URL |
一次回复最多 2 张图;不输出快捷按钮、不输出自定义业务卡片。
3.2 碳排查询
用户
10 月院区碳排多少?按楼栋拆一下
Agent
10 月总碳排 186.4 tCO₂e,环比 +3.2%;电占 68%,是主要来源。
来源 碳排(tCO₂e) 占比 电 126.8 68% 天然气 41.0 22% 冷热 11.2 6% 水 7.4 4%
空间节点(示例:楼栋) 碳排(tCO₂e) 占比 A 楼 108.1 58% B 楼 78.3 42% 年度目标 1,280 tCO₂e,已发生 921 tCO₂e,进度 72%,按当前节奏预计超出目标 3%。因子库版本 v2026-A;分摊口径以应用板块为准。
3.3 能源月报
用户
出一份 10 月能源月报。
Agent
2026 年 10 月能源月报已生成。 摘要:总能耗 386,400 kWh(环比 +5.2%),费用 ¥308,600(+5.2%),碳排 186.4 tCO₂e(+3.2%);异常 12 条,已闭环 9 条。 碳排来源:电 68%、天然气 22%、冷热 6%、水 4%。 碳目标:年度进度 72%,按当前节奏预计超出目标 3%。 查看完整报告:2026 年 10 月能源月报 说明:报告由报告引擎按固定模板生成,因子版本 v2026-A。
- 报告 URL 由报告引擎返回,不由模型拼接;
status=not_ready时写「本月报告尚未生成」,只给摘要。 - 月报为全院统一口径,不区分地点;用户指定楼栋时也不单独出月报,只说明月报是全院口径。
- 摘要最多 6 行,不展开章节;用户要看细节,引导打开链接或改问 M3/M4。
3.4 异常与降级
| 情况 | 输出 |
|---|---|
| 碳因子未配置/不可用 | 碳排写「碳核算暂不可用」,能耗与费用照常 |
| 分摊规则未定 | 只给全院总量,节点拆分写「分摊口径待定」 |
| 同比不足 1 年 | 同比写「暂无」,只给环比 |
| 费用单价未配置 | 费用写「暂无」,不估算 |
| 报告未生成/查询失败 | 摘要照常输出,链接位置写「本月报告尚未生成」 |
| 月份无数据 | 写「该月暂无数据」,不生成空报告 |
| 越权节点 | 拒绝并说明授权范围 |
3.5 输出模板(开发参考)
本节给 Skill 组装输出用,业务评审可跳过。
碳排查询:
结构固定:结论 → 来源表 → 饼图 → 目标进度 → 因子与口径注。
能源月报:
输出 = 一段摘要 + 报告链接,不重复报告全文:
{月}能源月报已生成:{报告标题}
摘要:总能耗 {值}({环比}),费用 {值}({环比}),碳排 {值}({环比});异常 {条数} 条,已闭环 {条数}。
碳排来源:电 {x}%、气 {x}%、冷热 {x}%、水 {x}%。
碳目标:年度进度 {x}%。
查看完整报告:{报告引擎 URL}
说明:报告由报告引擎按固定模板生成;因子版本 {版本}。4. MCP 设计
4.1 空间树 MCP
Tool:query_space_tree
| 项 | 内容 |
|---|---|
| 作用 | 查询空间树节点及子节点,把「A 楼」「3 层」「全院」解析成节点 |
| 入参 | node_id(可选,空则根节点)、query(可选)、depth(默认 1) |
| 返回 | node、children[]、matches[];字段同 M3 §4.1 |
注:空间主数据以空间树为唯一来源,不单独定义楼栋/楼层编码。碳排按空间节点拆分时,dimension=space_node 由 MCP 在空间树中取对应层级节点聚合。
4.2 能耗指标 MCP
Tool:query_energy_metrics
| 项 | 内容 |
|---|---|
| 作用 | 查时间窗内的能耗、费用与对比 |
| 入参 | start_date、end_date、granularity(day/month)、dimension(space_node/system/time_period)、node_level(可选,按空间树层级聚合,默认取当前节点的下一级)、scope_node_id(空间树节点,默认根节点)、systems(可选) |
返回:
| 字段 | 类型 | 说明 |
|---|---|---|
| series | array | {bucket, energy_kwh, cost} |
| total | object | energy_kwh、cost、area_m2、intensity |
| compare | object | mom_pct、yoy_pct;无数据为 null |
| data_quality | object | completeness_pct、missing_dates[] |
注:费用、强度、环比/同比由 MCP 算好;无数据返回 null,不给 0。
4.3 碳核算 MCP
Tool:query_carbon
| 项 | 内容 |
|---|---|
| 作用 | 查时间窗内的碳排、来源结构与目标进度 |
| 入参 | start_date、end_date、dimension(space_node/system)、node_level(可选)、scope_node_id(空间树节点,默认根节点) |
返回:
| 字段 | 类型 | 说明 |
|---|---|---|
| emission_kg | number | 总碳排(kgCO₂e) |
| by_system | array | {key, emission_kg, share_pct} |
| by_node | array | {node_id, node_name, level, emission_kg, share_pct} |
| target | object | value、progress_pct、projected_year_end |
| factor_version | string | 因子库版本 |
| data_quality | object | missing_days[]、note |
注:因子库、分摊规则、核算标准由应用板块提供;MCP 只读,不在 Agent 侧做碳核算。因子版本必须随结果返回。
4.4 报告引擎 MCP
Tool:get_energy_report
| 项 | 内容 |
|---|---|
| 作用 | 查询报告引擎已定时生成的能源月报,返回可访问链接;不触发生成 |
| 入参 | month(YYYY-MM) |
| 返回 | status(ready / not_ready / failed)、report_url、title、generated_at、factor_version |
URL 规则:报告引擎按固定路径生成,{REPORT_BASE_URL}/energy/{YYYY-MM};拼接由 MCP 按配置模板完成,Agent 只使用返回值,不在提示词里手拼。月报全院统一一份,URL 不带地点参数。
注:报告由报告引擎的定时任务自动生成;M5 只查状态和 URL,不触发生成、不重排章节。status=not_ready 时写「本月报告尚未生成」,若报告引擎返回预计生成时间则一并给出。
5. Skill 设计
5.1 职责
只封装「能源月报」这一条固定流程,保证每次出报的摘要字段、顺序和链接位置一致。碳排问答不做 Skill——维度多(来源/节点/系统/目标),写死流程反而答不好。
5.2 流程
5.3 Skill 提示词草稿
你是上海交通大学新院区 IBMS 的管理者助手,负责查询并展示能源月报。
输入:
- 月份:从用户话里提取;未说明时用上一个自然月
- 范围:固定全院;月报统一一份,不区分地点
步骤:
1. 调 query_energy_metrics(start_date=月初, end_date=月末, granularity=month, dimension=system, scope_node_id=根节点)。
2. 调 query_carbon(start_date=月初, end_date=月末, dimension=system, scope_node_id=根节点)。
3. 调 get_energy_report(month=YYYY-MM)。
4. 按模板输出一段摘要 + 报告链接。
输出要求:
- 只用 Markdown,不输出 JSON、不用 HTML。
- 摘要最多 6 行:总能耗、费用、碳排各带环比;异常条数与闭环数;碳目标进度;报告链接。
- 不在聊天区复述报告全文,不重排章节。
- 报告 URL 直接用工具返回值;`status=not_ready` 时写「本月报告尚未生成」,不自己拼接 URL。
- 碳因子未配置时碳段写「碳核算暂不可用」,不估算。
- 因子版本必须写。
- 不做 PDF、不发邮件、不给快捷按钮。5.4 工具调用顺序与失败策略
| 步骤 | 调用 | 失败时 |
|---|---|---|
| 1 | query_energy_metrics | 不出月报,说明失败原因 |
| 2 | query_carbon | 摘要省略碳段,标注「碳核算暂不可用」 |
| 3 | get_energy_report | 摘要照常,链接写「本月报告尚未生成」 |
注:能耗是主数据,拿不到就不出报;碳与报告是分章节,失败降级输出,不整份作废。
5.5 碳排问答怎么走
不使用 Skill,直接由 ReAct 调工具:
- 先判断维度:来源/系统(system)、空间节点(space_node)、目标(target);
- 调
query_carbon对应dimension,需要总量/费用时同时调query_energy_metrics; - 只给数值、占比和因子版本,不做原因推测——原因归 M4,建议归 M6。
6. 定时任务配置
无。
M5 是被动问答。月度主动推送归 M10 月度报告;M10 的能源与碳段直接引用本场景的口径,不重复定义。
7. 权限与数据范围
- 管理者账号
M1001,demo 数据范围「全院」;生产按授权空间树节点裁剪。 - 数据裁剪在 MCP 层按
scope_node_id校验,不靠提示词约束。 - 只返回聚合碳排与能耗,不返回表计原始读数、个人数据。
- 报告链接需带访问校验:只能打开授权范围内的报告,链接不长期公开。
- 越权查询直接拒绝并说明当前范围。
8. 验收要点
| # | 验收项 | 标准 |
|---|---|---|
| 1 | 碳排查询 | 总量、来源表、饼图、目标进度齐全,数值与 MCP 一致 |
| 2 | 因子版本 | 每次碳排结果都写明因子库版本 |
| 3 | 月报 | 摘要 ≤6 行 + 报告链接,不在聊天区复述全文 |
| 4 | 链接 | URL 来自报告引擎返回值;未生成时明确写「本月报告尚未生成」 |
| 5 | 空值 | 因子/费用/同比缺失写「暂无」,不填 0 |
| 6 | 边界 | 不做归因、不给节能建议、不做 PDF/邮件 |
| 7 | 口径 | 分摊规则未定时节点拆分标「待定」,不硬拆 |
| 8 | 越权 | 查未授权节点被拒绝并给出范围说明 |
| 9 | 月报范围 | 全院统一一份,不区分地点;URL 固定 + 月份 |
9. 已确认与待确认
9.1 已确认
| # | 事项 | 结论 |
|---|---|---|
| 1 | 交互形态 | 被动问答,无定时任务;碳排/月报一轮一个 |
| 2 | 碳核算归属 | 因子库、分摊规则、标准由应用板块提供,M5 只读展示 |
| 3 | 月报形态 | 全院统一一份,聊天区摘要 + 报告引擎 URL,不做 PDF |
| 4 | 报告模板 | 报告引擎固定模板;动态 LLM 报告不在本期 |
| 5 | 与 M10 关系 | 月度主动推送归 M10,M5 不重复 |
| 6 | 空间主数据 | 以空间树为唯一来源,查询范围用 scope_node_id |
| 7 | 月报范围 | 不区分地点;固定 URL + 月份,不按楼栋/楼层生成 |
9.2 待确认
- 碳因子来源与版本:应用板块提供哪套因子、版本如何管理、分摊规则由谁定。
- 碳目标值:年度目标、进度口径、预计年终点由谁提供。
- 报告引擎与 URL:报告由报告引擎定时任务自动生成;需核实是否有全院统一月报模板、移动端/外部端能否正常展示、固定 URL 模板
{REPORT_BASE_URL}/energy/{YYYY-MM}是否可用、URL 有效期与权限校验、未生成时是否返回预计时间。 - 费用单价:分时电价还是平均电价;未定则费用列写「暂无」。
- 空间节点/系统拆分:公共区、冷热站如何分摊到节点;分摊未定时只给全院。
- 历史数据:是否已有 ≥1 年数据;不足时同比写「暂无」。
- 空间树与碳/能耗归属:表计与碳排数据是否都能挂到空间树节点;节点拆分是否按树聚合。
10. 关联文档
| 文档 | 关联内容 |
|---|---|
01_能源类AI能力-现状与自有发挥.md §4 示例 8/9、附录 B | 双碳核算与月报形态、因子/分摊待确认事项 |
08_移动端AI场景设计.md §7、§10 | 管理者时间线、M5 模块定义 |
00_总览-方案与主线.md §2、§4 | 能源主线定位、Skill/MCP 分层 |
公共规范.md | 前端形态、常驻会话、智能体边界、输出规范、场景 PRD 模板 |
注:上述文档与本文保持一致。如有差异,以本文为准,回写更新对应文档。