使用 Dify 快速构建对话式工作流从零打造会议室预约智能体前言随着 AI 技术的普及越来越多的企业开始探索如何将大语言模型LLM融入日常业务流程中。Dify是一款开源的 LLM 应用开发平台提供了可视化的工作流编排能力让开发者无需编写大量代码就能快速构建对话式 AI 应用。本文将手把手带你使用 Dify 搭建一个会议室预约智能体实现自然语言驱动的会议室查询与预约功能并重点介绍如何处理用户知道/不知道目标会议室这一关键分支逻辑。一、Dify 简介DifyDo It For You是开源的 LLM 应用开发平台核心特性如下可视化工作流编排通过拖拽节点设计 AI 应用逻辑无需写代码多模型支持兼容 OpenAI、Claude、Gemini、本地 Ollama 等主流模型工具调用Tool Use支持自定义 HTTP API 工具与外部系统集成对话式交互天然支持多轮对话、上下文记忆一键发布可直接生成 Web 应用、嵌入式组件或 API 接口二、场景分析与核心挑战在设计会议室预约智能体时有一个关键的用户体验问题需要解决用户是否已经知道自己要预约哪个会议室这两种情况对应完全不同的处理逻辑用户状态示例输入处理逻辑已知会议室帮我预约 101 会议室明天上午10点开2小时直接查询该会议室详情确认是否可用然后创建预约未知会议室帮我预约一个明天上午10点可以用的会议室查询所有符合条件的空闲会议室列出供用户选择再确认预约如果不处理这个分支智能体要么死板地要求用户指定会议室要么随意选一个不符合需求的房间用户体验都会很差。三、工作流整体架构设计完整的工作流分为以下几个阶段核心是双层分支判断用户输入 └─► 意图识别查询 / 预约 / 取消 ├─ [查询] → 查询所有会议室 → 展示结果 ├─ [取消] → 提取预约编号 → 取消预约 → 反馈 └─ [预约] → 是否指定了会议室 ├─ [已指定] → 查询该会议室详细信息 │ └─ 是否可用 │ ├─ [可用] → 收集信息 → 创建预约 │ └─ [不可用] → 告知冲突询问是否换房间 └─ [未指定] → 查询所有空闲会议室列表 └─ 展示列表让用户选择 └─ 用户选择后 → 创建预约四、环境准备1. 部署 Dify推荐使用 Docker Compose 快速部署本地版git clone https://github.com/langgenius/dify.git cd dify/docker cp .env.example .env docker compose up -d启动后访问http://localhost/install完成初始化。2. 配置模型供应商进入控制台 →设置→模型供应商添加模型 API Key推荐使用gpt-4o或claude-3-5-sonnet以获得更好的意图理解效果。五、工作流节点详细配置Step 1意图识别节点LLM第一层判断识别用户意图是查询、预约还是取消。System Prompt你是会议室预约助手请分析用户输入的意图只返回以下三种之一 - QUERY用户想查询会议室可用情况 - BOOK用户想预约会议室 - CANCEL用户想取消已有预约 只返回意图英文标识不要有任何其他内容。Step 2预约意图下的是否指定会议室判断节点LLM当意图为 BOOK 时进入第二层判断用户是否明确指定了会议室。System Prompt分析用户的预约请求判断用户是否明确指定了具体的会议室如101会议室、大会议室等具体名称或编号。 - 如果用户明确提到了具体会议室名称/编号返回SPECIFIED - 如果用户没有指定或者只说找一个、随便一个、合适的返回UNSPECIFIED 只返回 SPECIFIED 或 UNSPECIFIED不要其他内容。这一步是整个工作流的关键设计通过 LLM 的语义理解能力来判断用户意图的细节而不是依赖关键词匹配容错性更强。Step 3A用户已指定会议室 → 查询具体会议室信息HTTP Request首先用 LLM 从用户输入中提取会议室标识再调用 API 查询详情。HTTP Request 节点配置方法GETURL{{env.API_BASE}}/api/rooms/{{room_identifier}}/availability参数date{{date}}start_time{{start_time}}duration{{duration_hours}}返回结果包含该会议室的详细信息容量、设备、当前时段是否可用再通过 IF/ELSE 节点判断是否可用分别进入创建预约或告知冲突并引导换房两条路径。Step 3B用户未指定会议室 → 查询所有空闲会议室HTTP Request当用户没有指定会议室时查询所有符合时间条件的空闲房间供用户选择。HTTP Request 节点配置方法GETURL{{env.API_BASE}}/api/rooms/available参数date{{date}}start_time{{start_time}}duration{{duration_hours}}capacity{{required_capacity}}Step 4生成选项列表等待用户选择LLM拿到空闲会议室列表后用 LLM 节点生成友好的选择提示展示各会议室的楼层、容量、设备信息让用户回复序号或名称选择。为您找到以下 3 个符合条件的空闲会议室请选择1️⃣101会议室1楼可容纳8人配备投影仪、白板2️⃣201会议室2楼可容纳12人配备大屏、视频会议3️⃣大会议室3楼可容纳30人配备投影仪、麦克风请回复序号或会议室名称进行选择。Step 5创建预约HTTP Request两条路径最终汇合到此节点调用预约接口POST {{env.API_BASE}}/api/bookings { room_id: {{room_id}}, date: {{date}}, start_time: {{start_time}}, duration_hours: {{duration_hours}}, attendees: {{attendees}}, title: {{title}} }Step 6生成最终回复LLM将 API 返回的结构化结果转化为自然语言礼貌地确认预约信息给用户。六、完整对话效果演示场景一用户明确指定会议室走快速路径角色内容用户帮我预约 101 会议室明天上午10点开2小时主题是产品评审参与人张三、李四助手✅ 101 会议室明天 10:00-12:00 时段空闲预约创建成功 时间2024-03-21 10:00 - 12:00 地点101会议室1楼8人投影仪 主题产品评审 参与人张三、李四预约编号#BK20240321001场景二用户未指定会议室走推荐路径角色内容用户明天上午10点我要开个会大约2小时6个人帮我预约个合适的会议室助手为您找到以下 2 个符合条件的空闲会议室1️⃣ 101会议室1楼可容纳8人2️⃣ 201会议室2楼可容纳12人请回复序号选择。用户选1助手✅ 预约成功101会议室2024-03-21 10:00-12:00编号 #BK20240321002场景三指定会议室但已被占用角色内容用户帮我预约201会议室明天下午2点1小时助手⚠️ 很抱歉201会议室明天 14:00-15:00 已被占用。同时段空闲的有101会议室8人、大会议室30人是否换一个七、关键设计要点总结双层意图分析第一层识别动作类型查询/预约/取消第二层在预约场景下进一步判断是否指定会议室让分支逻辑更精准语义理解代替关键词匹配用 LLM 判断用户是否指定了会议室而不是正则表达式大幅提升容错性两条路径最终汇合已指定和未指定两条路径在用户最终确认会议室后汇合到同一创建预约节点避免重复配置渐进式信息收集不要求用户一次说完所有信息通过多轮对话逐步补全降低用户输入门槛八、发布与集成测试通过后可以通过以下方式发布Web 应用直接获得可访问链接分享给团队使用API 接口集成到钉钉/飞书机器人嵌入组件嵌入现有 OA 系统页面curl -X POST https://your-dify-domain/v1/chat-messages -H Authorization: Bearer YOUR_API_KEY -H Content-Type: application/json -d { query: 帮我预约明天下午3点一个可以容纳10人的会议室, response_mode: blocking, user: user_001 }总结本文通过会议室预约场景重点介绍了如何在 Dify 工作流中设计双层意图判断逻辑先识别用户动作再细化判断用户是否知道目标会议室从而走不同路径——直接查询指定房间详情或者列出所有空闲房间供用户选择。这种设计思路同样适合任何需要已知目标与未知目标两种路径的业务场景如工单分配、商品推荐、知识库查询等。借助 Dify 的可视化工作流整个逻辑清晰可见、易于维护是企业快速落地 AI 助手的理想选择。
使用 Dify 快速构建对话式工作流:从零打造会议室预约智能体
使用 Dify 快速构建对话式工作流从零打造会议室预约智能体前言随着 AI 技术的普及越来越多的企业开始探索如何将大语言模型LLM融入日常业务流程中。Dify是一款开源的 LLM 应用开发平台提供了可视化的工作流编排能力让开发者无需编写大量代码就能快速构建对话式 AI 应用。本文将手把手带你使用 Dify 搭建一个会议室预约智能体实现自然语言驱动的会议室查询与预约功能并重点介绍如何处理用户知道/不知道目标会议室这一关键分支逻辑。一、Dify 简介DifyDo It For You是开源的 LLM 应用开发平台核心特性如下可视化工作流编排通过拖拽节点设计 AI 应用逻辑无需写代码多模型支持兼容 OpenAI、Claude、Gemini、本地 Ollama 等主流模型工具调用Tool Use支持自定义 HTTP API 工具与外部系统集成对话式交互天然支持多轮对话、上下文记忆一键发布可直接生成 Web 应用、嵌入式组件或 API 接口二、场景分析与核心挑战在设计会议室预约智能体时有一个关键的用户体验问题需要解决用户是否已经知道自己要预约哪个会议室这两种情况对应完全不同的处理逻辑用户状态示例输入处理逻辑已知会议室帮我预约 101 会议室明天上午10点开2小时直接查询该会议室详情确认是否可用然后创建预约未知会议室帮我预约一个明天上午10点可以用的会议室查询所有符合条件的空闲会议室列出供用户选择再确认预约如果不处理这个分支智能体要么死板地要求用户指定会议室要么随意选一个不符合需求的房间用户体验都会很差。三、工作流整体架构设计完整的工作流分为以下几个阶段核心是双层分支判断用户输入 └─► 意图识别查询 / 预约 / 取消 ├─ [查询] → 查询所有会议室 → 展示结果 ├─ [取消] → 提取预约编号 → 取消预约 → 反馈 └─ [预约] → 是否指定了会议室 ├─ [已指定] → 查询该会议室详细信息 │ └─ 是否可用 │ ├─ [可用] → 收集信息 → 创建预约 │ └─ [不可用] → 告知冲突询问是否换房间 └─ [未指定] → 查询所有空闲会议室列表 └─ 展示列表让用户选择 └─ 用户选择后 → 创建预约四、环境准备1. 部署 Dify推荐使用 Docker Compose 快速部署本地版git clone https://github.com/langgenius/dify.git cd dify/docker cp .env.example .env docker compose up -d启动后访问http://localhost/install完成初始化。2. 配置模型供应商进入控制台 →设置→模型供应商添加模型 API Key推荐使用gpt-4o或claude-3-5-sonnet以获得更好的意图理解效果。五、工作流节点详细配置Step 1意图识别节点LLM第一层判断识别用户意图是查询、预约还是取消。System Prompt你是会议室预约助手请分析用户输入的意图只返回以下三种之一 - QUERY用户想查询会议室可用情况 - BOOK用户想预约会议室 - CANCEL用户想取消已有预约 只返回意图英文标识不要有任何其他内容。Step 2预约意图下的是否指定会议室判断节点LLM当意图为 BOOK 时进入第二层判断用户是否明确指定了会议室。System Prompt分析用户的预约请求判断用户是否明确指定了具体的会议室如101会议室、大会议室等具体名称或编号。 - 如果用户明确提到了具体会议室名称/编号返回SPECIFIED - 如果用户没有指定或者只说找一个、随便一个、合适的返回UNSPECIFIED 只返回 SPECIFIED 或 UNSPECIFIED不要其他内容。这一步是整个工作流的关键设计通过 LLM 的语义理解能力来判断用户意图的细节而不是依赖关键词匹配容错性更强。Step 3A用户已指定会议室 → 查询具体会议室信息HTTP Request首先用 LLM 从用户输入中提取会议室标识再调用 API 查询详情。HTTP Request 节点配置方法GETURL{{env.API_BASE}}/api/rooms/{{room_identifier}}/availability参数date{{date}}start_time{{start_time}}duration{{duration_hours}}返回结果包含该会议室的详细信息容量、设备、当前时段是否可用再通过 IF/ELSE 节点判断是否可用分别进入创建预约或告知冲突并引导换房两条路径。Step 3B用户未指定会议室 → 查询所有空闲会议室HTTP Request当用户没有指定会议室时查询所有符合时间条件的空闲房间供用户选择。HTTP Request 节点配置方法GETURL{{env.API_BASE}}/api/rooms/available参数date{{date}}start_time{{start_time}}duration{{duration_hours}}capacity{{required_capacity}}Step 4生成选项列表等待用户选择LLM拿到空闲会议室列表后用 LLM 节点生成友好的选择提示展示各会议室的楼层、容量、设备信息让用户回复序号或名称选择。为您找到以下 3 个符合条件的空闲会议室请选择1️⃣101会议室1楼可容纳8人配备投影仪、白板2️⃣201会议室2楼可容纳12人配备大屏、视频会议3️⃣大会议室3楼可容纳30人配备投影仪、麦克风请回复序号或会议室名称进行选择。Step 5创建预约HTTP Request两条路径最终汇合到此节点调用预约接口POST {{env.API_BASE}}/api/bookings { room_id: {{room_id}}, date: {{date}}, start_time: {{start_time}}, duration_hours: {{duration_hours}}, attendees: {{attendees}}, title: {{title}} }Step 6生成最终回复LLM将 API 返回的结构化结果转化为自然语言礼貌地确认预约信息给用户。六、完整对话效果演示场景一用户明确指定会议室走快速路径角色内容用户帮我预约 101 会议室明天上午10点开2小时主题是产品评审参与人张三、李四助手✅ 101 会议室明天 10:00-12:00 时段空闲预约创建成功 时间2024-03-21 10:00 - 12:00 地点101会议室1楼8人投影仪 主题产品评审 参与人张三、李四预约编号#BK20240321001场景二用户未指定会议室走推荐路径角色内容用户明天上午10点我要开个会大约2小时6个人帮我预约个合适的会议室助手为您找到以下 2 个符合条件的空闲会议室1️⃣ 101会议室1楼可容纳8人2️⃣ 201会议室2楼可容纳12人请回复序号选择。用户选1助手✅ 预约成功101会议室2024-03-21 10:00-12:00编号 #BK20240321002场景三指定会议室但已被占用角色内容用户帮我预约201会议室明天下午2点1小时助手⚠️ 很抱歉201会议室明天 14:00-15:00 已被占用。同时段空闲的有101会议室8人、大会议室30人是否换一个七、关键设计要点总结双层意图分析第一层识别动作类型查询/预约/取消第二层在预约场景下进一步判断是否指定会议室让分支逻辑更精准语义理解代替关键词匹配用 LLM 判断用户是否指定了会议室而不是正则表达式大幅提升容错性两条路径最终汇合已指定和未指定两条路径在用户最终确认会议室后汇合到同一创建预约节点避免重复配置渐进式信息收集不要求用户一次说完所有信息通过多轮对话逐步补全降低用户输入门槛八、发布与集成测试通过后可以通过以下方式发布Web 应用直接获得可访问链接分享给团队使用API 接口集成到钉钉/飞书机器人嵌入组件嵌入现有 OA 系统页面curl -X POST https://your-dify-domain/v1/chat-messages -H Authorization: Bearer YOUR_API_KEY -H Content-Type: application/json -d { query: 帮我预约明天下午3点一个可以容纳10人的会议室, response_mode: blocking, user: user_001 }总结本文通过会议室预约场景重点介绍了如何在 Dify 工作流中设计双层意图判断逻辑先识别用户动作再细化判断用户是否知道目标会议室从而走不同路径——直接查询指定房间详情或者列出所有空闲房间供用户选择。这种设计思路同样适合任何需要已知目标与未知目标两种路径的业务场景如工单分配、商品推荐、知识库查询等。借助 Dify 的可视化工作流整个逻辑清晰可见、易于维护是企业快速落地 AI 助手的理想选择。