Membina Giliran Kerja Video AI dalam TypeScript

Penjanaan video AI bukanlah permintaan HTTP standard. Pengguna menghantar prom dan tetapan. Hasilnya mengambil masa beberapa minit untuk sampai.

Backend anda mesti mengendalikan beberapa langkah:

  • Sahkan input.
  • Cipta rekod kerja.
  • Hantar kerja kepada penyedia.
  • Lakukan polling untuk mendapatkan hasil.
  • Kendali kegagalan.
  • Paparkan status kepada pengguna.

Anda harus menggunakan giliran kerja (queue) dan lapisan penyesuai (adapter layer). Ini menghalang kod khusus penyedia daripada merosakkan keseluruhan aplikasi anda.

Takrifkan jenis kerja teras untuk bertindak sebagai kontrak produk anda.

type JobStatus = "queued" | "validating" | "running" | "delayed" | "succeeded" | "failed";

type VideoJob = {
  id: string;
  userId: string;
  model: string;
  prompt: string;
  aspectRatio: "16:9" | "9:16" | "1:1";
  durationSeconds: number;
  status: JobStatus;
  providerTaskId?: string;
  outputUrl?: string;
  errorCode?: VideoJobErrorCode;
};

Gunakan antara muka (interface) untuk penyedia anda. Ini memastikan logik pekerja (worker) anda kekal bersih.

interface VideoProvider {
  submit(job: VideoJob): Promise<{ providerTaskId: string }>;
  poll(providerTaskId: string): Promise<
    | { status: "running" }
    | { status: "succeeded"; outputUrl: string }
    | { status: "failed"; error: unknown }
  >;
  normalizeError(error: unknown): VideoJobErrorCode;
}

Ikuti amalan terbaik ini untuk aliran kerja anda:

  1. Lakukan semakan murah terlebih dahulu. Sahkan prom dan tempoh sebelum memanggil API yang mahal.

  2. Gunakan strategi polling. Laksanakan gelung (loop) dengan kelewatan yang semakin meningkat.

  3. Kendali kelewatan. Jika sesuatu kerja mengambil masa terlalu lama, pindahkannya ke status "delayed". Gunakan pekerja berasingan untuk menyemak kerja yang tertunda kemudian.

  4. Normalisasikan ralat. Jangan sesekali memaparkan ralat mentah penyedia kepada pengguna anda. Petakan ralat teknikal kepada mesej yang mudah difahami manusia.

Contoh mesej pengguna:

  • "queued": Video anda sedang menunggu untuk bermula.
  • "running": Video anda sedang dijana.
  • "delayed": Ini mengambil masa lebih lama daripada biasa.
  • "moderation_rejected": Permintaan ini tidak dapat diproses.

Anggap video AI sebagai satu sistem kerja. Giliran kerja yang stabil dan taksonomi ralat yang jelas menjadikan produk anda lebih mudah untuk diselenggara dan diskalakan.

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