Day 4 / 7

工作流设计

可视化流程编排,条件分支、循环和变量管理

📖 预计阅读时间:55分钟🎯 难度:中级

前面三天我们学会了创建 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 案例一:智能搜索助手(基础)

需求

用户输入问题 → 搜索相关信息 → 基于搜索结果生成答案

工作流设计

开始接收用户问题
插件调用搜索插件,搜索关键词
LLM基于搜索结果生成答案
结束返回答案给用户

关键配置

插件节点配置:

插件类型: 搜索类插件
搜索关键词: {{start.user_input}}
返回结果数: 5

LLM 节点 Prompt:

你是一个专业的信息助手。
用户问题:{{start.user_input}}
搜索结果:{{plugin.result}}

请基于搜索结果,用简洁的语言回答用户问题。
如果搜索结果不足以回答,请说明需要更多信息。

3.2 案例二:智能客服(中级)

需求

用户咨询问题 → 判断问题类型 → 根据类型调用不同的处理流程 → 返回答案

工作流设计

开始接收用户咨询
LLM分析问题类型(售前/售后/技术)
条件分支根据类型分流
├─售前:查询产品信息
├─售后:查询订单状态
└─技术:搜索知识库
LLM生成友好的回复
结束返回答案

关键配置

分类 LLM 节点 Prompt:

分析用户问题的类型,只返回以下三个选项之一:
- 售前:咨询产品功能、价格、购买方式
- 售后:订单查询、退换货、物流
- 技术:使用问题、故障排查、功能说明

用户问题:{{start.user_input}}
返回格式:只返回"售前"、"售后"或"技术",不要其他内容。

条件分支配置:

条件1: {{classify_llm.output}} == "售前"
条件2: {{classify_llm.output}} == "售后"
条件3: {{classify_llm.output}} == "技术"

3.3 案例三:内容生产流水线(高级)

需求

用户提供主题 → 搜索相关资料 → 对每篇资料提取要点 → 汇总生成文章大纲 → 扩写成完整文章

工作流设计

开始接收文章主题
插件搜索相关资料(返回列表)
循环遍历每篇资料
└─LLM提取核心要点
LLM汇总要点,生成大纲
LLM基于大纲扩写文章
结束返回完整文章

关键技术点

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 变量引用技巧

💡 最佳实践

1.

给节点起有意义的名字

不要用默认的"LLM_1"、"Plugin_2",改成"classify_question"、"search_articles",这样引用变量时更清晰。

2.

使用代码节点处理复杂数据

如果需要对列表过滤、排序、格式转换,用代码节点比在 Prompt 里描述更可靠。

3.

检查变量是否存在

在条件分支中,先判断变量是否为空,避免引用不存在的变量导致错误。

五、调试技巧

工作流越复杂,调试越重要。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. 1. 用户输入关键词(如"人工智能")
  2. 2. 搜索最近7天的相关新闻(返回10条)
  3. 3. 对每条新闻提取标题和摘要
  4. 4. 按时间排序,生成一份结构化的新闻汇总
  5. 5. 用 LLM 生成一段总结性的导语

提示:

需要用到:搜索插件、循环节点、代码节点(排序)、LLM 节点

总结

今天我们学习了 Coze 工作流的核心概念和设计方法。工作流让 Bot 从"一问一答"升级为"多步骤协作",能够处理复杂的业务逻辑。

关键要点:

  • • 工作流 = 节点 + 连线 + 变量
  • • 掌握基础节点(开始、结束、LLM、插件)和控制流节点(条件、循环)
  • • 变量引用格式:{{node_name.variable_name}}
  • • 使用测试模式调试,逐个节点排查问题
  • • 模块化设计、错误处理、性能优化是最佳实践

下一章预告

Day 5 我们将学习知识库功能。通过上传文档、网页、FAQ 等资料,让 Bot 具备专业领域知识,回答更准确、更专业。

遇到问题?

加入云途AGI社群,获取配套学习资源、群内答疑,与同学们一起交流进步

了解社群详情