关于 workflow
面向 Workflow DevKit 的编码技能,指导开发者查阅已安装版本的文档并遵循运行约定,涵盖持久化工作流、沙箱限制、错误处理、序列化、流式处理和调试。
主要功能
- 01搜索随包提供的 Workflow 文档
- 02将编排逻辑与 Node.js 步骤分开
- 03处理重试和永久性错误
- 04遵循序列化与流式处理限制
- 05检查端点并查看运行记录
适用场景
- 01针对已安装版本实现工作流
- 02将依赖 Node.js 的逻辑移入步骤
- 03处理临时故障与永久性错误
- 04调试工作流端点和运行记录
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ vercel-labs/ open-agents --skill workflow安装后在 Claude Code 中输入/workflow确认已加载。
详细介绍
重要:始终使用正确的 workflow 文档
你对 workflow 的了解已经过时。
以下 workflow 文档与已安装的 Workflow DevKit 版本相符。
开始处理任何与 workflow 相关的任务之前,请遵循以下说明:
搜索 node_modules/workflow/docs/ 中附带的文档:
- 查找文档:
glob "node_modules/workflow/docs/**/*.mdx" - 搜索内容:
grep "your query" node_modules/workflow/docs/
node_modules/workflow/docs/ 中的文档结构:
getting-started/- 框架设置(next.mdx、express.mdx、hono.mdx 等)foundations/- 核心概念(workflows-and-steps.mdx、hooks.mdx、streaming.mdx 等)api-reference/workflow/- API 文档(sleep.mdx、create-hook.mdx、fatal-error.mdx 等)api-reference/workflow-api/- 客户端 API(start.mdx、get-run.mdx、resume-hook.mdx 等)ai/- AI SDK 集成文档errors/- 错误代码文档
相关软件包也附带了文档:
@workflow/ai:node_modules/@workflow/ai/docs/- DurableAgent 和 AI 集成@workflow/core:node_modules/@workflow/core/docs/- 核心运行时(foundations、how-it-works)@workflow/next:node_modules/@workflow/next/docs/- Next.js 集成
如有疑问,请更新到最新版本的 Workflow DevKit。
官方资源
快速参考
指令:
"use workflow"; // First line - makes async function durable
"use step"; // First line - makes function a cached, retryable unit
必要的导入:
// Workflow primitives
import { sleep, fetch, createHook, createWebhook, getWritable } from "workflow";
import { FatalError, RetryableError } from "workflow";
import { getWorkflowMetadata, getStepMetadata } from "workflow";
// API operations
import { start, getRun, resumeHook, resumeWebhook } from "workflow/api";
// Framework integrations
import { withWorkflow } from "workflow/next";
import { workflow } from "workflow/vite";
import { workflow } from "workflow/astro";
// Or use modules: ["workflow/nitro"] for Nitro/Nuxt
优先使用 Step 函数,避免沙箱错误
"use workflow" 函数在沙箱化的 VM 中运行。"use step" 函数可完全访问 Node.js。将逻辑放在步骤中,并仅使用工作流函数进行编排。
// Steps have full Node.js and npm access
async function fetchUserData(userId: string) {
"use step";
const response = await fetch(`https://api.example.com/users/${userId}`);
return response.json();
}
async function processWithAI(data: any) {
"use step";
// AI SDK works in steps without workarounds
return await generateText({
model: openai("gpt-4"),
prompt: `Process: ${JSON.stringify(data)}`,
});
}
// Workflow orchestrates steps - no sandbox issues
export async function dataProcessingWorkflow(userId: string) {
"use workflow";
const data = await fetchUserData(userId);
const processed = await processWithAI(data);
return { success: true, processed };
}
**优点:**步骤会自动重试,结果会持久化以供重放,且不受沙箱限制。
工作流沙箱限制
如果需要直接在工作流函数(而非步骤)中编写逻辑,则需遵守以下限制:
| 限制 | 解决方法 |
|---|---|
不支持 fetch() | import { fetch } from "workflow",然后设置 globalThis.fetch = fetch |
不支持 setTimeout/setInterval | 使用来自 "workflow" 的 sleep("5s") |
| 不支持 Node.js 模块(fs、crypto 等) | 移至步骤函数中 |
示例 - 在工作流上下文中使用 fetch:
import { fetch } from "workflow";
export async function myWorkflow() {
"use workflow";
globalThis.fetch = fetch; // Required for AI SDK and HTTP libraries
// Now generateText() and other libraries work
}
注意:@workflow/ai 中的 DurableAgent 会自动处理 fetch 赋值。
错误处理
使用 FatalError 处理永久性故障(不重试),使用 RetryableError 处理暂时性故障:
import { FatalError, RetryableError } from "workflow";
if (res.status >= 400 && res.status < 500) {
throw new FatalError(`Client error: ${res.status}`);
}
if (res.status === 429) {
throw new RetryableError("Rate limited", { retryAfter: "5m" });
}
序列化
传入或传出工作流和步骤的所有数据都必须可序列化。
**支持的类型:**string、number、boolean、null、undefined、bigint、普通对象、数组、Date、RegExp、URL、URLSearchParams、Map、Set、Headers、ArrayBuffer、类型化数组、Request、Response、ReadableStream、WritableStream。
**不支持:**函数、类实例、Symbol、WeakMap/WeakSet。传递数据,而非回调。
流式传输
在步骤函数中使用 getWritable() 来流式传输数据:
async function streamData() {
"use step"; // Required - streaming only works in steps
const writer = getWritable();
await writer.write(data);
writer.releaseLock(); // Always release the lock
}
// Close when done
await getWritable().close();
调试
# Check workflow endpoints are reachable
npx workflow health
npx workflow health --port 3001 # Non-default port
# Visual dashboard for runs
npx workflow web
npx workflow web --app-url http://localhost:3001
# CLI inspection (for agents)
npx workflow inspect runs
npx workflow inspect run <run_id>
**提示:**只导入实际使用的工作流 API。未使用的导入可能导致 500 错误。