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