SA 空间预约:Agent 设计方案 (Semantic/AI Layer)
NOTE
模块文档导航
文档目的:描述会议预约专家(Meeting Specialist)如何通过多轮对话完成时间、人数及偏好提取,并结合后端实时忙闲数据实现预约建议与确认。
整体流程

1. 槽位定义与验证逻辑 (Slot Filling & Validation)
1.1 槽位定义与提取规则 (Slots & Extraction)
Agent 需严格遵循以下 JSON 结构从用户输入中提取槽位(详见 提示词模板):
| 槽位名称 | 类型 | 说明 | 示例 |
|---|---|---|---|
start_date | String | "yyyyMMdd",未指定则为 null (由逻辑层补全) | 20260121 |
start_time | String | 用户数字时间 "hh:mm",未指定则为 null (由逻辑层补全) | 05:00 |
period | String | 明确词时为 "AM" 或 "PM",无则为 null | PM |
capacity | Integer | 精确人数, 未指定则为 null (由逻辑层补全) | 20 |
duration_hours | Float | 时长(小时)或 null | 1.5 |
room_name | String | 用户指定的会议室精确名称或 null | 火星厅 |
topic_name | String | 会议主题。默认 "临时会议" | 研发周会 |
针对start_time举例
- 如 用户输入 "下午5点",则
start_time为 "5:00",period为 "PM" - 如 用户输入 "5点",则
start_time为 "5:00",period为null - 如 用户没输入时间,结合当前时间,如果当前时间是14:00,则默认
start_time为 "15:00",period为null
1.3 提示词模板 (Prompt Template)
markdown
# 角色:Slot提取器
严格从用户输入提取会议室预订slot。仅输出JSON,无额外文本。当前时间:{{CURRENT_TIME}}。
# Slot规则
[参照 1.1 槽位表数据结构]
# 输出示例
用户:"我想订个下午5点会议室"
输出:{"start_date":"null","start_time":"05:00","period":"PM",...}2. Dify 流程编排逻辑 (Dify Workflow Logic)
Agent 遵循以下核心编排逻辑完成预约闭环:
- 意图解析 (Slot Filling):从用户输入中提取槽位信息。若必填项缺失,直接追问。
- 时间流水线启动 (Time Pipeline):槽位初步完成后,直接调用
time pipeline处理逻辑。- 注:流水线内部负责日期补全(如缺失则默认为当前下个整点)等兜底逻辑。
- 时间结果处理:
- 4.1 错误拦截:若返回非法日期(昨天)、Period 矛盾(上午 15 点)、过期时间或非工作时间,则 Agent 进一步追问引导用户修正。
- 4.2 多候选确认:若返回多个可选时间(歧义),Agent 展示选项供用户进一步确认。
- 4.3 唯一解析:若返回唯一合法时间,则直接锁定时间并自动进入下一步。
- 资源流水线启动 (Resource Pipeline):时间锁定后,调用物理资源检索逻辑。
- 资源结果处理:
- 5.1 有效推荐:返回可用会议室列表,Agent 直接发送前端展示组件。
- 5.2 冲突后推荐:原会议室全忙但有建议方案,Agent 回复话术引导后发送前端展示组件。
- 5.3 无房可用:返回全忙且无推荐,Agent 回复无法预订的话术。
- 用户最终决策:用户在前端组件(卡片)中完成最终的点击预约操作。
2.1 编排架构流程图
2.2 物理归一化逻辑 (Normalization)
Time Pipeline 内处理 时间归一化逻辑
- Time Parsing: 结合
start_time与period由逻辑层进行判断(如:下午5点 -> 17:00)。 - Auto Date: 若
start_date为空,逻辑层默认指向Today,并支持贪婪策略 - 等等逻辑 详见 time pipeline 执行逻辑文档。
2.3 澄清追问与边缘处理 (Clarification & Edge Cases)
为了提升对话的“智能体感”,Agent 需具备以下场景的针对性回复逻辑:
| 异常类型 | 判定条件 | Agent 预期话术 (示例) |
|---|---|---|
| 时间模糊 | 返回 Status: AMBI | "没问题,请问您是想订 上午 {X} 点 还是 下午 {X} 点?" |
| 时间过期 | 返回 Status: ERROR (已过去) | "抱歉,您选择的时间点已经过去了,要不换成 今天下个整点?" |
| 完全冲突 | available_list 为空且无平替 | "哎呀,今天下午这个时段的会议室都满了。建议您看看 明天上午 或者 切换到其他楼层?" |
| 容量严重不足 | 用户需求 > 空间 Max | "305 只能坐 20 人,装不下 50 位哦。我为您推荐了 隔壁大礼堂,您看可以吗?" |
| 任务中断 | 多轮对话中途用户话题转移 | (保持上下文 5 分钟) 若用户问别的,回复完后主动兜底:"刚才的会议室还要订吗?" |
2.4 终端交互与执行 (UI & Action)
当 Resource Pipeline 返回 SUCCESS 状态时,Agent 需组织前端组件完成闭环:
- 候选列表组件 (Meeting Room Card):
- 内容:展示 Top 3 推荐会议室。
- 元素:房间名、楼层、容纳人数、IoT 实时状态(如:“24℃ 舒适”)。
- 交互:点击“立即预定”按钮。
- 最终预定触发 (Execution):
- 用户点击组件后,Agent 调用后台执行逻辑(Task C)。
- 接口分流:根据企业配置调用
飞书/钉钉/自有系统的Create Event接口。
- 执行反馈:
- 成功:展示“预定成功”状态卡片,并提供“查看详情”或“邀请参会人”的 AppLink (飞书客户端等) 跳转。
- 失败:提示具体原因(如:“登录状态失效,请重新登录”或“该时段刚刚被其他同事抢占”),引导重新选择。
4. 相关设计参考
- 路由分发层:意图识别与分发技术方案
- Time Pipeline:SA_空间预约_时间处理逻辑
- Resource Pipeline:SA_空间预约_物理执行逻辑
