Skip to content

SA 会议预定 - 设计实现偏差问题说明(现状 vs 产品预期) ​

状态:待评审 | 范围:对话端(Chatbot)会议预定 | 关联:SA 空间预约 Agent 设计、时间处理逻辑、物理执行逻辑、会议室推荐算法逻辑、查询取消功能设计 | 问题定位:Dify 编排实现相对设计文档存在多处简化、下沉与缺失


0. 问题清单总览 ​

等级说明:由强哥手动维护优先级,P0(阻断/必须本期解决)> P1(本期应解决)> P2(后续版本/需求点)。未定级时留空。

#问题等级定性处理建议
1上下午歧义澄清(AMBI)被移除,改为 LLM 默认推断P1设计简化,稳定性待实测实测后定(见 §4.1)
2NOW / ASAP 语义标签完全未实现P2功能缺失(需求点)记录为需求,未排期
3指名房间冲突时无平替推荐P0功能缺失待整改
4推荐排序算法未在 Dify 层落地(是否按人数/房间大小排序待后端确认)P1下沉 / 待确认对齐后端后定
5日期范围查询仅支持"单日 + 默认 7 天",范围/上周查询缺失P1功能缺失待整改

1. 问题一句话 ​

会议预定 Dify 子流程相对设计文档在"时间消歧、即时/尽快预订、冲突平替、推荐排序、日期范围查询"五个能力点上存在简化或缺失,其中部分为明确的验收缺口(对应测试用例集失效项),部分为设计决策待确认。


2. 产品预期(PRD 汇总) ​

按设计文档的原始定义:

  1. 时间三态决策(OK / AMBI / ERROR):上下午歧义时输出 AMBI 引导用户确认(如"订9点的" → "请确认是上午9点还是晚上9点?");"上午 16:00" 等时空矛盾输出 ERROR 拦截(时间处理逻辑 §3、测试用例集 TP-03/TP-05)。
  2. NOW / ASAP 语义:"现在/马上" → 即时预订;"尽快/越快越好" → ASAP 专用贪婪搜索,返回最早可用空档(测试用例集 NL-03/NL-04/RP-03)。
  3. 冲突平替(Case 1):指名房间被占/设施不满足时,剥离房间限定,按容量硬约束推荐同规格替代房间(推荐算法逻辑 §4.1)。
  4. 推荐排序:模糊预约按容量适配度 Fit_cap 排序,避免大房小用(如 10 人优先推荐 12 人房而非 30 人房,算法 §3 策略 B)。
  5. 日期范围查询:支持单日与日期范围(如"这周/下周/6.10-6.20 的会"),过去日期按范围照常展示(查询取消设计 §4.1 / 测试用例 Q-12~Q-19)。

3. 现状实现与偏差定性 ​

3.1 时间状态模型:三态 → 两态(AMBI 被移除) ​

现状 会议预约时间校验 只输出 ok / reject(含 past / missing_time / outside_hours / error),period 槽位已删除,上下午语义由 Slot 提取 Prompt 直接转成 24h 制,且明文规定了"未指上下午的 1–11 点默认下午"。由此:

  • 上下午歧义不再追问,由 LLM 单次"替用户做决定";

  • "上午 16:00" 这类时空矛盾输入,因 Prompt 明确"时间字段按字面提取、不做合理性校验",会被提取为 16:00 并通过工作时段校验(16 点在 13:00–22:00 内),静默按下午 4 点执行,无任何冲突拦截。

3.2 NOW / ASAP 缺失 ​

Prompt 中无 NOW / ASAP 语义标签,也无对应执行分支。输入"现在订个会议室 / 越快越好"时,Slot 提取器无时间可输出 → 落入 missing_time 追问分支,直接要求补充开始时间。

3.3 指名房间冲突无平替 ​

现状 输出可用会议室 在"指定房间 + 空结果"时仅回复"您申请预订的会议室当前已被占用,无法完成预约",不剥离房间限定发起同规格平替检索。

3.4 推荐排序未在 Dify 层落地(待后端确认) ​

现状 Dify 层只构造 startTime/endTime/capacityAtLeast/topK/roomDeviceIds/locationIds 请求体,不携带任何排序权重,也不做 Top 3 截断(默认 topK 20),排序完全由后端 list_available_meeting_rooms 决定。算法文档中的 Fit_cap(容量适配度)与 W_base(业务权重)公式是否在后端实现,待确认。

3.5 日期范围查询缺失 ​

现状 会议查询时间校验:有 date → [date, +1天),无 date → [今天, +7天)。即仅支持"单日"与"默认 7 天","这周/下周/指定日期区间"会被折叠为单日查询;且过去日期被钳到今天,上周会议无法查到。


4. 测试用例(实测清单) ​

4.1 上下午歧义处理稳定性实测(P0,先实测后定) ​

目的:验证当前"LLM 默认推断下午"的策略是否稳定,是否会偶发"大冒险"(随机推断上午/下午),以及时空矛盾是否被静默放行。

ID输入设计预期现状预期判定验证方式
T-AM-01"订个 9 点的会议室"(无上下午)AMBI 追问"上午还是下午"固定输出 start_time=15:00设计差异同一输入跑 10 次,核对输出是否 100% 一致且为 15:00
T-AM-02"订明天 9 点的会"AMBI 追问固定 15:00设计差异同上
T-AM-03"上午 16 点开会"(时空矛盾)ERROR"上午没有 16 点"提取 16:00 且通过校验,静默按 16:00 预订缺陷观察是否出现冲突拦截;无拦截即确认静默放行
T-AM-04"上午 9 点开会" vs "晚上 9 点开会"09:00 / 21:0009:00 / 21:00稳定基线确认 AM/PM 正向编码稳定,作为对照

结论判定标准:

  • T-AM-01/02 若 10 次输出一致 → 现状可接受(行为确定,仅与设计文档有出入),更新设计文档对齐即可;

  • 若出现不一致(随机上午/下午)→ 属"大冒险"缺陷,必须回退为 AMBI 追问或加默认值兜底。

4.2 NOW / ASAP(需求点记录,未排期) ​

ID输入设计预期现状预期判定
T-NA-01"现在订个会议室"start_time=NOW 即时预订时间缺失 → 追问"请补充会议开始时间"功能缺失
T-NA-02"越快越好,帮我找间会议室"start_time=ASAP 贪婪搜索最早空档同 T-NA-01,追问或按普通 booking 处理功能缺失

4.3 指名房间冲突平替 ​

ID输入前置条件设计预期现状预期判定
T-REP-01"订一下 801 会议室"801 该时段被占CONFLICT:解释占用 + 推荐同规格平替(如 802)仅回复"已被占用,无法完成预约",无平替功能缺失
T-REP-02"订 802"802 该时段被占,且无满足容量硬约束的替代返回失败话术(无平替)同现状基线一致

4.4 推荐排序(需后端确认) ​

ID输入前置条件设计预期现状预期判定
T-SORT-01"5 个人开会"801(10人) / 802(20人) 均空闲按容量适配度优选 801返回顺序取决于后端;若后端未按人数适配排序,则为缺失待后端确认
T-SORT-02"找个能坐 15 人的房间"801(10人) / 802(20人)硬过滤 801,仅推荐 802观察 capacityAtLeast=15 是否被后端硬过滤待后端确认

4.5 日期范围查询 ​

ID输入设计预期现状预期判定
T-DATE-01"查一下这周有什么会"[周一, 周日] 全周date 解析为周一 → 仅查 [周一, 周二)功能缺失
T-DATE-02"查一下 6月10号到6月20号的会"[6/10, 6/20] 区间仅查 [6/10, 6/11)功能缺失
T-DATE-03"查一下上周的会"按上周日期区间照常展示(Q-19)过去日期被钳到今天 → 上周会议查不到功能缺失

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

  1. 上下午歧义:按 T-AM 实测结论执行——稳定则更新设计文档对齐现状(含将"上下午定义"移交给会议系统侧,见 §6);不稳定则回退 AMBI 追问。
  2. 时空矛盾静默放行(T-AM-03):无论上下午策略如何,建议在时间校验节点补充 start_time 合理性硬校验(如 00–23 点范围 + 基础工作时段),避免"上午 16 点"被静默预订。
  3. 平替推荐:在 输出可用会议室 节点增加降级分支——指定房间空结果时,剥离 room_name 限定、保留容量/设备约束二次检索同规格替代,并输出"已被占用,为您推荐以下房间"。
  4. 推荐排序:与后端确认 list_available_meeting_rooms 是否实现容量适配度排序;若未实现,将 Fit_cap 计算下沉至后端并给出排序字段,Dify 层按返回顺序截取 Top 3。
  5. 日期范围查询:会议查询时间校验 支持 date_to,slot 提取按查询取消设计 §4.1 补充 date_from/date_to 两字段,范围与过去日期照常下发。
  6. NOW / ASAP:作为独立需求点排期(涉及 Time Pipeline 新语义 + ASAP 搜索接口),本期不整改。

6. 已决策 / 不纳入项(评审确认后冻结) ​

项决策依据
营业时间硬编码(_DEFAULT_MEETING_CONFIG)不算问题,保持现状当前无对外面板配置诉求,硬编码可接受;设计文档"软约束配置化"暂不落地
时长超限校验(max_duration_hours)本期不做会议系统后续升级会提供该约束数据,应从后端获取而非本地定义
上下午定义(period / AM-PM 逻辑)本地不再维护同上,随会议系统升级从后端获取;本地仅保留"默认下午"兜底策略

7. 例外说明 ​

  • 本问题不影响正向预订主链路:指名/模糊预订在时间合规、房间空闲时行为正确。

  • 营业时间过滤、过期拦截、设施过滤(roomDeviceIds)等已落地能力不在本次问题范围。

  • 多轮支持正常 ✅:主智能体经 Chatflow Invoker 传入 chathistory(近 3 轮),会议词槽提取 节点用户提示词含"历史:{{#...chathistory#}}",且 Slot Prompt 内置"上下文继承"规则(历史已提字段、当前输入未否定则继承)——多轮槽位延续可用。

Released under the Private License.