21.1 什么时候用 Workflow
任务超过 30 秒、多步、要自动重试、中间要人批一道——上 Workflow。
21.2 定义工作流
import { AgentWorkflow } from "agents/workflows";
export class ProcessingWorkflow extends AgentWorkflow<MyAgent, TaskParams> {
async run(event: AgentWorkflowEvent<TaskParams>, step: AgentWorkflowStep) {
const params = event.payload;
const result = await step.do("process-data", async () => processData(params.data)); // 持久+重试
await this.reportProgress({ step: "process", status: "complete", percent: 0.5 });
await step.do("save-results", async () => this.agent.saveResult(params.taskId, result));
await step.reportComplete(result);
return result;
}
}
21.3 从 Agent 启动
// Agent 内
const instanceId = await this.runWorkflow("PROCESSING_WORKFLOW", { taskId, data });
// wrangler 注册 workflow
"workflows": [{ "name": "processing-workflow", "binding": "PROCESSING_WORKFLOW", "class_name": "ProcessingWorkflow" }]
21.4 人工审批闸门
const approvalData = await this.waitForApproval<{ approvedBy: string }>(step, { timeout: "7 days" });
// Agent 端:this.approveWorkflow(id, {...}) / this.rejectWorkflow(id, {...})
| 维度 | Schedule | Workflow | 标叔的结论 |
|---|---|---|---|
| 语义 | 定时触发 | 多步持久管线 | 复杂流程用流 |
| 重试 | 回调级 | 步骤级幂等 | 流更稳 |
| 审批 | 无 | waitForApproval |
流有闸门 |
注意
工作流可在子 Agent 内启动,但追踪记录在子 Agent 自己的 SQLite,父看不到。需要全局视图要自己汇总。
工作流讲完。下一章把"人类在环"四种模式一次讲清。