بناء طابور مهام لإنشاء فيديوهات الذكاء الاصطناعي باستخدام TypeScript
إن إنشاء فيديوهات الذكاء الاصطناعي ليس طلب HTTP قياسياً. يرسل المستخدم أمراً (prompt) وإعدادات، وتستغرق النتيجة دقائق لتصل.
يجب أن يتعامل نظام الخلفية (backend) الخاص بك مع عدة خطوات:
- التحقق من صحة المدخلات.
- إنشاء سجل للمهمة.
- إرسال المهمة إلى المزود (provider).
- الاستعلام المستمر (polling) عن النتائج.
- التعامل مع حالات الفشل.
- عرض الحالة للمستخدم.
يجب عليك استخدام طابور (queue) وطبقة محول (adapter layer). هذا يمنع الكود الخاص بمزود معين من تعطيل تطبيقك بالكامل.
قم بتعريف نوع مهمة أساسي (core job type) ليعمل كعقد لمنتجك.
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;
};
استخدم واجهة (interface) للمزودين الخاصين بك. هذا يحافظ على نظافة منطق العامل (worker logic).
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;
}
اتبع أفضل الممارسات هذه لسير عملك:
قم بإجراء الفحوصات منخفضة التكلفة أولاً. تحقق من صحة الأوامر (prompts) والمدد الزمنية قبل استدعاء واجهات برمجة التطبيقات (APIs) المكلفة.
استخدم استراتيجية الاستعلام المستمر (polling). قم بتنفيذ حلقة تكرارية (loop) مع فترات تأخير متزايدة.
تعامل مع حالات التأخير. إذا استغرقت المهمة وقتاً طويلاً جداً، انقلها إلى حالة "delayed" (متأخرة). استخدم عاملاً (worker) منفصلاً للتحقق من المهام المتأخرة لاحقاً.
قم بتوحيد الأخطاء (Normalize errors). لا تعرض أبداً أخطاء المزود الخام لمستخدميك. قم بربط الأخطاء التقنية برسائل مفهومة للبشر.
أمثلة على رسائل المستخدم:
- "queued": الفيديو الخاص بك في انتظار البدء.
- "running": جاري إنشاء الفيديو الخاص بك.
- "delayed": يستغرق هذا وقتاً أطول من المعتاد.
- "moderation_rejected": تعذر معالجة هذا الطلب.
تعامل مع فيديوهات الذكاء الاصطناعي كنظام مهام. إن وجود طابور مستقر وتصنيف واضح للأخطاء يجعل منتجك أسهل في الصيانة والتوسع.
Source: https://dev.to/miao_cunhui_587ccddb6acc1/building-an-ai-video-job-queue-in-typescript-1349