08. Workflow 编排
什么是 Workflow
Workflow 是把多个 Agent 任务用代码编排成自动化流水线。当你需要"先 A 再 B,根据 B 的结果决定 C 还是 D"这种逻辑时,光靠对话已经不够,需要 Workflow 工具。
什么时候需要 Workflow
| 场景 | 用对话 | 用 Workflow |
|---|---|---|
| 单次问答 | ✅ | ❌ |
| 一次性的 3 步任务 | ✅ | ❌ |
| 重复执行的固定流程 | ❌ | ✅ |
| 需要并行/条件分支 | ❌ | ✅ |
| 需要长跑(几小时)的后台任务 | ❌ | ✅ |
Workflow 的基本模式
模式 1:Pipeline(默认)
每个任务独立走完所有阶段,不需要等待其他任务。Wall-clock = 最慢单任务的耗时,而不是各阶段耗时之和。
// pseudocode
pipeline(
[taskA, taskB, taskC],
stage1, // 每个任务都过 stage1
stage2, // 然后 stage2
stage3 // 最后 stage3
)
适合:批量独立任务。
模式 2:Parallel(屏障)
所有任务跑完后统一汇总,必须等所有任务完成才进入下一阶段。
const results = await parallel([
() => research("方案 A"),
() => research("方案 B"),
() => research("方案 C")
])
适合:需要汇总/对比/去重的场景。
模式 3:Loop-until-dry
持续找新东西,直到连续几轮没有新发现。
while (dryCount < 2) {
const found = await findBugs()
if (found.length === 0) dryCount++
else dryCount = 0
}
适合:调研类任务,不知道要找多少。
一个完整 Workflow 示例
需求:为某门课程自动生成配套的 5 道练习题,要求覆盖教学大纲、难度递进。
// examples/workflows/quiz-generator.js
import { agent, pipeline, parallel } from './workflow-lib.js'
export const meta = {
name: 'quiz-generator',
description: '为指定课程主题生成 5 道递进难度的练习题',
phases: [
{ title: '分析大纲' },
{ title: '生成题目' },
{ title: '审核' }
]
}
phase('分析大纲')
const outline = await agent(
`分析"计算机网络-传输层"这一章的教学大纲,
列出 5 个核心知识点,每个 1 句话`,
{ phase: '分析大纲' }
)
phase('生成题目')
const questions = await agent(
`基于以下大纲生成 5 道题,难度从易到难:
${outline}
输出 JSON 数组,每项包含:
- question: 题干
- options: 4 个选项
- answer: 正确答案
- explanation: 解析`,
{ phase: '生成题目', schema: QUIZ_SCHEMA }
)
phase('审核')
const reviewed = await parallel(
questions.quiz.map(q => () =>
agent(
`审核这道题,判断:
1. 题干是否清晰
2. 选项是否有明显错误
3. 解析是否正确
输出 verdict: pass / fix`,
{ phase: '审核', schema: REVIEW_SCHEMA }
)
)
)
return { questions: questions.quiz, reviews: reviewed }
三个核心决策原则
- 默认用 pipeline——只有真正需要全部结果时才用 parallel
- 不要为了"看起来并行"而并行——一个 5 步串行比 5 个 1 步并行更易调试
- loop 要有 dry 条件——防止无限循环
何时用 parallel vs pipeline
✅ 用 parallel:
"调研 A、B、C 三个方案,然后我们对比选最好的"
❌ 不需要 parallel:
"改 A,根据结果改 B,根据结果改 C"——这是串行依赖
Workflow 的成本意识
每个 Agent 调用都花钱。在设计 Workflow 时:
- 避免冗余:同样的调研不要跑两遍
- 小任务合并:5 个 1 步任务合并成 1 个 5 步任务
- 用合适的模型:调研用便宜的模型,最终输出用贵的
- 预算上限:在 Workflow 里加
budget.total防止失控
给教师的实用 Workflow 思路
| Workflow | 阶段 |
|---|---|
| 作业批量初评 | 收集作业 → 初评 → 汇总 → 生成班级统计 |
| 课程材料生成 | 分析大纲 → 生成讲义 → 生成 PPT 大纲 → 生成习题 |
| 论文初稿辅助 | 列提纲 → 写各节 → 检查引用 → 排版 |
| 学生代码 review | 收集 → 静态分析 → 风格检查 → 输出报告 |
调试 Workflow
- 日志先行:每个阶段都
log()一行,便于追踪 - 从 1 个样本开始:不要一次跑 100 个,先跑 1 个看输出
- 保存中间结果:Workflow 失败时可以接续,不要从头跑
下一步
- 想写复杂 Workflow → 10. 高级 Workflow 模式
- 想看具体教学案例 → 04. 教学场景实战