مولّد الموجّهات Stable Diffusion بالـ LLM: إعداد Python
إذا كنت تريد مولّد موجّهات Stable Diffusion LLM لتوسيع بضعة كلمات إلى موجّه كامل ومنظم جيدًا، فأنت بحاجة فقط إلى نموذج نصي وحوالي ثلاثين سطرًا من Python. يكتب النموذج الموجّه كنص؛ ولا يقوم بإنشاء الصور، لذا لا يزال عليك تشغيل النتيجة عبر SDXL أو أي أداة صور أخرى تستخدمها.


نقاط رئيسية
- يكتب الـ LLM النص فقط. قم بتغذية مخرجاته في إعداد SDXL أو ComfyUI أو Automatic1111 الخاص بك.
- وضع JSON يعيد أمرًا إيجابيًا وأمرًا سلبيًا يمكنك تحليلهما بدون regex.
- تكاليف التوسعة الواحدة أقل من $0.0001، لذا فإن تكلفة 1,000 أمر تبلغ حوالي $0.09.
- حافظ على اختصار الموجّهات: مشفرات النص في SDXL تقرأ فقط أول 77 رمزًا من كل كتلة.
ما يفعله LLM وما لا يفعله
تستجيب نماذج الصور بشكل جيد للموجّهات الكثيفة والمحددة: الموضوع، والإعداد، والعدسة، والإضاءة، والوسيط، والمزاج، وقائمة بالأشياء التي يجب تجنبها. يكتب معظم الناس ثلاثة كلمات فقط ويحصلون على نتيجة مسطحة. يقوم LLM بسد هذه الفجوة عن طريق أخذ فكرتك القصيرة وكتابة النسخة الطويلة بتنسيق ثابت.
حدد تقسيم العمل بوضوح. هذه الخدمة هي واجهة text-only API. لا تولّد الصور أو الصوت أو الفيديو، ولا تحتوي على تضمينات أو ضبط دقيق. تقع أمام خط أنابيب الصور الخاص بك وتكتب التعليمات التي يقرأها خط الأنابيب هذا. إنها نقطة نهاية متوافقة مع OpenAI تخدم نموذجًا واحدًا مفتوح الأوزان من مزود مستقل، وليست منتجًا من أي بائع لنماذج الصور.
النموذج مُضبط للإجابة بدون رفض المحتوى للاستخدام القانوني للبالغين، وهو أمر مهم للفنانين ومطوري الألعاب الذين تكون مواضيعهم (الرعب، والعنف في الخيال، والمواضيع الناضجة) محظورة في أماكن أخرى. يعد المحتوى الجنسي الذي يتضمن القاصرين حدًا صارمًا ولا يتم إنتاجه أبدًا.
الخطوة 1: احصل على مفتاح وجرب استدعاءً واحدًا
سجّل باستخدام Google أو عبر البريد الإلكتروني وكلمة المرور، ثم افتح صفحة مفتاح API. تضيف تجربة بنقرة واحدة رصيدًا بقيمة $0.50، صالح لمدة 7 أيام ولا يتطلب بطاقة. هذا يكفي لآلاف عمليات توسيع الموجّه، كما يوضح قسم التكلفة.
تحقق من أن كل شيء يعمل باستخدام curl:
curl https://api.sdxlapi.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You write Stable Diffusion prompts."},
{"role": "user", "content": "lighthouse in a storm"}
]
}'
أي حزمة SDK متوافقة مع OpenAI تعمل بمجرد تغيير عنوان URL الأساسي والمفتاح. التفاصيل موجودة في الوثائق.
الخطوة 2: موجّه نظام يوفّر مخرجات مستقرة
تأتي الجودة من الموجّه النظامي. حدّد للنموذج التنسيق المستهدف، وترتيب العناصر، وحد الطول، وما يجب استبعاده. نسخة تعمل كنقطة بداية جيدة:
تحول أفكار الصور القصيرة إلى موجّهات لـ SDXL. اكتب موجّهًا إيجابيًا واحدًا يتراوح بين 40 إلى 60 كلمة: الموضوع أولاً، ثم الإعداد، والتكوين، والإضاءة، والوسيط أو الأسلوب، والمزاج. استخدم عبارات مفصولة بفواصل، بدون جمل كاملة. ثم اكتب موجّهًا سلبيًا يتكون من ما يصل إلى 15 عبارة قصيرة. لا تضيف نصًا أو علامات مائية أو تسميات توضيحية إلى الصورة. أعد JSON مع المفاتيح "prompt" و "negative".
حدّ الكلمات مهم. تقرأ نماذج CLIP النصية في SDXL الموجّهات على شكل كتل من 77 رمزاً، وأي شيء يتجاوز ذلك إما يُقطع أو يُعالج بواسطة ميزة تقسيم النص في واجهة المستخدم. تهدف إلى 40 إلى 60 كلمة للحفاظ على معظم الموجّهات داخل كتلة واحدة، مع وضع أهم التفاصيل أولاً.
استخدم درجة حرارة منخفضة إلى متوسطة (0.7 إلى 0.9) بحيث يبقى الأسلوب متسقًا ولكن تشغيلين لنفس الفكرة يختلفان. إذا كنت بحاجة إلى مخرجات متطابقة للاختبار، مرر seed ثابتًا.
الخطوة 3: نص بايثون
يقرأ هذا السكربت الأفكار من قائمة، يطلب JSON، ويطبع زوج الموجّه. يستخدم الحزمة الرسمية من OpenAI لـ Python مع تغيير عنوان URL الأساسي.
import json
from openai import OpenAI
client = OpenAI(base_url="https://api.sdxlapi.com/v1", api_key="YOUR_KEY")
SYSTEM = (
"You turn short image ideas into prompts for SDXL. Write one positive "
"prompt of 40 to 60 words: subject, setting, composition, lighting, "
"medium or style, mood, as comma-separated phrases. Then a negative "
"prompt of up to 15 short phrases. Return JSON with keys "
"'prompt' and 'negative'."
)
def expand(idea: str) -> dict:
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": SYSTEM},
{"role": "user", "content": idea},
],
response_format={"type": "json_object"},
temperature=0.8,
max_tokens=400,
)
return json.loads(resp.choices[0].message.content)
for idea in ["lighthouse in a storm", "abandoned greenhouse at dawn"]:
result = expand(idea)
print(idea, "->", result["prompt"])
print("negative:", result["negative"], "\n")
وضع JSON (response_format مع json_object) يجعل الرد قابلاً للتحليل بسهولة. ومع ذلك، لفّ json.loads داخل كتلة try في بيئة الإنتاج وأعد المحاولة مرة واحدة إذا فشل، لأن الرد الطويل المقطوع عند max_tokens قد ينتهي في منتصف الكائن.
الخطوة 4: إرسال الموجّهات إلى أداة الصور الخاصة بك
المخرجات هي سلاسل نصية بسيطة، لذا يمكن لأي واجهة أمامية التعامل معها. مع تثبيت محلي لـ Automatic1111 أو ComfyUI، أرسل الحقلين إلى واجهة برمجة التطبيقات الخاصة به. مع سكربت يكرر حلقة على ملف CSV للأفكار، اكتب النتائج في ملف وادمجها في قائمة انتظار لمعالجتها كدفعة.
- احفظ الفكرة والموجّه والموجّه السلبي معًا، بحيث يمكنك تتبع صورة جيدة إلى التعليمات التي أنتجتها.
- أضف سطر نمط من قائمتك الخاصة ("صورة سينمائية"، "رسم بالحبر") كحقل إضافي في رسالة المستخدم عندما تريد سلسلة ذات مظهر متطابق.
- احتفظ بمكتبة قصيرة من الموجّهات التي نجحت، وأدرج اثنين أو ثلاثة منها في موجّه النظام كأمثلة. توجه الأمثلة القليلة الأسلوب بشكل أكثر موثوقية من الصفات.
لمشروع لعب أدوار أو لعبة، يمكن لنفس النمط أن يوضح مشاهد من قصة، حيث يحول LLM الفقرات الأخيرة إلى وصف مرئي. تغطي المقالة عن سيناريوهات لعب الأدوار النصية جانب القصة.
المشاكل الشائعة وحلولها
تظهر بعض المشكلات في معظم مشاريع مولّدات الموجّهات.
يضيف النموذج تعليقات
الردود التي تبدأ بـ "إليك موجّهك" تُعطّل خطوط الأنابيب. يزيل وضع JSON معظم هذه المشكلة. إذا كنت تعمل بالنص العادي، اكتب "أخرج الموجّه فقط، بدون تمهيد" وأضف تسلسل توقف لسطر لا تريد رؤيته أبداً.
تبدو الموجّهات متشابهة
تعطي درجة الحرارة المنخفضة والقالب الصارم نتائج موحدة. ارفع درجة الحرارة إلى 1.0، أو غيّر سطر النمط الذي تمرره، أو اطلب ثلاثة بدائل واختر واحداً. تُمرر العقوبات (frequency_penalty، presence_penalty) كما هي ويمكنها تفكيك العبارات المتكررة.
الموجّهات طويلة جداً بالنسبة لنموذج الصور
ضع حداً صارماً لعدد الكلمات في موجّه النظام وتحقق من الطول في الكود. يؤدي التقطيع اليدوي إلى فقدان التفاصيل الأخيرة، وهي عادة الأقل أهمية، ولكن من الأفضل أن يكتب النموذج بشكل مختصر من الأساس.
تصل إلى حدّ 429
أرسلت طلبات كثيرة جداً في الدقيقة أو في وقت واحد. تراجع لبضع ثوانٍ وأعد المحاولة؛ قد يتضمن الرد Retry-After: 5. تبقى الدفعة مع مجموعة خيوط صغيرة من 4 إلى 8 عمال ضمن حدود المفتاح الكامل.
تكلفة 1,000 موجّه
التسعير هو $0.15 لكل مليون رمز مدخل و $0.50 لكل مليون رمز مخرج. يرسل التوسيع النموذجي موجّه نظام بحوالي 150 رمزاً بالإضافة إلى فكرة مكونة من 15 رمزاً، ليصبح المجموع 170 رمزاً مدخلاً، ويتلقى حوالي 120 رمزاً من JSON.
- الإدخال: 170 × $0.15 / 1M = $0.0000255.
- الإخراج: 120 × $0.50 / 1M = $0.00006.
- لكل موجّه: حوالي $0.0000855.
- 1,000 موجّه: حوالي $0.0855، أو $0.09.
قم بالتقريب للأعلى للموجّهات النظامية الأطول أو أمثلة few-shot. إذا أضفت 600 رمز من الأمثلة، يصبح الإدخال 770 رمزاً وتكلفة 1,000 موجّه حوالي $0.1155 للإدخال + $0.06 للإخراج، أي ما مجموعه حوالي $0.18. في كلتا الحالتين، يغطي رصيد التجربة بقيمة $0.50 آلاف التوسعات. الطلبات الفاشلة لا تُفرض عليها رسوم، والرصيد المسبق الدفع لا ينتهي؛ انظر إلى صفحة التسعير لشحن الرصيد ($20 إلى $500، بالبطاقة أو العملات المشفرة).
المزيد من الأدلة
أسئلة وأجوبة
هل يمكن للنموذج اللغوي الكبير توليد صورة Stable Diffusion بنفسه؟
لا. يكتب النص فقط. تمرر موجّهه إلى SDXL، ComfyUI، Automatic1111 أو أي أداة صور أخرى تشغلها.
كم يجب أن يكون طول موجّه SDXL؟
يعمل بشكل جيد حوالي 40 إلى 60 كلمة، مع التفاصيل الرئيسية أولاً، لأن مشفرات النص تقرأ في كتل من 77 رمز.
هل يرفض المواضيع الناضجة أو الداكنة؟
النموذج مُضبط للإجابة بدون رفض المحتوى للاستخدام القانوني للبالغين. لا يتم إنتاج محتوى يتضمن القاصرين أبداً.
ما اسم النموذج الذي أرسله؟
أرسل uncensored كمعرّف النموذج، مع عنوان URL الأساسي https://api.sdxlapi.com/v1 ومفتاحك كرمز Bearer.
هل يمكنني تشغيل العديد من الموجّهات بالتوازي؟
المفتاح الكامل يسمح بـ 8 طلبات متزامنة و300 في الدقيقة؛ والمفتاح التجريبي يسمح بـ 2 و60. يعني استجابة 429 الانتظار وإعادة المحاولة.
مفتاحك على بُعد نموذج واحد
أنشئ حساباً، وانسخ المفتاح، ثم غيّر URL الأساسي. هذه هي الإعدادات الكاملة.