الانتقال إلى المحتوى الرئيسي
LiveKit Agents هو إطار عمل لبناء ذكاء اصطناعي صوتي بالزمن الفعلي. يمكن لـ Venice تشغيل جميع المراحل الثلاث للوكيل الصوتي: تحويل الكلام إلى نص (STT)، ونموذج اللغة الكبير (LLM)، وتحويل النص إلى كلام (TTS). يتولى ملحق livekit-plugins-openai مرحلتي STT و LLM عند توجيهه إلى عنوان Venice الأساسي. أما بالنسبة إلى TTS، فتستدعي فئة VeniceTTS قصيرة نقطة النهاية /audio/speech في Venice مباشرةً.
تتناسب Venice مع بنية خط أنابيب STT-LLM-TTS في LiveKit Agents. لا توفّر Venice واجهة WebSocket لـ OpenAI Realtime (الكلام إلى كلام)، لذا لا يتوفر مسار RealtimeModel / الوسائط المتعددة. استخدم خط الأنابيب المكوّن الموضح أدناه — فهو يمنحك تحكمًا كاملًا في كل نموذج ويُبقي الاستدلال على البنية التحتية الخاصة بـ Venice.

كيف تُقابل Venice مكونات LiveKit Agents

الإعداد

ثبّت الإطار والملحقات المستخدَمة أدناه:
عيّن مفتاح Venice API وتفاصيل اتصال LiveKit:
يعود ملحق OpenAI إلى OPENAI_API_KEY عند حذف api_key. وبما أنك توجهه إلى Venice، مرّر دائمًا api_key صراحةً (وإلا سيُقرأ المفتاح من المتغيّر الخطأ). تقرأ الأمثلة أدناه VENICE_API_KEY.

فئة Venice TTS

لا تستخدم فئة openai.TTS من الملحق مع Venice. ترسل الإصدارات الحالية من livekit-plugins-openai الحقل stream_format مع كل طلب كلام، وترفضه نقطة النهاية /audio/speech في Venice بالخطأ 400. بدلًا من ذلك، احفظ هذه الفئة باسم venice_tts.py بجوار وكيلك. فهي تستدعي /audio/speech بالحقول التي تقبلها Venice فقط، وتسلّم الصوت إلى LiveKit فور وصوله.
venice_tts.py
يجب أن تكون قيمة response_format صيغةً يدعمها النموذج. تحقّق من model_spec.supported_formats في GET /models?type=tts. استخدم pcm مع tts-kokoro، إذ يشغّلها LiveKit دون خطوة فك ترميز. أما مع النماذج الأخرى، فمرّر mp3 أو wav وسيتولى LiveKit فك ترميز الصوت.

وكيل صوتي متكامل

هذا وكيل صوتي كامل يفرّغ الكلام باستخدام Venice STT، ويفكّر عبر Venice LLM، ويتحدث بواسطة Venice TTS من خلال فئة VeniceTTS أعلاه. يوفّر Silero كشفًا محليًا لنشاط الصوت حتى يعرف STT بوضع الدُفعات متى اكتمل الدور.
agent.py
شغّله في وضع التطوير:

إعداد كل مكوّن

LLM

يُعدّ ربط الـ LLM الأبسط — إذ يدعم /chat/completions من Venice تدفّق SSE واستدعاء الأدوات والرؤية، وكلها يستخدمها LiveKit مباشرة. يُبقي venice-uncensored-1-2 الاستدلال خاصًا وغير خاضع للرقابة بينما يغذّي خط أنابيب TTS؛ لا تلجأ إلى نموذج من فئة flash إلا إذا احتجت إلى تقليل زمن الوصول إلى أول رمز.
مرّر الخيارات الخاصة بـ Venice (البحث على الويب، شخصيات الأدوار، التحكم في التفكير) عبر extra_body:

تحويل الكلام إلى نص

يستدعي OpenAI STT في LiveKit المسار /audio/transcriptions لكل مقطع كلامي، لذا يحتاج إلى VAD (مثل Silero أعلاه) للكشف عن انتهاء الدور. استبدل النموذج الافتراضي بنموذج STT من Venice. يُعدّ nvidia/parakeet-tdt-0.6b-v3 الخيار الأصغر والأقل تأخيرًا؛ بينما يمثّل stt-xai-v1 و elevenlabs/scribe-v2 بديلين أحدث إذا أردت دقة أعلى.

تحويل النص إلى كلام

تستدعي VeniceTTS المسار /audio/speech. الأصوات في Venice خاصة بكل نموذج — مرّر زوج model/voice من النموذج نفسه. يُبقي tts-kokoro مرحلة الصوت خاصة وغير خاضعة للرقابة حتى يستطيع نطق مخرجات الـ LLM حرفيًا، كما أن مخرجاته بصيغة pcm تتفادى خطوة فك ترميز MP3 وتوفّر قليلًا من زمن التأخير. قد تطبّق الأصوات الأسرع المدعومة من مزوّدين آخرين (مثل Gemini) تصفية للمحتوى، لذا تجنّبها إذا احتجت إلى كلام غير خاضع للرقابة.

النماذج الموصى بها

تتغيّر معرّفات النماذج بمرور الوقت — اكتشف الخيارات الحالية أثناء التشغيل عبر GET /models?type=... و GET /models/traits بدلًا من ترميزها بشكل ثابت. بالنسبة للوكلاء الصوتيين، أعطِ الأولوية للفئات منخفضة زمن التأخير (النماذج المسمّاة flash أو turbo أو mini، أو ذات أعداد المعاملات الصغيرة) لأن الاستجابة المُدركة تعتمد على زمن الوصول إلى أول رمز وسرعة TTS. نقاط انطلاق جيدة من الكتالوج الحالي:

تصفح جميع النماذج

تصفية حسب النص وتحويل الكلام إلى نص وتحويل النص إلى كلام مع التسعير والقدرات الحيّة.

زمن التأخير ونصائح للإنتاج

تهيمن مدة تبادل الأدوار على جودة الوكيل الصوتي — أي الزمن بين انتهاء المستخدم من جملته وبدء الوكيل بالتحدث. مع خط أنابيب Venice الكامل، خصّص تقريبًا: توقّع ~0.8–1.5 ثانية للوصول إلى أول صوت — رائع لتبادل أدوار بأسلوب المساعد ومقاس بعناية. أما في المحادثات القابلة للمقاطعة والمتداخلة بشدة، فستشعر بالفجوة مقارنةً بنموذج كلام إلى كلام أصلي.

تقليل زمن التأخير

  • استخدم tts-kokoro مع response_format="pcm"، وهو الإعداد الافتراضي في VeniceTTS، لتخطي خطوة فك ترميز MP3.
  • اضبط Silero VAD (silero.VAD.load(min_silence_duration=0.4)) لتقصير كشف انتهاء الدور دون قطع الكلام.
  • فضّل الفئات منخفضة زمن التأخير لـ STT/TTS (مثل TTS tts-kokoro، و STT nvidia/parakeet-tdt-0.6b-v3). أبقِ venice-uncensored-1-2 كـ LLM للحفاظ على الخصوصية وعدم الخضوع للرقابة؛ ولا تنتقل إلى LLM من فئة flash إلا إذا احتجت إلى زمن أسرع للوصول إلى أول رمز.
  • اجعل الردود موجزة — فالجملة الأولى هي ما يحدد الاستجابة المُدركة.

الدمج بين المزوّدين

يتيح لك LiveKit اختيار كل مكوّن باستقلالية، فيمكنك الإبقاء على Venice حيث تهم أكثر خصوصيتها ونماذجها غير الخاضعة للرقابة، والاستعانة بمزوّد تدفّق حيث يكون زمن التأخير حرجًا. إعداد شائع لتفاعلية عالية يُبقي على Venice LLM (وربما STT) ويقرنه بـ TTS تدفّقي مخصّص:
ابدأ بإعداد Venice بالكامل للحصول على أبسط إعداد وأكثره خصوصية. أما إذا كنت تبني تجربة مستهلك سريعة ومحادثاتها عالية، فأبقِ Venice LLM وقيّم استخدام TTS تدفّقي لمرحلة إخراج الكلام.

القيود والملاحظات

  • لا يوجد Realtime API أو كلام إلى كلام. لا تمتلك Venice WebSocket لـ OpenAI Realtime، لذا فإن openai.realtime.RealtimeModel ومسار الوكيل متعدد الوسائط غير متاحين. استخدم خط أنابيب STT-LLM-TTS الموضّح أعلاه.
  • STT بوضع الدُفعات لا التدفّق. التفريغ الصوتي في Venice طلب/استجابة، لذا يلزم VAD (مثل Silero) لكشف انتهاء الدور. يضيف ذلك قدرًا يسيرًا من زمن التأخير مقارنةً بمقبس STT تدفّقي.
  • يستخدم TTS فئة VeniceTTS وليس openai.TTS. ترسل الإصدارات الحالية من livekit-plugins-openai الحقل stream_format في طلبات الكلام، وهو ما ترفضه Venice بالخطأ 400. تُبلّغ VeniceTTS بأن streaming=False، لذا يُركّب LiveKit الرد جملةً تقريبًا في كل مرة، ولا تستخدم الفئة علامة streaming في Venice. يبقى زمن التأخير مناسبًا لمعظم الوكلاء؛ استخدم response_format="pcm" لتقليل تكلفة فك الترميز.
  • طابق الصوت مع النموذج. معرّفات voice في TTS صالحة فقط مع model المطابق لها. راجع نماذج تحويل النص إلى كلام.
  • لا تُرمّز قوائم النماذج بشكل ثابت. يتم إهمال معرّفات نماذج Venice واستبدالها بانتظام — استعلم عن GET /models / GET /models/traits أثناء التشغيل. راجع الإهمالات.

موارد ذات صلة