跳转到内容
搜索文档

Workflows 简介

最后更新 查看 MarkdownAgent 设置

Cloudflare Workflows 提供持久执行功能,允许开发者创建在后台运行的可靠、可重复的工作流。即使底层计算发生故障,Workflows 也被设计为能够恢复执行,确保任务最终完成。它们构建在 Cloudflare Workers 之上,并自动处理扩展和资源筹备。

Workflows 由事件触发,例如从队列中消费的事件通知、HTTP 请求、另一个 Worker,甚至是计划定时器。Workflow 中的各个步骤被设计为可重试的工作单元。状态在各步骤之间持久化,允许工作流在失败后从上一个成功的步骤继续执行。Workflows 会自动为每个步骤生成指标,有助于调试和可观测性。

Punderful 是一个示例应用程序,展示了如何使用各种 Cloudflare 基元,包括 Workers、D1、Vectorize、Workers AI 和 Workflows。该应用程序显示存储在 D1 数据库中的双关语列表。

首页列出了存储在 D1 中的最新双关语。该应用程序还包括由 Vectorize 提供支持的语义搜索功能。要执行搜索:

  1. 前往 Punderful 搜索页面。
  2. 在“Search for a pun...”输入框中输入搜索词。
  3. 观察搜索结果立即显示在搜索框下方。

为了演示添加新的双关语:

  1. 前往 Punderful 创建页面。
  2. 在“Enter your pun here...”文本区域中输入一个新的双关语。
  3. 观察您输入时双关语预览的实时更新。
  4. 单击“Submit Pun”按钮。

当提交一个新的双关语时,它需要被索引到 Vectorize 中,以便语义搜索能够正常工作。该索引过程包括从双关语文本中创建嵌入 (embeddings)。这是一个非常适合使用 Cloudflare Workflows 进行后台处理的任务,从而避免在请求-响应循环中给用户带来延迟。

实现工作流以处理新的双关语

已实现一个工作流,用来处理提交新双关语时所需的后台处理任务。

触发工作流

当通过 /api/puns 端点提交新的双关语时,数据首先被插入到 D1 数据库中。然后,创建并触发一个新的 Workflow 实例以执行随后的后台任务。

参见此处

在此处理程序中,c.env.PUBLISH.create(crypto.randomUUID(), { punId, pun: payload.pun }) 创建了一个绑定为 PUBLISH 的工作流新实例,为其分配一个唯一 ID,并将 punIdpun 文本作为有效负载 (payload) 传入。

定义 Workflow 类

工作流逻辑定义在一个继承自 WorkflowEntrypoint 的类中。

参见此处

run 方法是工作流执行的入口点。它接收包含有效负载的 event 以及一个用于定义各个持久步骤的 step 对象。

工作流步骤

工作流中的每个离散且可重试的任务都使用 await step.do() 定义。

内容审核

(可选)如果环境中存在 API 密钥,工作流可以使用外部服务(如 OpenAI 的审核 API)来执行内容审核。

参见此处

此步骤调用 OpenAI 审核 API。如果内容被标记为不当内容,数据库中的双关语状态将被更新,并抛出 NonRetryableError。抛出 NonRetryableError 可以防止工作流重试此步骤,因为该内容已被永久判定为不当内容。

创建嵌入 (Embeddings)

接下来,使用 Workers AI 模型为双关语文本创建向量嵌入。

参见此处

此步骤使用 Workers AI 的 @cf/baai/bge-large-en-v1.5 模型来为双关语 (pun) 文本生成向量嵌入。结果(嵌入向量)将由该步骤返回,并可供后续步骤使用。step.do() 确保此步骤在失败时将进行重试,从而保证最终能成功创建嵌入。

对双关语进行分类

(可选)使用 Workers AI 语言模型对双关语进行分类。

参见此处

此步骤使用 @cf/meta/llama-3.1-8b-instruct 模型与特定的系统提示词来为该双关语生成类别。生成的类别字符串将由该步骤返回。此步骤同样受益于 step.do() 的可靠性。

将嵌入添加到 Vectorize

将创建的双关语嵌入(以及可能生成的类别嵌入)插入到 Vectorize 数据库中。

参见此处

此步骤使用 this.env.VECTORIZE.upsert() 将生成的嵌入和关联元数据添加到 Vectorize 数据库中。这使得该双关语能够被语义化搜索。step.do() 确保这个关键的索引步骤能够可靠地完成。

更新数据库状态

最后一步更新 D1 数据库中该双关语的状态,以表示它已被发布并被工作流处理。

参见此处

此步骤将对应双关语 ID 在 D1 数据库中的 status 列更新为 "published"。一旦此步骤完成,双关语即被视为完全处理完毕,并准备好显示在主页上。

工作流绑定

为了使 PublishWorkflow 类能够被主 Worker 访问并提供所需资源(如 D1、AI、Vectorize)的访问权限,需要在 Wrangler 配置文件中配置绑定。

参见此处

此配置定义了一个名为 publish 的工作流,将其绑定到环境变量 PUBLISH,并将其链接到 src/index.ts 中的 PublishWorkflow 类。它还展示了 Workers AI (AI) 和 Vectorize (VECTORIZE) 的绑定,这些绑定在工作流中可以通过 this.env 进行访问。

用于语义搜索的 Vectorize

Vectorize 是此应用程序中用于启用双关语语义搜索的向量数据库。它存储由 Workers AI 创建的向量嵌入。搜索功能通过查询此 Vectorize 索引来查找与用户查询含义相似的双关语。

主页上显示最近发布的双关语(状态为 "published")。特定双关语的详细信息页面会显示“相似的双关语”,这些相似的双关语是通过使用当前双关语的向量嵌入查询 Vectorize 来获取的。

可扩展性

Cloudflare Workers 和 Workflows 被设计为根据需求自动扩展,无需手动配置资源即可高效处理并发请求和后台任务。

这篇文档对您有帮助吗?