使用 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