AR ▾
stableaudio.top

واجهة برمجة تطبيقات للنصوص بدون رقابة لمسار عمل الصوت الخاص بك

احصل على مفتاح API

نموذج LLM للنص إلى الصوت: ما يمكنه وما لا يمكنه فعله

عادةً ما يتكون نموذج LLM للنص إلى الصوت من أداتين تعملان معاً: نموذج لغة يكتب الموجّه، ونموذج صوت يحوله إلى صوت. يغطي هذا الـ API النصف الأول.

رسم توضيحي متساوي الأبعاد للوحات نصية تتحول إلى موجات صوتية، يُظهر LLM يكتب الموجّهات لأدوات الصوت

تم التحديث

نقاط رئيسية

  1. هذه الخدمة نصية فقط ولا تولّد الصوت أو الصور أو الفيديو.

  2. دوره في سير عمل الصوت هو كتابة الموجّهات، كلمات الأغاني، البرامج النصية للمشهدات والبيانات الوصفية.

  3. ربطها بأداة صوت يتطلب نصاً قصيراً وإخراج JSON.

  4. تكلف 1,000 موجّه بحجم 600 رمز مدخل و300 رمز مُخرج حوالي $0.24.

الإجابة المختصرة: يكتب LLM التعليمات، وليس الصوت

عندما يبحث الناس عن نموذج LLM للنص إلى الصوت، غالباً ما يتخيلون نموذجاً واحداً يقرأ جملة ويعيد ملف صوتي. نماذج اللغات الكبيرة لا تفعل ذلك. هي تقرأ وتكتب النص. يأتي الصوت من نموذج منفصل مخصص للصوت، والذي يأخذ وصف نصي كمدخل.

هذا الانقسام مفيد، لأن جودة الوصف مهمة جدًا. الطلب الغامض مثل "موسيقى مريحة" يعطي نموذج الصوت القليل للعمل عليه. الطلب المحدد الذي يحدد النوع والإيقاع والآلات والمزاج والهيكل والطول يعطيه الكثير. كتابة هذا الوصف المحدد بكميات كبيرة، بتنسيق متسق، هي مهمة جيدة لنموذج لغوي.

يقدم هذا الموقع بالضبط النصف الأول: واجهة برمجة تطبيقات نصية متوافقة مع OpenAI. لا تحتوي على توليد صوت، ولا تضمينات، ولا ضبط دقيق. إذا كنت بحاجة إلى الصوت نفسه، فقم بربطه بأداة تصنع الصوت، واستخدم نقطة النهاية هذه كخطوة كتابة أمامها. لسنا تابعين لأي مورد صوت، لذا تحقق من وثائق الأداة الخاصة بها لقواعد الإدخال الخاصة بها.

أين يساعد نموذج النصوص في خط أنابيب الصوت

المهام التي تناسبها هي تلك التي يكون المخرج فيها كلمات:

  • كتابة الموجّه. حوّل فكرة أولية إلى وصف مفصل يتضمن النوع، الإيقاع، الآلات والمزاج.
  • كلمات الأغاني والسيناريوهات. أبيات وقرن لأغنية، أو نص سردي لمقدمة بودكاست أو فصل من كتاب صوتي.
  • التباينات. عشرة موجّهات بديلة من مفهوم واحد، بحيث يمكنك استكشاف عدة اتجاهات.
  • البيانات الوصفية. العناوين، والأوصاف، والوسوم، وملاحظات المسار بمجرد وجود الصوت.
  • المراجعة. إعادة كتابة موجّه بعد أن أخطأ نتيجة ما، باستخدام ملاحظاتك حول ما حدث بشكل خاطئ.

النموذج هنا مُضبط للإجابة بدون رفض المحتوى للاستخدام القانوني للبالغين، وهو أمر مهم للصوت الغني بالخيال مثل القصص المظلمة، والمسرحيات الرعب، أو حوارات الألعاب الناضجة، حيث قد يرفض نموذج أكثر صرامة طلبًا معقولاً تمامًا. الخط الفاصل الوحيد هو أنه لا يُسمح بأي شيء يتضمن القاصرين في سياق جنسي، والمفاتيح ليست لذلك.

تغطي صفحة الموجّهات للفيديو نفس الفكرة لأدوات الفيديو؛ نمط كتابة وصف منظم أولاً وتسليمه للمولد ثانياً ينتقل عبر الوسائط.

مثال عملي: فكرة واحدة مدخلة، وموجّه منظم واحد مُخرَج

أكثر طريقة موثوقية لإدخال البيانات إلى أداة لاحقة هي المخرجات المهيكلة. وضع JSON (response_format: {"type":"json_object"}) يجعل النموذج يعيد كائن JSON، بحيث يمكن لسكربتك قراءة الحقول المسماة بدلاً من تحليل الفقرات. إليك سكربت Python يستخدم SDK الخاص بـ OpenAI ضد نقطة النهاية هذه.

import json, os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.stableaudio.top/v1",
    api_key=os.environ["UNCENSORED_API_KEY"],
)

system = (
    "You write prompts for text-to-audio tools. Return a JSON object with keys: "
    "genre, tempo_bpm, instruments (list), mood, structure, duration_seconds, prompt. "
    "The prompt field is one paragraph, no more than 60 words."
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": system},
        {"role": "user", "content": "A tense chase scene in a rain-soaked neon city."},
    ],
    response_format={"type": "json_object"},
    temperature=0.8,
)

spec = json.loads(resp.choices[0].message.content)
print(spec["prompt"])

احتفظ بكلمة JSON في رسالة النظام الخاصة بك وقائمة المفاتيح التي تريدها. النموذج لديه بعد ذلك هدف واضح. تحقق من النتيجة قبل إرسالها إلى الأمام: تحقق من أن tempo_bpm هو رقم وأن instruments هو قائمة، وأعد المحاولة مرة واحدة إذا لم يكن كذلك.

نفس الطلب في curl، مفيد للتحقق السريع، يبدو هكذا:

curl https://api.stableaudio.top/v1/chat/completions \
  -H "Authorization: Bearer $UNCENSORED_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "response_format": {"type": "json_object"},
    "messages": [
      {"role": "system", "content": "Return JSON with keys mood and prompt for a text-to-audio tool."},
      {"role": "user", "content": "A quiet morning in a mountain village."}
    ]
  }'

كتابة الموجّهات التي يمكن لنموذج الصوت استخدامها

سيفترض نموذج لغوي أي شكل من أشكال الموجّه الذي تطلبه، لذا فإن العمل الحقيقي هو تحديد الشكل. تنطبق بعض القواعد على معظم أدوات الصوت.

اكتب ما يطلبه الأداة، بالترتيب الذي تريده

اقرأ وثائق أداة الصوت وانسخ مفرداتها. إذا كانت تستجيب لوسوم أقسام بين الأقواس أو لسطر نمط من واصفات مفصولة بفواصل، ضع مثالاً على هذا التنسيق الدقيق في رسالة النظام. تحاكي النماذج الأمثلة بدقة.

استخدم أسماءً ذات طبيعة مادية

"بيانو متقطع، طبول ممسوحة، باص عكفي، طقطقة الفينيل" أفضل من "إحساس جاز لطيف". أخبر النموذج بتسمية الآلات، ونطاق الإيقاع، والملمس، وتجنب الصفات الزائدة.

حدد حدود الطول في التعليمات

تحدّ العديد من أدوات الصوت من طول الموجّه. ضع الحد في رسالة النظام ("لا يزيد عن 60 كلمة") ونفّذه في الكود أيضاً. تنحرف النماذج في عدّ الكلمات، لذا قم بقص النص أو إعادة المحاولة عند فشل الفحص.

حافظ على حلقة تغذية راجعة

بعد سماع النتيجة، أعد تغذية ملاحظاتك: "مزدحم جداً في النصف الثاني، الطبول عالية جداً، حافظ على المفتاح." يمكن لاستدعاء ثانٍ أن يعدّل الموجّه السابق مع هذه الملاحظة في السياق. تعني نافذة 100,000 رمز أنك تستطيع حمل سجل طويل من المحاولات إذا أردت أن يتعلم النموذج ما ترفضه باستمرار.

ربط النموذج بمولد الصوت

كود الغراء قصير. أنشئ المواصفات، تحقق منها، ثم مرر حقل prompt إلى أي خدمة صوت تستخدمها. يظهر استدعاء الصوت كعنصر نائب لأن واجهة كل مورد تختلف؛ خذ معلماته من وثائقهم.

def make_spec(idea: str) -> dict:
    r = client.chat.completions.create(
        model="uncensored",
        messages=[
            {"role": "system", "content": system},
            {"role": "user", "content": idea},
        ],
        response_format={"type": "json_object"},
    )
    return json.loads(r.choices[0].message.content)

ideas = ["Lo-fi study beat", "Epic orchestral trailer hit", "Haunted music box"]
for idea in ideas:
    spec = make_spec(idea)
    # send spec["prompt"] to your audio generator here
    print(idea, "->", spec["prompt"][:80])

إذا قمت بتشغيل هذا على قائمة بالتوازي، انتبه للحدود. المفتاح الكامل يسمح بـ 8 طلبات متزامنة و300 طلب في الدقيقة؛ يسمح مفتاح التجربة بـ 2 و60. يعني 429 مع concurrency وجود طلبات كثيرة في آن واحد، rate_limited يعني طلبات كثيرة في الدقيقة، ورأس Retry-After: 5 يعني الانتظار خمس ثوانٍ والمحاولة مرة أخرى. مجموعة خيوط صغيرة بحجم حدك، بالإضافة إلى إعادة المحاولة، كافية.

تُدرج وثائق API المعاملات المدعومة، بما في ذلك temperature، وtop_p، وstop وseed. يساعد الثابت seed عندما تريد موجّهات قابلة للتكرار أثناء ضبط رسالة النظام.

الكلمات، والسرد، والبيانات الوصفية على نطاق واسع

الموجّهات ليست سوى نوع واحد من النصوص الذي تحتاجه مشروع الصوت. بمجرد تشغيل خط الأنابيب، يمكن لنفس نقطة النهاية كتابة الأجزاء الأخرى المحيطة بها، ويمكنك إعادة استخدام كائن العميل من السكربت السابق.

نصوص السرد

للصوت المنطوق، اطلب نصاً يحتوي على إشارات مسرحية بتدوين ثابت، مثل علامة توقف بين الفقرات وملاحظة عندما يجب على المتحدث إبطاء وتيرته. أخبر النموذج بوقت القراءة المستهدف. قاعدة عامة هي أن القارئ يقرأ حوالي 150 كلمة في الدقيقة، لذا تحتاج القطعة المكونة من دقيقتين إلى حوالي 300 كلمة؛ اطلب هذا العدد ثم احسب الكلمات في الكود.

كلمات ذات بنية ثابتة

اطلب أقساماً مسماة، ونظام قافية، ونطاق مقاطع لكل سطر. يتبع النموذج "أربعة أسطر، ABAB، ثمانية إلى عشرة مقاطع لكل سطر" أفضل بكثير من "بيت قافٍ لطيف". قم بإجراء فحص في الكود بعد ذلك واطلب إعادة كتابة القسم الذي فشل فقط.

العناوين، والوسوم، والوصف

بعد وجود الصوت، أعد إرسال الموجّه النهائي والكلمات إلى النموذج واطلب ثلاثة خيارات للعنوان، وخمسة وسوم، ووصف من جملتين. هذا عمل رخيص ومتكرر يناسب نموذج النصوص جيداً.

القصص والألعاب

تتضمن الأصوات الخيالية، مثل مسلسل رعب، أو قصة تفاعلية، أو حوار لعبة، غالباً مواضيع داكنة أو ناضجة. النموذج مضبوط للإجابة بدون رفضات المحتوى للاستخدام القانوني للبالغين، لذا لا يُقابل الطلب الذي يناسب النوع بموعظة. يبقى الحظر المطلق على المحتوى الجنسي الذي ينطوي على القاصرين ساريًا.

إذا كنت تبث نصوصاً طويلة إلى شاشة، فعّّل stream: true واقرأ القطع عند وصولها؛ يُبلغ عن الاستخدام في نهاية البث.

تكلفة كتابة ألف موجّه

النص رخيص مقارنة بخطوة الصوت. المعدل هو $0.15 لكل مليون رمز مدخل و$0.50 لكل مليون رمز مخرج، يُحسب من رصيد مسبق الدفع بدون اشتراك.

افترض أن كل طلب يرسل حوالي 600 رمز (رسالة النظام بالإضافة إلى الفكرة) ويستقبل حوالي 300 رمز من JSON. بالنسبة إلى 1,000 طلب:

  • الإدخال: 600,000 رمز × $0.15 / 1M = $0.09
  • الإخراج: 300,000 رمز × $0.50 / 1M = $0.15
  • المجموع: $0.24

لذلك فإن ألف موجّه مكتمل تكلف حوالي أربعة وعشرين سنتاً، ولا تُحسب الطلبات التي تفشل أو تُرفض. يمكن للحساب الجديد المطالبة برصيد تجريبي بقيمة $0.50 بنقرة واحدة على صفحة المفاتيح، بدون بطاقة، صالحة لمدة 7 أيام، وهو ما يعادل تقريباً ألفين من الموجّهات بالحجم المذكور. بعد ذلك، تبدأ الشحنات من $20؛ انظر الأسعار للحصول على مستويات المكافآت وخيارات الدفع. لا تُستخدم الموجّهات للتدريب.

أسئلة وأجوبة

هل يمكن لنموذج LLM نصي توليد الصوت؟

لا. ينتج نموذج اللغة نصاً. يأتي الصوت من نموذج صوت منفصل، ودور النموذج اللغوي الكبير هو كتابة الموجّه، كلمات الأغاني أو البرنامج النصي الذي يحتاجه ذلك النموذج.

هل يولّد هذا API موسيقى أو كلاماً؟

لا. هو للنص فقط، بدون توليد صوت أو صور أو فيديو. وهو مُعد كخطوة للكتابة تسبق أداة الصوت.

كيف أحصل على مطالبات مهيكلة يمكنني تغذيتها إلى نص برمجي؟

استخدم وضع JSON مع ضبط response_format على json_object، وسمِّ المفاتيح في رسالة النظام، ثم تحقق من النتيجة المُحلَّلة في الكود.

كم تبلغ تكلفة توليد عدد كبير من الموجّهات؟

بأسعار $0.15 لكل مليون رمز إدخال و$0.50 لكل مليون رمز إخراج، تكلف 1,000 موجّه بحجم 600 رمز إدخال و300 رمز إخراج حوالي $0.24.

هل هناك طريقة مجانية لتجربته؟

يمكن للمستخدمين الجدد الحصول على رصيد تجريبي بقيمة $0.50 بنقرة واحدة بعد تسجيل الحساب. لا يتطلب ذلك بطاقة، وهو ساري لمدة 7 أيام.

مفتاحك على بُعد استمارة واحدة

أنشئ حساباً، وانسخ المفتاح، ثم غيّر عنوان URL الأساسي. هذا هو الإعداد الكامل.

احصل على مفتاح API