dify工作流需自动识别会议预约三要素并检测日程冲突,冲突时生成带原因的可选时段方案。通过http工具调用日历api,大模型提取iso时间与会议室,条件路由校验完整性,代码节点解析冲突并推算空闲时段,最后由大模型格式化输出替代方案。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要在Dify中自动识别用户提出的会议预约请求是否与已有日程冲突,并在冲突发生时给出可选协调方案,而不是简单返回“已被占用”。这要求工作流能准确提取时间、会议室、参与人三要素,实时查询日历系统,再基于空闲时段生成替代建议。
配置日历数据源与API接入
进入Dify应用设置页→左侧菜单点击「工具」→点击「+ 添加工具」→选择「HTTP 请求」类型→填写名称为“企业日历查询”。
在请求配置中,URL填入你公司日历服务的RESTful接口地址(如https://api.company.com/v1/calendars/conflicts),请求方法选POST,Headers添加Authorization: Bearer {{env.CALENDAR_API_KEY}};这一步必须使用环境变量管理密钥,【硬编码API密钥会导致安全审计失败】。
在Body中使用JSON模板,确保包含三个动态字段:{"room_id":"{{ $.extracted_info.room }}","start_time":"{{ $.extracted_info.start }}","end_time":"{{ $.extracted_info.end }}"}。注意:字段名必须与你后端API实际接收参数完全一致,大小写和下划线都不能错。
构建多层意图识别与结构化提取节点
在工作流画布中拖入「大模型」节点,命名为“会议要素提取”,连接至用户输入节点。
双击编辑该节点:模型选Qwen2.5-7B或GLM-4;系统提示词写:“你是一个会议调度助手,请严格从用户输入中提取以下三项信息,仅输出标准JSON,不加任何解释或额外字段:{‘room’:字符串或null, ‘start’:ISO8601时间字符串或null, ‘end’:ISO8601时间字符串或null}。若未提及会议室,则room字段填null;若时间表述模糊(如‘下午’),按当天13:00–17:00估算并补全时区。”
这一步不可跳过——自然语言中的“明天三点”“下周二全天”必须转为机器可比对的ISO时间,否则后续冲突检测全部失效。
设计冲突判断与分支路由逻辑
拖入「条件路由」节点,连接上一节点的输出。
配置两个分支条件:
方法一:当{{ $.meeting_extract.output.room }} != null && {{ $.meeting_extract.output.start }} != null → 路由至「日历查询」节点
方法二:其余情况 → 路由至「澄清提问」节点(内容为:“请明确会议室编号及具体起止时间,例如:‘预约302会议室,10月22日14:00–15:30’”)
注意:这个条件判断必须同时校验room和start,只判一个会漏掉“我知道会议室但没说时间”的边缘case。
执行冲突检测并生成协调建议
第一步:将「日历查询」节点的响应结果接入「代码」节点,编写Python脚本解析返回的冲突数组。
第二步:若conflicts.length > 0,则调用「大模型」节点“生成协调方案”,系统提示词限定输出格式为:“[{‘time’:‘HH:MM–HH:MM’,‘reason’:‘原时段被张三占用’},{‘time’:‘HH:MM–HH:MM’,‘reason’:‘设备维护’}]”,最多返回3个替代时段。
第三步:将该节点输出直接接入「Answer」节点,用户收到的就是带原因说明的可点选时间段列表,无需二次追问。
这一步的关键是让模型只做格式化包装,不做时间计算——所有时段推算必须由代码节点完成,否则模型幻觉会导致推荐出已冲突的时间。











