SA 主动整备 - 设计实现偏差问题说明(现状 vs 产品预期)
状态:待评审 | 范围:空间智能整备「LLM 决策 + 校验 + 回调」子工作流 | 关联:SA_主动整备_Agent设计、SM-Weather-API_天气接入设计、SM-Personal-Learning_个性化学习设计 | 测试基线:SA_主动整备_测试方法(以 dify 实际行为为准)
问题定位:
空间智能整备(生产 Webhook).yml存在 1 处决策规则未落地(知识库/可配置规则缺失)、1 处 LLM 输入信息缺失(面积/人数/月份未注入)、1 处无动作语义冲突(生产"强制至少 1 条" vs PRD"当前环境已就绪"),另有 1 处执行顺序低优先级 edge case。
0. 问题清单总览
等级说明:由强哥手动维护优先级,P0(阻断/必须本期解决)> P1(本期应解决)> P2(后续版本/低风险)。下表为建议值,最终以强哥定级为准。
| # | 问题 | 等级 | 定性 | 处理建议 |
|---|---|---|---|---|
| 1 | 知识库决策规则(季节策略表 + 标准语义操作规则表 + 通用兜底)生产缺失 | P0 | 生产未实现·待落地 | 补回并做成可配置规则注入(见 §5.1) |
| 2 | LLM 输入上下文缺 面积/人数/当前月份(PRD §5.1 已有,生产未注入) | P0 | 生产未实现·待落地 | Hub 上下文补字段 + user_message 拼入(见 §5.2) |
| 3 | 无动作语义:生产"有 RW 至少 1 条不得空数组" vs PRD §9.5"当前环境已就绪" | P1 | 生产与 PRD 冲突 | 以 PRD(已就绪、允许空 recipes) 为准,生产整改(见 §5.3) |
| 4 | 执行顺序(§5.3a 配置顺序即执行顺序)Dify 不排序,交执行层 | P2 | 低风险 edge case | 执行层按空间逻辑映射顺序下发,暂记录不整改(见 §5.4) |
1. 问题一句话
生产 Webhook 子工作流相对 PRD,核心是「实现未落地」而非「设计冲突」:知识库决策规则(季节策略/标准语义规则/兜底)生产缺失(应但未可配置注入),LLM 输入缺 PRD §5.1 已定义的面积/人数/当月月份;此外无动作语义与 PRD §9.5 相悖(生产强制至少 1 条,PRD 期望"已就绪")。执行顺序仅属低优先级 edge case。天气、个性化已由姊妹篇落地,非偏差(见 §6)。
2. 产品预期(PRD 汇总)
- 决策规则(§9,可配置注入):标准语义操作规则表 + 季节策略表 + 通用兜底;通过可配置规则注入(非知识库 RAG,确定性规则);空调目标温度按季节舒适基准(制冷 24℃/制热 22℃);
light_brightness/curtain_position等"保持当前值"。 - LLM 输入(§5.1):房间名/面积、会议主题/时间/人数、当前月份/舒适温度、RW 能力清单。
- 无动作语义(§9.5):无需调整时
plannedSummary输出"当前环境已就绪"(recipes可为空)。 - 执行顺序(§5.3a):按空间逻辑映射中语义配置顺序下发(后执行覆盖先执行)。
3. 现状实现与偏差定性
3.1 知识库决策规则缺失(P0,生产未落地)
生产 System Prompt 为通用"职责分层"提示,未含规则三件套:
| PRD §9 规则 | 生产现状 | 影响 |
|---|---|---|
| 季节策略表(激活月/模式/舒适温度) | 无 | 空调目标温度无季节基准,靠 RO+天气+偏好自行定,可随机(如 21~27℃ 皆可) |
| 标准语义操作规则表 | 无 | light_brightness/curtain_position 等可被 LLM 任意改写,与"保持当前值"相悖 |
| 通用兜底(未匹配保持当前值) | 仅"禁止 RO 写入"在 Prompt 体现 | 未匹配语义无显式保持规则 |
定性:生产未实现 PRD 需求(§9)。需以可配置规则形式补回(非知识库)。注:已与强哥确认规则"需求上应该有、且需可配置",承载可落在 Dify 配置/变量或后台,不预设实现层。
3.2 LLM 输入缺 面积/人数/当前月份(P1,生产未落地)
PRD §5.1 已定义房间面积、会议人数、当前月份(及舒适温度);生产「构建 LLM 用户消息」仅注入标题、时段、空间、天气、偏好、RO、RW,未注入面积/人数/当前月份。
定性:PRD 无误,生产未实现。需回补。
3.3 无动作语义冲突(P1,生产与 PRD 相悖)
PRD §9.5:环境已就绪时
plannedSummary输出"当前环境已就绪"(recipes可为空)。生产:System Prompt "有可写 RW 时不得返回空 recipes;至少 1 条",校验 code 对空 recipes 记
llm_no_recipes。
定性:强哥已确认以 PRD("已就绪"、允许空 recipes) 为准;生产"强制至少 1 条"需整改,避免环境已就绪时仍强推一条无意义动作。
3.4 执行顺序(P2,低风险 edge case)
PRD §5.3a:按空间逻辑映射配置顺序下发(后执行覆盖先执行),用于群控
scene_mode与个体语义重叠场景。生产:
recipes为无序对象数组,Dify 不排序(选择权交执行层)。
定性:仅属边缘场景(群控 + 个体重叠),短期风险低;由执行层按空间逻辑映射顺序保证,Dify 不排序。记录为 P2 待观察项。
4. 测试用例(待实测清单)
| ID | 场景 | 设计预期 | 现状预期 | 判定 |
|---|---|---|---|---|
| T-PREP-01 | 夏季 28℃ 房间,无偏好/天气 | 目标温度=季节舒适 24℃(规则表) | 依 LLM 主观,量程内任意 | 验证缺失 |
| T-PREP-02 | 房间含 light_brightness,默认 80 | 保持当前值,不写 recipe | 可能被改写 | 验证乱改 |
| T-PREP-03 | 3-5 月过渡季开会,房间有 hvac_* | hvac_* 不执行整备 | 可能被写入 | 验证缺失 |
| T-PREP-04 | 14 人大型会议 + 小房间 | 人数/面积注入,辅助决策 | 无人数/面积 | 验证缺失 |
| T-PREP-05 | 环境已就绪(温度正对、灯已开) | plannedSummary="当前环境已就绪",recipes 空 | 被强制输出至少 1 条 | 复现冲突 |
验证方式:Dify 调试页触发 Webhook,观察 LLM 节点输入(是否含【整备规则】段落、面积/人数/月份)与输出 plannedSummary/recipes(是否强制非空)。
5. 整改方向(供评审)
5.1 回补可配置决策规则
将规则三件套打包为可配置规则(Dify 结构化配置/环境变量 JSON,或后台配置,实现层自定),由「构建 LLM 用户消息」code 依据房间 RW 清单筛选匹配行,翻译成【整备规则】段落注入。示例结构:
{
"season_policy": [
{ "months": [11,12,1,2], "active": true, "hvac_mode": "制热", "comfort_temp": 22 },
{ "months": [6,7,8,9], "active": true, "hvac_mode": "制冷", "comfort_temp": 24 },
{ "months": [3,4,5,10], "active": false }
],
"semantic_rules": [
{ "semantic_key": "hvac_power", "action": "set", "value": true },
{ "semantic_key": "hvac_target_temp", "action": "use_comfort_temp" },
{ "semantic_key": "hvac_mode", "action": "use_season_mode" },
{ "semantic_key": "light_power", "action": "set", "value": true },
{ "semantic_key": "light_brightness", "action": "keep" },
{ "semantic_key": "curtain_position", "action": "keep" }
]
}5.2 回补 LLM 输入
Hub 上下文新增 area/attendeeCount(或 bookerCount),currentMonth 可在实现层取当前时间;「构建 LLM 用户消息」在【会议信息】补面积/人数、【整备规则】补当前月份与季节基准。
5.3 无动作语义对齐
生产取消"有 RW 至少 1 条不得空数组"的强制,改为:环境已就绪时允许空 recipes,plannedSummary 输出"当前环境已就绪";校验 code 对空 recipes 走"已就绪"而非 llm_no_recipes 误判。
5.4 执行顺序(P2 观察项)
由执行层按空间逻辑映射语义配置顺序下发;Dify 不排序。暂不整改,作为 P2 待观察。
6. 已决策 / 不纳入项
| 项 | 决策 | 依据 |
|---|---|---|
| 天气接入 | 非偏差,已由 SM-Weather-API_天气接入设计 落地(用 Dify Tool,放弃 RAG) | 姊妹篇已实现,评审已确认 |
| 个性化偏好 | 非偏差,已由 SM-Personal-Learning_个性化学习设计 落地 | 姊妹篇已实现 |
输出 schema {s,a} → {plannedSummary, recipes} | 设计同步,主 PRD §5.2/§9.5/§8 已更新为 recipes/plannedSummary、summary ≤80 字 | 强哥拍板,与其姊妹篇、生产一致 |
| 无动作语义 | 以 PRD 为准("已就绪"、允许空 recipes) | 强哥纠正(反水),保留 PRD 原意 |
| Dify/Hub 谁实现(触发/去重/沉默期/通知/执行/dev 命名) | 不纳入,实现层细节、产品不强制 | 强哥:不太 care 技术实现、命名不强求 |
| 前端相关(通知卡片交互、深度调节面板、AppLink) | 不纳入本次走查 | 属端侧实现,另行走查 |
7. 例外说明
本工作流仅为整备主链路的「LLM 决策 + 校验 + 回调 confirm」切片;触发、去重、沉默期、通知卡片、设备下发由执行层/端侧承担,不在本走查范围(实现载体不预设)。
生产在值约束校验(
valueConstraint/allowedValues)、RO 禁写、weatherTemp/weatherCondition回调回传上做得比 PRD 更细,属生产优于设计的部分,非偏差。生产「解析 Recipes 校验」code 对非法值(越界/类型错/重复 key/非 RW key)做归一化拒绝,健壮性优于 PRD 裸 schema 假设。
