ما الذي يفعله LLM في خط أنابيب الفيديو
إذا كنت تبني سير عمل لواجهة برمجة تطبيقات LLM لكتابة نصوص الفيديو الإباحي، فإن أول شيء يجب تحديده هو تقسيم العمل. تكتب نموذج اللغة. نموذج فيديو منفصل، أو محرر، أو تصوير، يصنع اللقطات. يقدم هذا الخدمة الجزء الأول فقط: نموذج نصي واحد مفتوح الأوزان، مُضبط للإجابة بدون رفض المحتوى للاستخدام القانوني للبالغين، خلف نقطة نهاية متوافقة مع OpenAI. لن يقوم بتوليد إطار، أو تركيب صوت، أو إنشاء صورة، ولا يوفر التضمينات أو ضبط الدقة الدقيقة.
لا يزال ذلك يغطي الكثير من الأعمال المحيطة بمشروع موجه للبالغين، مثل الخيال الأدبي، ولعب الأدوار، وسرد القصص على غرار الرفيق. يمكن للنموذج أن يمسك بمعالجة، ويقسمها إلى مشاهد، ويكتب الحوار والسرد، ويعد قائمة مفصلة لكل لقطة، ويصيغ الموجّهات لأدوات الفيديو التي تستخدمها في المرحلة التالية. تصف الصفحة الخاصة بـ خطوط أنابيب NSFW كيف ترتبط مرحلة النص هذه بباقي المكدس.
قاعدة واحدة ثابتة تنطبق على كل طلب: لا محتوى جنسي يتضمن القاصرين. ابنِ نظام الموجّه بحيث يكون كل شخصية بالغة، واعتبر ذلك شرطاً من شروط المشروع، وليس فكرة ثانوية.
خط أنابيب في أربع مراحل
يعمل سير عمل السكربت بشكل أفضل عندما تؤدي كل مكالمة وظيفة واحدة وتسلم ناتجاً هيكلياً للمرحلة التالية. يبدو التخطيط العملي كالتالي:
- كتاب القصة. مستند واحد يحتوي على الشخصيات (جميعهم بالغين)، والإعداد، والنبرة، والتفاصيل المتكررة. تكتبه مرة واحدة وترسله مع كل مكالمة.
- المخطط. مكالمة واحدة تحول الفكرة إلى 8 إلى 15 ملخصاً للنقاط الإيقاعية.
- سيناريوهات المشاهد. استدعاء واحد لكل لحظة يولّد الحوار وخطوط الحركة والسرد، باستخدام الكتاب المرجعي والمشهد السابق للاستمرارية.
- قائمة اللقطات والموجّهات. استدعاء نهائي لكل مشهد يعيد JSON: اللقطات والمدة وملاحظات الكاميرا وسلسلة موجّهة لأداتك الخاصة بالفيديو.
يؤدي تقسيمه بهذه الطريقة إلى إبقاء المخرجات قصيرة، مما يجعل كل نتيجة أسهل في المراجعة وأرخص في إعادة التوليد إذا لم تعجبك. كما يعني أن فشل المكالمة يكلف مشهداً واحداً، وليس السكربت بأكمله.
موجّه النظام الذي يحدد القواعد
موجه النظام هو المكان الذي توجد فيه النبرة، والتنسيق والحدود. النموذج الذي لا يتبع سلوك الرفض لا يزال يتبع التعليمات، لذا فإن جودة الموجّه الخاص بك تحدد جودة النص. كن محدداً بشأن النوع، وجهة النظر وما يجب استبعاده. إليك نقطة بداية للخيال الموجه للمشاهدين البالغين، مكتوب ليظل في الجانب المهني من الصفحة:
SYSTEM = '''You are a screenwriter for adult-audience fiction videos.
All characters are adults aged 25 or older, and you state each age in the character sheet.
Write in present tense, third person, with short visual action lines.
Keep dialogue natural and under 25 words per line.
Build tension and character through setting, glances and subtext.
Never include minors in any role or reference.
Follow the story bible exactly; do not change names, ages or relationships.
When asked for JSON, return only the JSON object.'''
عدّله حسب المشروع. تحتاج لغز نوارز وكوميديا رومانسية إلى تعليمات مختلفة، وغالباً ما يوجه النموذج بشكل أفضل مثال أسلوب سطر واحد داخل الموجّه من فقرة من الصفات.
توليد قائمة المشاهد في وضع JSON
في مرحلة قائمة اللقطات، تريد مخرجات يمكن للكود قراءتها. وضع JSON يفرض كائناً قابلاً للتحليل. مرر response_format={"type": "json_object"}، وسَمِّ المفاتيح في الموجّه، واحتفظ بدرجة الحرارة منخفضة. يستخدم هذا المثال حزمة Python openai مع عنوان URL الأساسي للموقع ومعرف النموذج uncensored.
import json, os
from openai import OpenAI
client = OpenAI(
base_url="https://api.nsfwvideogenerator.cc/v1",
api_key=os.environ["NOTRACK_API_KEY"],
)
SYSTEM = open("system_prompt.txt").read()
BIBLE = open("story_bible.txt").read()
def shot_list(scene_text):
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": SYSTEM},
{"role": "user", "content": (
"Story bible:\n" + BIBLE +
"\n\nScene script:\n" + scene_text +
"\n\nReturn a JSON object with key 'shots': a list of objects with "
"'number', 'seconds', 'camera', 'action' and 'video_prompt'."
)},
],
response_format={"type": "json_object"},
temperature=0.3,
seed=7,
)
data = json.loads(resp.choices[0].message.content)
return data["shots"]
for shot in shot_list(open("scene_03.txt").read()):
print(shot["number"], shot["seconds"], shot["video_prompt"])
تحقق من النتيجة قبل تسليمها. تأكد من وجود shots، وأن seconds هو رقم، وأن سلاسل الموجّهات ليست فارغة. إذا فشل التحليل، أعد المحاولة مرة واحدة. الطلبات الفاشلة أو المرفوضة لا تُحسب تكلفة، لذا فإن إعادة المحاولة لا تكلف شيئًا إضافيًا للاستدعاء الذي حدث له خطأ.
الإعدادات التي تهم النص الإبداعي
تريد المراحل المختلفة إعدادات مختلفة، وتمرر واجهة برمجة التطبيقات الإعدادات المعتادة: temperature، top_p، stop، seed وعقوبات التكرار والحضور.
- المخططات والحوار: درجة حرارة 0.8 إلى 1.0 للتنوع. قم بتوليد متغيرين أو ثلاثة واختر واحداً.
- قوائم اللقطات: درجة حرارة 0.2 إلى 0.3، بالإضافة إلى
seedثابت حتى تكون إعادة تشغيل نفس المدخلات قابلة للمقارنة. - التكرار: المشاهد الطويلة أحياناً تتكرر في نفس العبارة. عقوبة تكرار صغيرة، مثل 0.3، تساعد.
- التحكم في الطول:
max_tokensاختياري، لكن حد 800 لمشهد واحد يبقي المخرجات ضيقة. يسمح تسلسلstopمثل"END SCENE"لك بإنهاء عند علامة تطلب من النموذج كتابتها. - البث المتدفق: فعّل
stream: trueإذا كان الكاتب يشاهد المخرجات مباشرة. تذكر أن البث يحتجز حيز التزامن الخاص به حتى ينتهي.
يذكر البدء السريع كل معلمة مدعومة، والنقاط النهائية هي POST /v1/chat/completions و GET /v1/models.
استخدام نافذة السياق 100k للاستمرارية
الاستمرارية هي الفشل المعتاد في النصوص المولدة: يتغير اسم، أو يبتعد عمر، أو تختفي أداة مشهد. نافذة السياق هي 100,000 رمز، الموجّه بالإضافة إلى الإكمال، وهذا كبير بما يكفي لوضع الكتاب المرجعي الكامل للقصة، والمخطط، وعدة مشاهد مكتملة في كل مكالمة. لا تحتاج إلى نظام استرجاع لمشروع بهذا الحجم. الصق الحقائق واسمح للنموذج بقراءتها في كل مرة.
السياق ليس مجانيًا، لكنه رخيص. افترض أن الكتاب المرجعي والمخطط التفصيلي الخاص بك يبلغان إجمالي 20,000 رمز، وقمت بكتابة 50 مشهدًا، حيث يعيد كل استدعاء حوالي 600 رمز:
- الإدخال: 50 × 20,000 = 1,000,000 رمز × $0.15 لكل مليون = $0.15
- الإخراج: 50 × 600 = 30,000 رمز × $0.50 لكل مليون = $0.015
- المجموع: $0.165 لجميع المشاهد الـ 50
أضف مرحلة قائمة لقطات عبر نفس المشاهد الـ 50 مع 3,000 رمز مدخل و500 رمز مخرج في كل مرة: تكلفة الإدخال 150,000 رمز هي $0.0225 وتكلفة الإخراج 25,000 رمز هي $0.0125، أي مبلغ إضافي قدره $0.035. تكلف النص الكامل وقوائم اللقطات حوالي $0.20، وهو أقل من رصيد التجربة المجانية بقيمة $0.50 الذي يمكنك المطالبة به من صفحة مفتاح API.
ضع في اعتبارك أن نافذة السياق يجب أن تحتوي على كل من الموجّه والإجابة. يترك الكتاب المرجعي الذي يحتوي على 20,000 رمز مساحة كبيرة، لكن الموجّه الذي يحتوي على 95,000 رمز يترك مساحة ضئيلة للإكمال.
مراجعة الإخراج وإصلاحها
عامل كل مشهد مولد كمسودة أولى. ثلاث فحوصات تلتقط معظم المشاكل قبل أن تصل إلى أداة الفيديو. أولاً، قم بمرحلة اتساق: أرسل النص المكتمل مرة أخرى مع الكتاب المرجعي للقصة واطلب من النموذج سرد أي مكان يختلف فيه الاسم أو العمر أو الموقع أو الجدول الزمني. مكالمة ثانية بدرجة حرارة منخفضة رخيصة وغالباً ما تجد الانحراف الذي فاتك بالعين. ثانياً، اقرأ الحوار بصوت عالٍ. الأسطر التي تبدو جيدة على الشاشة قد تكون غير متقنة عند نطقها، وسيكشف عنها ممثل التعليق الصوتي أو أداة تحويل النص إلى كلام على الفور. ثالثاً، تحقق من أن مدد اللقطات تضيف إلى الطول الذي خططت له. النماذج فضفاضة في الحساب، لذا أضف حقول seconds في الكود بدلاً من الثقة في المجموع الذي كتبه النموذج.
عندما يفشل المشهد في تحقيق الهدف، قاوم إعادة كتابة نظام الموجّه بالكامل. أضف تعليمات تصحيحية واحدة إلى رسالة المستخدم، مثل "أسطر عمل أقصر" أو "حوار أكثر ووصف أقل"، وأعد إنشاء ذلك المشهد فقط. يظل الكتاب المرجعي ونظام الموجّه ثابتين بينما تختلف تعليمات واحدة في كل مرة، مما يجعل من الواضح أي تغيير ساعد. يُعد المعلمة seed مفيدة هنا، لأن البذرة الثابتة مع تعديل صغير في الموجّه تعزل تأثير التعديل.
الحدود والصدق والخطوات التالية
بعض القيود البسيطة قبل البناء. النموذج للنصوص فقط، لذا يجب أن تأتي كل فيديو، صورة ومسار صوتي من أدوات أخرى. إنه نموذج مفتوح الأوزان تشغله مزود مستقل، وليس واجهة برمجة التطبيقات الرسمية لأي بائع كبير. الجودة تختلف حسب الموجّه، لذا خطط لمرحلة مراجعة من قبل شخص على كل نص؛ عامل المخرجات كمسودة.
بالنسبة للإنتاجية، يسمح المفتاح الكامل بـ 8 طلبات متزامنة و300 في الدقيقة، بينما يسمح مفتاح التجربة بـ 2 و60. إذا كتبت المشاهد بالتوازي، قم بتعيين حجم مجموعة العمال لمطابقة ذلك. يعني رمز 429 مع rate_limited أو concurrency إبطاء السرعة؛ واحد مع رأس Retry-After: 5 يعني أن الخدمة مثقلة مؤقتاً، لذا انتظر خمس ثوانٍ وحاول مرة أخرى. لا تُستخدم الموجهات للتدريب.
يبدأ الرصيد المدفوع بشحن بقيمة $20، أو أي مبلغ صحيح يصل إلى $500، مع زيادة بنسبة +5% من $50، و+10% من $100، و+15% من $200. الدفع بالعملات المشفرة فقط، USDT على TRC20 أو USDC على Base، ولا ينتهي الرصيد أبدًا. الشروط الحالية موجودة في صفحة الأسعار. لمشروع مثل المشروع المذكور أعلاه، تغطي $20 عشرات من النصوص الكاملة.
