Skip to content

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)
2LLM 输入上下文缺 面积/人数/当前月份(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 汇总) ​

按 SA_主动整备_Agent设计:

  1. 决策规则(§9,可配置注入):标准语义操作规则表 + 季节策略表 + 通用兜底;通过可配置规则注入(非知识库 RAG,确定性规则);空调目标温度按季节舒适基准(制冷 24℃/制热 22℃);light_brightness/curtain_position 等"保持当前值"。
  2. LLM 输入(§5.1):房间名/面积、会议主题/时间/人数、当前月份/舒适温度、RW 能力清单。
  3. 无动作语义(§9.5):无需调整时 plannedSummary 输出"当前环境已就绪"(recipes 可为空)。
  4. 执行顺序(§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-033-5 月过渡季开会,房间有 hvac_*hvac_* 不执行整备可能被写入验证缺失
T-PREP-0414 人大型会议 + 小房间人数/面积注入,辅助决策无人数/面积验证缺失
T-PREP-05环境已就绪(温度正对、灯已开)plannedSummary="当前环境已就绪",recipes 空被强制输出至少 1 条复现冲突

验证方式:Dify 调试页触发 Webhook,观察 LLM 节点输入(是否含【整备规则】段落、面积/人数/月份)与输出 plannedSummary/recipes(是否强制非空)。


5. 整改方向(供评审) ​

5.1 回补可配置决策规则 ​

将规则三件套打包为可配置规则(Dify 结构化配置/环境变量 JSON,或后台配置,实现层自定),由「构建 LLM 用户消息」code 依据房间 RW 清单筛选匹配行,翻译成【整备规则】段落注入。示例结构:

json
{
  "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 假设。

Released under the Private License.