关于 workflow-automation
面向构建可靠自动化的 Agent,介绍 n8n、Temporal 和 Inngest 等平台及工作流设计模式,强调持久执行与按需求选择平台。
主要功能
- 01比较 n8n、Temporal 和 Inngest
- 02讲解顺序与并行工作流
- 03介绍 orchestrator-worker 模式
- 04说明持久执行与失败恢复
- 05涵盖外部操作去重与校验
适用场景
- 01设计事件驱动的后台任务
- 02构建可恢复的支付流程
- 03规划并行文档分析
- 04选择工作流自动化平台
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill workflow-automation安装后在 Claude Code 中输入/workflow-automation确认已加载。
附带文件references/detailed-guide.md
详细介绍
工作流自动化
工作流自动化是让 AI Agent 可靠运行的基础设施。 如果没有持久化执行,10 步支付流程中发生网络波动,就可能导致资金损失和客户不满。有了它,工作流就能从中断处准确恢复。
此技能涵盖各个平台(n8n、Temporal、Inngest)和模式(顺序、并行、编排器-工作者),帮助将脆弱的脚本转变为生产级自动化。
关键在于:各个平台做出了不同的权衡。n8n 注重易用性,Temporal 注重正确性,Inngest 注重开发者体验。请根据实际需求选择,而不是盲目追逐炒作。
可靠性与示例限制
持久化并不能保证外部操作恰好执行一次。支付/配送辅助程序必须向服务提供商传递稳定的操作键,并协调处理结果不明确的成功状态;电子邮件则需要发件箱/去重策略。示例是不完整的代码片段,且 SDK 签名可能因版本而异。请根据已安装的类型定义验证示例,使用测试账户,并避免将有效负载/凭据写入工作流历史记录和日志。
详细指南
执行此技能前,请阅读详细指南。其中保留了完整的操作步骤和参考资料。必须遵守其中的安全要求、先决条件和验证要求。若只需处理特定事项,请加载相关章节;若需端到端处理,请完整阅读指南。
Inngest 示例(TypeScript)
import { inngest } from "./client";
export const processOrder = inngest.createFunction(
{ id: "process-order" },
{ event: "order/created" },
async ({ event, step }) => {
// Step 1: Validate order
const validated = await step.run("validate-order", async () => {
return validateOrder(event.data.order);
});
// Step 2: Process payment (durable - survives crashes)
const payment = await step.run("process-payment", async () => {
return chargeCard(validated.paymentMethod, validated.total, { idempotencyKey: `order-${event.data.orderId}-payment` });
});
// Step 3: Create shipment
const shipment = await step.run("create-shipment", async () => {
return createShipment(validated.items, validated.address);
});
// Step 4: Send confirmation
await step.run("send-confirmation", async () => {
return sendEmail(validated.email, { payment, shipment });
});
return { success: true, orderId: event.data.orderId };
}
);
Temporal 示例(TypeScript)
import { proxyActivities } from '@temporalio/workflow';
import type * as activities from './activities';
const { validateOrder, chargeCard, createShipment, sendEmail } =
proxyActivities<typeof activities>({
startToCloseTimeout: '30 seconds',
retry: {
maximumAttempts: 3,
backoffCoefficient: 2,
}
});
export async function processOrderWorkflow(order: Order): Promise<void> {
const validated = await validateOrder(order);
const payment = await chargeCard(validated.paymentMethod, validated.total, { idempotencyKey: `order-${order.id}-payment` });
const shipment = await createShipment(validated.items, validated.address);
await sendEmail(validated.email, { payment, shipment });
}
Inngest 示例
export const analyzeDocument = inngest.createFunction(
{ id: "analyze-document" },
{ event: "document/uploaded" },
async ({ event, step }) => {
// Run analyses in parallel
const [security, performance, compliance] = await Promise.all([
step.run("security-analysis", () =>
analyzeForSecurityIssues(event.data.document)
),
step.run("performance-analysis", () =>
analyzeForPerformance(event.data.document)
),
step.run("compliance-analysis", () =>
analyzeForCompliance(event.data.document)
),
]);
// Aggregate results
const report = await step.run("generate-report", () =>
generateReport({ security, performance, compliance })
);
return report;
}
);
Temporal 示例
export async function orchestratorWorkflow(task: ComplexTask) {
// Orchestrator decides what work needs to be done
const plan = await analyzeTask(task);
// Dispatch to specialized worker workflows
const results = await Promise.all(
plan.subtasks.map(subtask => {
switch (subtask.type) {
case 'create':
return executeChild(createWorkerWorkflow, { args: [subtask] });
case 'modify':
return executeChild(modifyWorkerWorkflow, { args: [subtask] });
case 'delete':
return executeChild(deleteWorkerWorkflow, { args: [subtask] });
}
})
);
// Aggregate results
return aggregateResults(results);
}
适用场景
- 用户提到或暗示:工作流
- 用户提到或暗示:自动化
- 用户提到或暗示:n8n
- 用户提到或暗示:temporal
- 用户提到或暗示:inngest
- 用户提到或暗示:步骤函数
- 用户提到或暗示:后台作业
- 用户提到或暗示:持久化执行
- 用户提到或暗示:事件驱动
- 用户提到或暗示:计划任务
- 用户提到或暗示:作业队列
- 用户提到或暗示:cron
- 用户提到或暗示:触发器
限制
- 仅当任务明确符合上述范围时才使用此技能。
- 不要将输出视为对特定环境进行验证、测试或专家审查的替代。
- 如果缺少必要输入、权限、安全边界或成功标准,请停止并要求澄清。
评论
支持 Markdown