Agents 可以触发异步工作流,允许您的 Agent 在后台运行复杂的多步骤任务。这可以包括后处理用户上传的文件、更新向量数据库中的嵌入,和/或管理长时间运行的用户生命周期电子邮件或短信通知工作流。
因为 Agent 就像 Worker 脚本一样,它可以创建在与 Agent 相同项目(脚本)中定义的工作流或在不同项目中定义的工作流。
Agent 可以从任何方法内触发一个或多个工作流,无论是来自传入的 HTTP 请求、WebSocket 连接、延迟或调度,和/或来自 Agent 采取的任何其他操作。
从 Agent 触发工作流与从 Worker 脚本触发工作流没有区别:
export class MyAgent extends Agent { async onRequest(request) { let userId = request.headers.get("user-id"); // 触发运行工作流的调度 // 传递负载给它 let { taskId } = await this.schedule(300, "runWorkflow", { id: userId, flight: "DL264", date: "2025-02-23", }); }
async runWorkflow(data) { let instance = await env.MY_WORKFLOW.create({ id: data.id, params: data, });
// 调度另一个每5分钟检查工作流状态的任务... await this.schedule("*/5 * * * *", "checkWorkflowStatus", { id: instance.id, }); }}
export class MyWorkflow extends WorkflowEntrypoint { async run(event, step) { // 您的工作流代码在这里 }}
interface Env { MY_WORKFLOW: Workflow; MyAgent: AgentNamespace<MyAgent>;}
export class MyAgent extends Agent<Env> { async onRequest(request: Request) { let userId = request.headers.get("user-id"); // 触发运行工作流的调度 // 传递负载给它 let { taskId } = await this.schedule(300, "runWorkflow", { id: userId, flight: "DL264", date: "2025-02-23", }); }
async runWorkflow(data) { let instance = await env.MY_WORKFLOW.create({ id: data.id, params: data, });
// 调度另一个每5分钟检查工作流状态的任务... await this.schedule("*/5 * * * *", "checkWorkflowStatus", { id: instance.id, }); }}
export class MyWorkflow extends WorkflowEntrypoint<Env> { async run(event: WorkflowEvent<Params>, step: WorkflowStep) { // 您的工作流代码在这里 }}
您还需要确保您的 Agent 与您的工作流有绑定,以便它可以调用它:
{ // ... // 在您的 Agent 和您的工作流之间创建绑定 "workflows": [ { // 必需的: "name": "EMAIL_WORKFLOW", "class_name": "MyWorkflow", // 可选:如果您的工作流在与您的 Agent 不同的项目中定义,请设置 script_name 字段 "script_name": "email-workflows", }, ], // ...}
[[workflows]]name = "EMAIL_WORKFLOW"class_name = "MyWorkflow"script_name = "email-workflows"
您还可以通过在 Agent 的 workflows
绑定中设置 script_name
属性,调用在与 Agent 不同的 Workers 脚本中定义的工作流:
{ // 必需的: "name": "EMAIL_WORKFLOW", "class_name": "MyWorkflow", // 可选:如果您的工作流在与您的 Agent 不同的项目中定义,请设置 script_name 字段 "script_name": "email-workflows",}
name = "EMAIL_WORKFLOW"class_name = "MyWorkflow"script_name = "email-workflows"
有关更多示例,请参阅工作流文档的跨脚本调用部分。
- @2025 Cloudflare Ubitools
- Cf Repo