Skip to content

Workflow:把确定步骤从模型手里拿回来

问题场景

Agent 适合开放式任务,但不是所有任务都应该让模型自由决定。比如“生成学习计划”通常有固定步骤:

  1. 解析目标。
  2. 检索资料。
  3. 估算难度。
  4. 生成计划。
  5. 给出练习。

这类任务更适合 Workflow。模型可以参与某些步骤,但流程控制权应该在代码里。

深入学习

本页只讲顺序工作流。并行、分支、共享状态、错误处理和暂停恢复见 Workflow 控制流

Agent 和 Workflow 的区别

维度AgentWorkflow
步骤运行时由模型决定开发时定义
适合任务开放式、探索式明确、多步骤、可复现
调试方式看模型推理和工具调用看每个 step 的输入输出
风险不稳定、可能绕路灵活性低,但更可控

Mastra 映射

Mastra Workflow 的核心是:

  • createStep() 定义步骤。
  • createWorkflow() 定义输入输出。
  • .then() 串联步骤。
  • .commit() 完成定义。
ts
import { createStep, createWorkflow } from '@mastra/core/workflows'
import { z } from 'zod'

const normalizeGoal = createStep({
  id: 'normalize-goal',
  inputSchema: z.object({ goal: z.string() }),
  outputSchema: z.object({ normalizedGoal: z.string() }),
  execute: async ({ inputData }) => {
    return { normalizedGoal: inputData.goal.trim() }
  },
})

export const studyPlanWorkflow = createWorkflow({
  id: 'study-plan-workflow',
  inputSchema: z.object({ goal: z.string() }),
  outputSchema: z.object({ normalizedGoal: z.string() }),
})
  .then(normalizeGoal)
  .commit()

设计流程图

mermaid
flowchart TD
  A[输入学习目标] --> B[规范化目标]
  B --> C[检索课程资料]
  C --> D[生成学习计划]
  D --> E[生成练习题]
  E --> F[输出结构化结果]

Vibe coding 提示词

text
请帮我实现一个 Mastra Workflow:studyPlanWorkflow。
要求:
- 输入 { goal: string; days: number }。
- 第一步规范化 goal。
- 第二步调用本地资料搜索函数,不直接调用模型。
- 第三步生成每天学习安排。
- 每个 step 都要有 inputSchema 和 outputSchema。
- 不要把所有逻辑写在一个 step 里。

验证方式

运行工作流 Demo:

bash
npm run demo:04

观察每个 step 的输入输出,确认数据是一步步传递的。

常见错误

错误后果修复
Workflow 里没有 schema输入输出不可控每步都写 schema
把 Agent 当唯一 step仍然不可复现只在需要语言生成时调用 Agent
上一步输出和下一步输入不匹配运行失败明确字段名和结构
没有错误分支失败难定位对空资料、非法 days 做处理