前面三天我们学会了创建 Bot、编写 Prompt、使用插件。但如果你想让 Bot 处理复杂的业务逻辑——比如"先搜索信息,再根据结果决定下一步操作",或者"循环处理一批数据"——简单的对话就不够用了。这时候就需要工作流(Workflow)。
一、什么是工作流
1.1 工作流 vs 简单对话
在 Day 2 我们创建的 Bot,本质上是"一问一答"的对话模式:用户输入 → AI 思考 → 返回结果。这种模式适合简单场景,但遇到复杂任务就力不从心了。
对比示例:旅行规划助手
❌ 简单对话模式的局限
用户:"帮我规划一下北京三日游"
Bot:"好的,我建议第一天去故宫..."(一次性输出所有内容)
问题:无法查询实时天气、无法根据预算调整方案、无法检查景点开放时间
✅ 工作流模式的优势
1. 调用天气插件 → 获取北京未来三天天气
2. 根据天气判断 → 下雨则调整室内景点
3. 调用地图插件 → 计算景点间距离
4. 根据预算筛选 → 生成个性化方案
5. 格式化输出 → 生成结构化行程表
优势:多步骤协作、条件判断、数据传递、结构化输出
1.2 工作流的核心概念
Coze 的工作流是一个可视化的流程图,由三个核心元素组成:
节点(Node)
每个节点代表一个操作,比如"调用 LLM"、"执行插件"、"条件判断"。节点之间通过连线传递数据。
连线(Edge)
定义执行顺序和数据流向。数据从上一个节点的输出,流向下一个节点的输入。
变量(Variable)
存储中间结果,在不同节点之间传递数据。比如"用户输入"、"搜索结果"、"最终答案"。
二、节点类型详解
Coze 提供了多种节点类型,每种节点负责不同的功能。理解这些节点是设计工作流的基础。
2.1 基础节点
开始节点(Start)
必需工作流的入口,接收用户输入。每个工作流只能有一个开始节点。
输出变量:
• user_input - 用户的输入文本
• user_id - 用户ID(可选)
结束节点(End)
必需工作流的出口,返回最终结果给用户。可以有多个结束节点(对应不同的执行路径)。
输入变量:
• output - 要返回给用户的内容
LLM 节点
核心调用大语言模型进行推理、生成、总结等操作。这是工作流中最常用的节点。
配置项:
• 模型选择(GPT-4、GPT-3.5 等)
• Prompt 模板(可引用变量)
• 温度、最大 Token 等参数
输出变量:
• output - LLM 的回复内容
插件节点(Plugin)
核心调用 Day 3 学过的插件,执行搜索、计算、API 调用等操作。
配置项:
• 选择插件类型
• 配置插件参数(可引用变量)
输出变量:
• result - 插件返回的结果
2.2 控制流节点
这些节点用于控制执行逻辑,实现条件判断、循环等复杂流程。
条件分支(If/Else)
重要根据条件判断执行不同的分支。比如"如果天气是晴天,推荐户外景点;否则推荐室内景点"。
配置项:
• 条件表达式(支持比较、逻辑运算)
• True 分支和 False 分支
示例条件:
• weather == "晴天"
• price < 100
• len(results) > 0
循环节点(Loop)
重要对列表中的每个元素执行相同的操作。比如"对搜索结果的每篇文章进行总结"。
配置项:
• 循环变量(要遍历的列表)
• 循环体(对每个元素执行的操作)
• 最大循环次数(防止死循环)
输出变量:
• loop_results - 所有循环结果的列表
代码节点(Code)
高级编写 Python 或 JavaScript 代码处理复杂逻辑。适合数据清洗、格式转换等场景。
支持语言:
• Python 3.8+
• JavaScript (Node.js)
使用场景:
• 复杂的数据处理
• 正则表达式匹配
• 自定义算法
三、实战案例:从简单到复杂
通过三个递进的案例,学会设计工作流。
3.1 案例一:智能搜索助手(基础)
需求
用户输入问题 → 搜索相关信息 → 基于搜索结果生成答案
工作流设计
关键配置
插件节点配置:
插件类型: 搜索类插件
搜索关键词: {{start.user_input}}
返回结果数: 5LLM 节点 Prompt:
你是一个专业的信息助手。
用户问题:{{start.user_input}}
搜索结果:{{plugin.result}}
请基于搜索结果,用简洁的语言回答用户问题。
如果搜索结果不足以回答,请说明需要更多信息。3.2 案例二:智能客服(中级)
需求
用户咨询问题 → 判断问题类型 → 根据类型调用不同的处理流程 → 返回答案
工作流设计
关键配置
分类 LLM 节点 Prompt:
分析用户问题的类型,只返回以下三个选项之一:
- 售前:咨询产品功能、价格、购买方式
- 售后:订单查询、退换货、物流
- 技术:使用问题、故障排查、功能说明
用户问题:{{start.user_input}}
返回格式:只返回"售前"、"售后"或"技术",不要其他内容。条件分支配置:
条件1: {{classify_llm.output}} == "售前"
条件2: {{classify_llm.output}} == "售后"
条件3: {{classify_llm.output}} == "技术"3.3 案例三:内容生产流水线(高级)
需求
用户提供主题 → 搜索相关资料 → 对每篇资料提取要点 → 汇总生成文章大纲 → 扩写成完整文章
工作流设计
关键技术点
1. 循环节点的使用
循环变量: {{search_plugin.results}}
循环体: 对每个 result 调用 LLM 提取要点
输出: {{loop.all_summaries}} (所有要点的列表)2. 变量传递
循环输出的列表 → 传递给汇总 LLM → 生成大纲 → 传递给扩写 LLM
四、变量管理
变量是工作流的"血液",负责在节点之间传递数据。理解变量的作用域和引用方式,是设计复杂工作流的关键。
4.1 变量类型
输入变量
来自开始节点或上游节点的输出。使用 {{node_name.variable_name}} 格式引用。
示例:
• {{start.user_input}} - 用户输入
• {{search_plugin.result}} - 搜索插件的结果
• {{llm_1.output}} - 第一个 LLM 节点的输出
中间变量
在代码节点中定义的临时变量,用于复杂的数据处理。
# Python 代码节点示例
search_results = input_data['results']
filtered = [r for r in search_results if r['score'] > 0.8]
output = {'filtered_results': filtered, 'count': len(filtered)}全局变量
在整个工作流中都可以访问的变量,比如用户 ID、会话 ID 等。
系统提供的全局变量:
• {{sys.user_id}} - 当前用户 ID
• {{sys.session_id}} - 会话 ID
• {{sys.timestamp}} - 当前时间戳
4.2 变量引用技巧
💡 最佳实践
给节点起有意义的名字
不要用默认的"LLM_1"、"Plugin_2",改成"classify_question"、"search_articles",这样引用变量时更清晰。
使用代码节点处理复杂数据
如果需要对列表过滤、排序、格式转换,用代码节点比在 Prompt 里描述更可靠。
检查变量是否存在
在条件分支中,先判断变量是否为空,避免引用不存在的变量导致错误。
五、调试技巧
工作流越复杂,调试越重要。Coze 提供了强大的调试工具,帮你快速定位问题。
5.1 测试模式
点击工作流编辑器右上角的"测试"按钮,进入测试模式。测试模式会显示每个节点的执行状态和输出结果。
✅ 节点执行成功
节点显示绿色,可以点击查看输出内容
❌ 节点执行失败
节点显示红色,点击查看错误信息(常见:变量不存在、插件调用失败)
⏸️ 节点未执行
灰色节点表示未被执行(可能在条件分支的另一侧)
5.2 常见错误排查
错误1:变量引用错误
症状:节点报错"变量不存在"
原因:节点名称写错、变量名拼写错误、引用了未执行的节点
解决:检查节点名称和变量名,确保上游节点已执行
错误2:插件调用失败
症状:插件节点返回空结果或报错
原因:插件参数配置错误、API 限流、网络问题
解决:检查插件配置,查看插件文档,添加重试逻辑
错误3:循环超时
症状:工作流执行很久后超时
原因:循环次数过多、单次循环耗时长
解决:设置最大循环次数、优化循环体逻辑、考虑分批处理
六、最佳实践
1. 模块化设计
把复杂工作流拆分成多个子工作流,每个子工作流负责一个独立功能。这样更容易维护和复用。
2. 错误处理
在关键节点后添加条件分支,检查结果是否符合预期。如果失败,走备用流程或返回友好的错误提示。
3. 性能优化
工作流执行时间 = 所有节点耗时之和。优化建议:
- • 减少不必要的 LLM 调用(能用代码处理就不用 LLM)
- • 并行执行独立的节点(Coze 会自动识别)
- • 限制循环次数和搜索结果数量
4. 版本管理
Coze 支持工作流版本管理。每次重大修改前,先保存一个版本,方便回滚。
七、工作流设计模式
在实际应用中,有一些经典的工作流设计模式,可以直接套用或组合使用。
7.1 串行处理模式
适用场景
每个步骤依赖上一步的结果,必须按顺序执行。比如:数据采集 → 数据清洗 → 数据分析 → 生成报告。
设计要点
- • 每个节点的输出作为下一个节点的输入
- • 在关键节点后添加数据验证
- • 记录每一步的中间结果,方便调试
示例:文章生成流水线
开始 → 搜索资料 → 提取要点 → 生成大纲 → 扩写文章 → 润色优化 → 结束
7.2 并行处理模式
适用场景
多个任务互不依赖,可以同时执行。比如:同时查询天气、搜索景点、计算预算。
设计要点
- • Coze 会自动识别可并行的节点
- • 并行节点的结果在汇总节点合并
- • 注意处理某个分支失败的情况
示例:多维度数据收集
开始 → [并行] 查天气 | 搜景点 | 查交通 | 查美食 → 汇总 → 生成方案 → 结束
7.3 分支决策模式
适用场景
根据条件选择不同的处理路径。比如:VIP用户走快速通道,普通用户走标准流程。
设计要点
- • 条件判断要清晰明确
- • 考虑所有可能的分支情况
- • 每个分支最终都要有出口
示例:智能客服分流
开始 → 识别问题类型 → [分支]
├─ 售前 → 查产品库 → 生成回复
├─ 售后 → 查订单 → 生成回复
└─ 技术 → 搜知识库 → 生成回复
→ 结束
7.4 循环迭代模式
适用场景
对列表中的每个元素执行相同操作。比如:批量处理文件、批量发送消息。
设计要点
- • 设置最大循环次数,防止死循环
- • 循环体内的操作要尽量简单高效
- • 考虑循环中某次失败的处理
示例:批量文章总结
开始 → 搜索文章列表 → [循环每篇文章]
└─ 提取内容 → LLM总结 → 保存结果
→ 汇总所有总结 → 生成报告 → 结束
7.5 错误重试模式
适用场景
调用外部API或插件时,可能因为网络问题失败,需要自动重试。
设计要点
- • 设置最大重试次数(通常3次)
- • 每次重试之间加延迟
- • 记录失败原因,方便排查
示例:API调用重试
开始 → 调用API → [判断是否成功]
├─ 成功 → 处理结果 → 结束
└─ 失败 → [判断重试次数]
├─ 未超限 → 等待 → 重新调用
└─ 已超限 → 返回错误 → 结束
八、常见问题与解决方案
Q1: 工作流太复杂,难以维护怎么办?
解决方案:
- • 拆分成多个子工作流,每个负责一个功能模块
- • 给节点起有意义的名字,添加注释说明
- • 画出流程图,标注关键决策点
- • 定期review和重构,删除冗余节点
Q2: 工作流执行很慢怎么优化?
优化方向:
- • 减少LLM调用次数(合并多个小任务)
- • 利用并行执行(独立任务同时进行)
- • 限制循环次数和搜索结果数量
- • 缓存常用数据,避免重复查询
Q3: 如何测试工作流的稳定性?
测试方法:
- • 正常场景测试:用典型输入测试完整流程
- • 边界场景测试:空输入、超长输入、特殊字符
- • 异常场景测试:插件失败、网络超时、数据格式错误
- • 压力测试:连续执行多次,观察是否稳定
Q4: 工作流和简单对话如何选择?
选择建议:
用简单对话:
- • 一问一答的场景
- • 不需要调用插件
- • 逻辑简单,无需条件判断
用工作流:
- • 需要多步骤协作
- • 需要调用多个插件
- • 有复杂的条件判断或循环
- • 需要精确控制执行流程
九、实战练习
🎯 练习任务:新闻摘要生成器
设计一个工作流,实现以下功能:
- 1. 用户输入关键词(如"人工智能")
- 2. 搜索最近7天的相关新闻(返回10条)
- 3. 对每条新闻提取标题和摘要
- 4. 按时间排序,生成一份结构化的新闻汇总
- 5. 用 LLM 生成一段总结性的导语
提示:
需要用到:搜索插件、循环节点、代码节点(排序)、LLM 节点
总结
今天我们学习了 Coze 工作流的核心概念和设计方法。工作流让 Bot 从"一问一答"升级为"多步骤协作",能够处理复杂的业务逻辑。
关键要点:
- • 工作流 = 节点 + 连线 + 变量
- • 掌握基础节点(开始、结束、LLM、插件)和控制流节点(条件、循环)
- • 变量引用格式:
{{node_name.variable_name}} - • 使用测试模式调试,逐个节点排查问题
- • 模块化设计、错误处理、性能优化是最佳实践
下一章预告
Day 5 我们将学习知识库功能。通过上传文档、网页、FAQ 等资料,让 Bot 具备专业领域知识,回答更准确、更专业。