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 }

三个核心决策原则

  1. 默认用 pipeline——只有真正需要全部结果时才用 parallel
  2. 不要为了"看起来并行"而并行——一个 5 步串行比 5 个 1 步并行更易调试
  3. 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 失败时可以接续,不要从头跑

下一步