使用 TypeScript 构建 AI 视频任务队列

AI 视频生成不是标准的 HTTP 请求。用户发送提示词(prompt)和设置,结果需要几分钟才能返回。

你的后端必须处理许多任务。它需要验证输入、创建任务、与供应商通信、轮询结果并处理失败。

一个稳健的工作流需要六个步骤:

  • 验证提示词和设置。
  • 检查上传的资产。
  • 在数据库中创建任务记录。
  • 将任务提交给供应商。
  • 轮询供应商,直到视频生成完毕。
  • 为 UI 格式化结果。

不要让供应商的 API 控制你的整个应用。使用适配器层(adapter layer)来保持系统的稳定性。这让你可以在不重写核心逻辑的情况下切换供应商。

创建一个中心化的任务类型(job type)作为你的产品契约。每个供应商都应该将其数据转换为这种格式。

定义一个包含三个方法的 VideoProvider 接口:

  • submit:将任务发送给供应商。
  • poll:检查任务是否已完成。
  • normalizeError:将供应商的错误转换为你自己的错误代码。

这能让供应商之间的差异不会影响到你的计费逻辑和 UI。

始终先进行低成本检查。在进行昂贵的 API 调用之前,先验证提示词和时长。

在构建 Worker 时,使用带有递增延迟的轮询策略。如果一个任务耗时过长,将其移至“延迟”(delayed)状态。不要让任务永远处于“运行中”(running)状态。使用单独的进程稍后检查这些延迟任务。

你的 UI 绝不应该显示原始的供应商错误。将你的内部错误代码映射为给用户的清晰消息:

  • queued:您的视频正在等待开始。
  • running:您的视频正在生成中。
  • delayed:这比平时耗时更长。
  • moderation_rejected:请尝试更改您的提示词或资产。
  • provider_timeout:供应商未及时返回结果。

清晰的消息可以减少支持工单,并帮助用户理解发生了什么。

将 AI 视频视为一个任务系统。稳定的队列和良好的错误分类体系会让你的产品更易于维护。

Source: https://dev.to/miao_cunhui_587ccddb6acc1/building-an-ai-video-job-queue-in-typescript-1349

Optional learning community: https://t.me/GyaanSetuAi