الصورة الرمزية أبو بكر عابد


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

  • أصدرت OpenAI وGoogle واجهات برمجة التطبيقات المباشرة متعددة الوسائط لـ ChatGPT وGemini. حتى أن OpenAI ذهبت إلى حد إصدار رقم هاتف 1-800-ChatGPT!
  • أصدر كيوتاي برنامج Moshi، وهو برنامج LLM مفتوح المصدر بالكامل للصوت والصورة. أصدرت شركة Alibaba Qwen2-Audio وأصدرت شركة Fixie.ai Ultravox – وهما درجتان من شهادات LLM مفتوحة المصدر التي تفهم الصوت بشكل أصلي.
  • جمعت ElevenLabs 180 مليون دولار في السلسلة C.

على الرغم من الانفجار الكبير في جانب النموذج والتمويل، لا يزال من الصعب بناء تطبيقات الذكاء الاصطناعي في الوقت الفعلي التي تقوم ببث الصوت والفيديو، خاصة في لغة بايثون.

  • قد لا يتمتع مهندسو ML بالخبرة في التقنيات اللازمة لإنشاء تطبيقات في الوقت الفعلي، مثل WebRTC.
  • حتى الأدوات المساعدة للتعليمات البرمجية مثل Cursor وCopilot تكافح من أجل كتابة كود Python الذي يدعم تطبيقات الصوت/الفيديو في الوقت الفعلي. أعرف من التجربة!

ولهذا السبب نحن متحمسون للإعلان FastRTC، مكتبة الاتصالات في الوقت الحقيقي لبيثون. تم تصميم المكتبة لتسهيل إنشاء تطبيقات الذكاء الاصطناعي للصوت والفيديو في الوقت الفعلي بالكامل في لغة بايثون!

في منشور المدونة هذا، سنتعرف على أساسيات FastRTC من خلال بناء التطبيقات الصوتية في الوقت الحقيقي. في النهاية، ستفهم الميزات الأساسية لـ FastRTC:

  • 🗣️ ميزة الكشف التلقائي عن الصوت وأخذ الأدوار، لذلك لا داعي للقلق إلا بشأن منطق الاستجابة للمستخدم.
  • 💻 واجهة مستخدم تلقائية – واجهة Gradio UI مدمجة وممكّنة لـ WebRTC للاختبار (أو النشر إلى الإنتاج!).
  • 📞 اتصل عبر الهاتف – استخدم fastphone() للحصول على رقم هاتف مجاني للاتصال بالبث الصوتي الخاص بك (مطلوب رمز HF. زيادة الحدود لحسابات PRO).
  • ⚡️ دعم WebRTC وWebsocket.
  • 💪 قابل للتخصيص – يمكنك تحميل البث على أي تطبيق FastAPI حتى تتمكن من تقديم واجهة مستخدم مخصصة أو النشر خارج Gradio.
  • 🧰 الكثير من الأدوات المساعدة لتحويل النص إلى كلام، وتحويل الكلام إلى نص، وإيقاف اكتشاف الكلمات لتبدأ.

دعونا نتعمق.

ابدء

سنبدأ ببناء “عالم الترحيب” للصوت في الوقت الفعلي: وهو تكرار ما يقوله المستخدم. في FastRTC، وهذا بسيط مثل:

from fastrtc import Stream, ReplyOnPause
import numpy as np

def echo(audio: tuple[int, np.ndarray]) -> tuple[int, np.ndarray]:
    yield audio

stream = Stream(ReplyOnPause(echo), modality="audio", mode="send-receive")
stream.ui.launch()

دعونا نقسمها:

  • ال ReplyOnPause سوف يتعامل مع اكتشاف الصوت ويأخذ الدور نيابة عنك. عليك فقط أن تقلق بشأن منطق الرد على المستخدم. أي مولد يقوم بإرجاع مجموعة من الصوت، (ممثلة بـ (sample_rate, audio_data)) سوف تعمل.
  • ال Stream سيقوم الفصل بإنشاء واجهة مستخدم Gradio لتتمكن من اختبار البث الخاص بك بسرعة. بمجرد الانتهاء من إنشاء النموذج الأولي، يمكنك نشر البث الخاص بك كتطبيق FastAPI جاهز للإنتاج في سطر واحد من التعليمات البرمجية – stream.mount(app). أين app هو تطبيق FastAPI.

هنا هو في العمل:

التسوية: الدردشة الصوتية LLM

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

import os

from fastrtc import (ReplyOnPause, Stream, get_stt_model, get_tts_model)
from openai import OpenAI

sambanova_client = OpenAI(
    api_key=os.getenv("SAMBANOVA_API_KEY"), base_url="https://api.sambanova.ai/v1"
)
stt_model = get_stt_model()
tts_model = get_tts_model()

def echo(audio):
    prompt = stt_model.stt(audio)
    response = sambanova_client.chat.completions.create(
        model="Meta-Llama-3.2-3B-Instruct",
        messages=[{"role": "user", "content": prompt}],
        max_tokens=200,
    )
    prompt = response.choices[0].message.content
    for audio_chunk in tts_model.stream_tts_sync(prompt):
        yield audio_chunk

stream = Stream(ReplyOnPause(echo), modality="audio", mode="send-receive")
stream.ui.launch()

نحن نستخدم SambaNova API لأنه سريع. ال get_stt_model() سوف يجلب قاعدة Moonshine و get_tts_model() سوف يجلب Kokoro من Hub، وكلاهما تم تحسينهما بشكل أكبر لاستدلال وحدة المعالجة المركزية على الجهاز. ولكن يمكنك استخدام أي واجهة برمجة تطبيقات LLM/تحويل النص إلى كلام/تحويل الكلام إلى نص أو حتى نموذج تحويل الكلام إلى كلام. أحضر الأدوات التي تحبها – FastRTC يتعامل فقط مع طبقة الاتصال في الوقت الحقيقي.

المكافأة: الاتصال عبر الهاتف

إذا بدلا من stream.ui.launch()، تتصل stream.fastphone()، ستحصل على رقم هاتف مجاني للاتصال به في ساحة المشاركات الخاصة بك. لاحظ أن رمز Hugging Face مطلوب. زيادة الحدود لحسابات PRO.

سترى شيئًا كهذا في المحطة الطرفية الخاصة بك:

INFO:	  Your FastPhone is now live! Call +1 877-713-4471 and use code 530574 to connect to your stream.
INFO:	  You have 30:00 minutes remaining in your quota (Resetting on 2025-03-23)

يمكنك بعد ذلك الاتصال بالرقم وسوف يوصلك إلى البث الخاص بك!

الخطوات التالية

  • اقرأ المستندات لمعرفة المزيد حول أساسيات FastRTC.
  • أفضل طريقة لبدء البناء هي مراجعة كتاب الطبخ. تعرف على كيفية التكامل مع موفري خدمات LLM المشهورين (بما في ذلك واجهات برمجة التطبيقات في الوقت الفعلي لـ OpenAI وGemini)، ودمج التدفق الخاص بك مع تطبيق FastAPI والقيام بعملية نشر مخصصة، وإرجاع بيانات إضافية من المعالج الخاص بك، وإجراء معالجة الفيديو، والمزيد!
  • ⭐️ قم بتمييز الريبو وملفات الأخطاء وطلبات الإصدار!
  • اتبع FastRTC Org على HuggingFace للحصول على التحديثات وتحقق من الأمثلة المنشورة!

شكرا لك على التحقق من FastRTC!

شاركها.
اترك تعليقاً