# Workflow 用户指南 本文档帮助您了解和使用 LangBot 的 Workflow(工作流)功能,通过可视化方式构建自动化的对话处理流程。 ## 目录 - [功能介绍](#功能介绍) - [快速入门](#快速入门) - [节点类型说明](#节点类型说明) - [编辑器使用指南](#编辑器使用指南) - [调试功能](#调试功能) - [常见问题解答](#常见问题解答) --- ## 功能介绍 ### 什么是 Workflow? Workflow(工作流)是 LangBot 提供的可视化自动化编排系统。通过拖拽节点、连接边的方式,您可以: - 📝 **构建复杂的对话流程**:使用条件分支、循环等控制节点 - 🤖 **调用 AI 能力**:集成 LLM、知识库检索、参数提取 - 🔗 **连接外部服务**:集成 Dify、n8n、Coze 等平台 - ⚡ **自动化任务执行**:消息触发、定时触发、Webhook 触发 ### Workflow vs Pipeline | 对比项 | Pipeline | Workflow | |-------|----------|----------| | 配置方式 | 表单配置 | 可视化拖拽 | | 流程控制 | 线性执行 | 支持分支、循环、并行 | | 适用场景 | 简单对话 | 复杂流程 | | 学习曲线 | 低 | 中等 | --- ## 快速入门 ### 第一步:创建 Workflow 1. 在侧边栏点击 **Workflow** 进入工作流列表 2. 点击右上角 **创建工作流** 按钮 3. 填写基本信息: - **名称**:给工作流起一个描述性的名字 - **描述**:可选,说明工作流的用途 - **图标**:选择一个 emoji 作为标识 ### 第二步:添加节点 进入编辑器后,左侧是节点面板,中间是画布区域,右侧是属性面板。 1. **添加触发节点**:从左侧面板拖拽一个"消息触发"节点到画布 2. **添加 AI 节点**:拖拽一个"LLM 调用"节点 3. **添加回复节点**:拖拽一个"回复消息"节点 ### 第三步:连接节点 1. 将鼠标悬停在触发节点的输出端口(右侧小圆点) 2. 按住鼠标拖拽到 LLM 节点的输入端口(左侧小圆点) 3. 同样方式连接 LLM 节点和回复节点 ``` [消息触发] ──▶ [LLM 调用] ──▶ [回复消息] ``` ### 第四步:配置节点 点击 LLM 调用节点,在右侧属性面板配置: - **运行方式**:选择"本地 Agent" - **系统提示词**:描述 AI 的角色和行为 - **模型**:选择要使用的 LLM 模型 点击回复消息节点配置: - **消息内容**:设置为 `{{nodes.llm_call.outputs.response}}`(引用 LLM 输出) ### 第五步:保存并绑定 1. 点击工具栏的 **保存** 按钮 2. 返回 Bot 配置页面 3. 在 Bot 的绑定设置中选择 **Workflow**,然后选择刚创建的工作流 恭喜!您已经创建了第一个 Workflow。 --- ## 节点类型说明 ### 触发节点 (Trigger) 触发节点是工作流的入口,定义何时启动执行。 | 节点 | 说明 | 输出 | |-----|------|------| | 消息触发 | 收到消息时触发 | message, sender_id, platform | | 定时触发 | 按 Cron 表达式定时触发 | timestamp | | Webhook 触发 | 收到 HTTP 请求时触发 | request_body, headers | | 事件触发 | 系统事件触发 | event_type, event_data | **消息触发配置示例**: ```yaml 触发条件: - 关键词匹配: ["帮助", "help"] - 平台: ["wechat", "qq"] ``` ### AI 节点 AI 节点用于调用各种 AI 能力。 | 节点 | 说明 | 典型用途 | |-----|------|---------| | LLM 调用 | 调用大语言模型 | 生成回复、理解意图 | | 问题分类器 | 对用户问题分类 | 路由到不同处理分支 | | 参数提取器 | 从文本提取结构化数据 | 提取订单号、日期等 | | 知识库检索 | 查询知识库 | RAG 增强回复 | **LLM 调用配置示例**: ```yaml 运行方式: 本地 Agent 模型: gpt-4 系统提示词: | 你是一个友好的客服助手。 请根据用户的问题提供帮助。 温度: 0.7 最大 Token 数: 2000 ``` ### 处理节点 (Process) 处理节点用于数据处理和外部调用。 | 节点 | 说明 | 典型用途 | |-----|------|---------| | 代码执行 | 执行 Python/JavaScript 代码 | 数据处理、格式转换 | | HTTP 请求 | 发送 HTTP 请求 | 调用外部 API | | 数据转换 | JSON/模板转换 | 数据格式化 | **HTTP 请求配置示例**: ```yaml URL: https://api.example.com/data 方法: POST 请求头: Content-Type: application/json Authorization: Bearer {{variables.api_key}} 请求体: | {"query": "{{message.content}}"} ``` ### 控制节点 (Control) 控制节点用于流程控制。 | 节点 | 说明 | 用途 | |-----|------|------| | 条件分支 | 二选一分支 | if-else 逻辑 | | 多路分支 | 多选一分支 | switch-case 逻辑 | | 循环 | 遍历数组 | 批量处理 | | 并行 | 同时执行多分支 | 并发处理 | | 等待 | 暂停执行 | 延时处理 | | 合并 | 合并多个分支 | 汇总结果 | **条件分支配置示例**: ```yaml 条件表达式: "{{nodes.classifier.outputs.category}}" == "complaint" 真分支: 投诉处理 假分支: 普通咨询 ``` ### 动作节点 (Action) 动作节点执行具体操作。 | 节点 | 说明 | 用途 | |-----|------|------| | 发送消息 | 主动发送消息 | 通知、推送 | | 回复消息 | 回复当前消息 | 对话回复 | | 存储数据 | 保存数据到存储 | 持久化 | | 调用 Pipeline | 调用现有 Pipeline | 复用现有流程 | **回复消息配置示例**: ```yaml 消息内容: | 感谢您的咨询! {{nodes.llm_call.outputs.response}} 如有其他问题,随时联系我。 ``` ### 集成节点 (Integration) 集成节点连接外部平台。 | 节点 | 说明 | 平台 | |-----|------|------| | Dify 工作流 | 调用 Dify 应用 | Dify | | Dify 知识库 | 查询 Dify 知识库 | Dify | | n8n 工作流 | 调用 n8n 流程 | n8n | | Langflow | 调用 Langflow 流程 | Langflow | | Coze Bot | 调用扣子 Bot | Coze | **Dify 工作流配置示例**: ```yaml API 地址: https://api.dify.ai/v1 API Key: sk-xxxxx 应用类型: workflow 同步对话历史: true ``` --- ## 编辑器使用指南 ### 画布操作 | 操作 | 方式 | |-----|------| | 平移画布 | 按住鼠标中键/空格+左键 拖拽 | | 缩放画布 | 鼠标滚轮 / 工具栏按钮 | | 框选多个节点 | 按住 Shift + 拖拽框选 | | 适应视图 | 点击工具栏"适应"按钮 | ### 节点操作 | 操作 | 方式 | |-----|------| | 添加节点 | 从左侧面板拖拽到画布 | | 移动节点 | 点击节点拖拽 | | 删除节点 | 选中后按 Delete / 点击工具栏删除 | | 复制节点 | 选中后 Ctrl+C / 工具栏复制 | | 粘贴节点 | Ctrl+V / 工具栏粘贴 | ### 连接操作 | 操作 | 方式 | |-----|------| | 创建连接 | 从输出端口拖拽到输入端口 | | 删除连接 | 点击连接线后按 Delete | | 选中连接 | 点击连接线 | ### 快捷键 | 快捷键 | 功能 | |-------|------| | Ctrl + Z | 撤销 | | Ctrl + Shift + Z | 重做 | | Ctrl + C | 复制 | | Ctrl + V | 粘贴 | | Delete | 删除选中 | | Ctrl + S | 保存 | ### 工具栏功能 ``` [撤销] [重做] | [放大] [缩小] [适应] | [复制] [粘贴] [删除] | [保存] [调试] ``` --- ## 调试功能 ### 启动调试 1. 点击工具栏的 **调试** 按钮 2. 在调试面板中配置初始数据: - **输入消息**:模拟用户发送的消息 - **会话 ID**:可选,用于测试会话变量 - **变量**:设置初始变量值 3. 点击 **开始调试** 按钮 ### 调试控制 | 按钮 | 功能 | |-----|------| | ▶️ 开始/继续 | 开始或继续执行 | | ⏸️ 暂停 | 暂停执行 | | ⏹️ 停止 | 停止执行 | | ⏭️ 单步 | 执行下一个节点 | ### 断点 - **设置断点**:点击节点上的断点图标 - **断点触发**:执行到断点时自动暂停 - **查看状态**:在暂停时查看节点的输入输出 ### 执行日志 调试面板下方显示实时日志: ``` [INFO] 2024-01-15 10:30:00 - Starting debug execution [INFO] 2024-01-15 10:30:00 - Executing node: message_trigger [DEBUG] 2024-01-15 10:30:00 - Node inputs: {"message": "你好"} [INFO] 2024-01-15 10:30:01 - Node completed in 50ms [INFO] 2024-01-15 10:30:01 - Executing node: llm_call ... ``` ### 节点状态颜色 | 颜色 | 状态 | |-----|------| | 灰色 | 待执行 | | 蓝色 | 执行中 | | 绿色 | 已完成 | | 红色 | 失败 | | 黄色 | 已跳过 | --- ## 常见问题解答 ### Q1:如何在节点间传递数据? 使用表达式语法引用其他节点的输出: ``` {{nodes.节点ID.outputs.输出名称}} ``` 例如: - `{{nodes.llm_call.outputs.response}}` - 引用 LLM 节点的响应 - `{{nodes.http_request.outputs.body}}` - 引用 HTTP 请求的响应体 ### Q2:如何使用变量? Workflow 支持三种变量类型: 1. **工作流变量**:`{{variables.变量名}}` 2. **会话变量**:`{{conversation_variables.变量名}}` 3. **消息上下文**:`{{message.content}}`、`{{message.sender_id}}` ### Q3:条件分支如何写条件表达式? 支持以下运算符: - 比较:`==`, `!=`, `>`, `<`, `>=`, `<=` - 逻辑:`and`, `or`, `not` - 包含:`in` 示例: ```python # 字符串比较 "{{nodes.classifier.outputs.intent}}" == "purchase" # 数值比较 {{nodes.extractor.outputs.amount}} > 1000 # 包含检查 "退款" in "{{message.content}}" ``` ### Q4:如何处理错误? 1. **节点级重试**:在节点配置中设置重试次数 2. **全局错误处理**:在 Workflow 设置中配置错误处理策略 3. **条件分支**:使用条件节点检查上一节点的状态 ### Q5:如何查看执行历史? 1. 进入 Workflow 详情页 2. 点击 **执行历史** 标签 3. 查看每次执行的状态、耗时、输入输出 ### Q6:Workflow 可以被多个 Bot 使用吗? 是的。一个 Workflow 可以被多个 Bot 绑定使用,但每个 Bot 只能绑定一个处理单元(Pipeline 或 Workflow)。 ### Q7:如何复制现有的 Workflow? 在 Workflow 列表页,点击工作流卡片右上角的菜单,选择"复制"即可创建副本。 ### Q8:支持版本回滚吗? 支持。每次保存都会创建新版本。在 Workflow 详情页可以查看版本历史并回滚到指定版本。 --- ## 最佳实践 ### 1. 合理命名 - 为节点和 Workflow 使用描述性名称 - 使用统一的命名规范 ### 2. 模块化设计 - 将复杂流程拆分为多个小 Workflow - 使用"调用 Pipeline"节点复用现有流程 ### 3. 错误处理 - 为关键节点设置重试机制 - 使用条件分支处理异常情况 - 添加日志记录便于排查问题 ### 4. 测试先行 - 使用调试功能充分测试 - 准备多种测试场景 - 检查边界情况 ### 5. 性能优化 - 避免不必要的节点 - 使用并行节点提高效率 - 合理设置超时时间 --- ## 更多资源 - [开发者文档](../development/workflow-system.md) - [设计文档](../../../plans/langbot-workflow-design.md) - [API 文档](../service-api-openapi.json)