TypeScriptによるAI動画ジョブキューの構築

AI動画生成は、標準的なHTTPリクエストではありません。ユーザーがプロンプトと設定を送信しても、結果が返ってくるまでには数分かかります。

バックエンドは多くのタスクを処理する必要があります。入力の検証、ジョブの作成、プロバイダーとの通信、結果のポーリング、そして失敗への対応が必要です。

堅牢なワークフローには、6つのステップが必要です:

  • プロンプトと設定を検証する。
  • アップロードされたアセットを確認する。
  • データベースにジョブレコードを作成する。
  • プロバイダーにジョブを送信する。
  • 動画が準備できるまでプロバイダーをポーリングする。
  • UI向けに結果をフォーマットする。

プロバイダーのAPIにアプリケーション全体を支配させてはいけません。システムを安定させるためにアダプター層を使用しましょう。これにより、コアロジックを書き換えることなくプロバイダーを切り替えることができます。

製品のコントラクト(契約)として機能する、中央のジョブ型を作成します。すべてのプロバイダーは、そのデータをこの形式に変換する必要があります。

3つのメソッドを持つ VideoProvider インターフェースを定義します:

  • submit: ジョブをプロバイダーに送信する。
  • poll: ジョブが完了したか確認する。
  • normalizeError: プロバイダーのエラーを独自の形式のエラーコードに変換する。

これにより、プロバイダー間の差異が課金ロジックやUIに影響を与えないようにします。

常にコストの低いチェックを最初に行います。API呼び出しに費用を支払う前に、プロンプトと再生時間を検証してください。

ワーカーを構築する際は、遅延時間を徐々に増やしていくポーリング戦略を採用してください。ジョブに時間がかかりすぎる場合は、「delayed」ステータスに移動させます。ジョブを永遠に「running」状態のままにしてはいけません。後でこれらの遅延ジョブを確認するために、別のプロセスを使用してください。

UIにはプロバイダーの生の(raw)エラーを表示すべきではありません。内部エラーコードを、ユーザーにとって分かりやすいメッセージにマッピングします:

  • 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