كل المقالات

الذكاء الاصطناعي6 دقيقة قراءة

ما تعلمناه من توصيل خط هاتف محلي بنظام LLM

تُحسب تكلفة خدمات الذكاء الاصطناعي الصوتي المُدارة بالدقيقة، لذا فإن المكافأة التي يحصل عليها الموظف الذي يؤدي عمله بنجاح تتمثل في فاتورة أكبر. وقد تعلمنا من تجربة تطوير «Vocale» لتعمل إما عبر واجهة برمجة تطبيقات (API) مستضافة أو عبر وحدة معالجة رسومات (GPU) خاصة أربعة أمور تتعلق بالصعوبات الفعلية التي تظهر عند نقل النماذج إلى داخل المؤسسة.

مخطط تسلسلي لدورة محادثة واحدة في Vocale: يصل الصوت عبر WebRTC إلى خادم LiveKit والوكيل، ويقوم نظام Silero للكشف عن النشاط الصوتي بتحديد الكلام، ويُرجع Faster-Whisper نصًا مكتوبًا، ويتم حفظ الدورة في قاعدة بيانات PostgreSQL، ويُرسل سياق المحادثة إلى Qwen3-8B الذي يقدمه vLLM، ويتم توحيد الرموز المتدفقة وتجميعها في جمل، ويقوم XTTS-v2 بتحويلها إلى صوت، ثم يُعاد الصوت إلى المتصل.

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

لقد أنشأنا Vocale للرد على خط الهاتف الخاص بالشركة: فهو يرد على المكالمة من الرنة الأولى، ويجيب استنادًا إلى أدلة الشركة وسياساتها، ويفتح تذكرة دعم عندما يكون الجواب الصحيح هو أن الأمر يحتاج إلى مراجعة من قبل شخص ما. في البداية، اتخذنا قرارًا شكّل كل ما تلاه. توفر المنصة محركين خلف منتج واحد. في المستوى المستضاف، تأتي ميزات التعرف على الكلام والاستدلال وتوليف الصوت من واجهة برمجة تطبيقات (API) تابعة لجهة خارجية، ويتم احتساب تكلفة كل دقيقة. أما في المستوى المُستضاف ذاتيًا، فتعمل المكونات الثلاثة جميعها على وحدة معالجة الرسومات (GPU) التي تتحكم فيها الشركة، ولا يغادر أي صوت أو مستند المبنى، وتكلفة المكالمة تقتصر على استهلاك الكهرباء.

يعمل كلا المستويين بشكل متطابق من جانب المتصل. وكان الوصول إلى هذه النتيجة هو الجزء المثير للاهتمام، وهذا ما تعلمناه.

ما الذي يدور فعليًا في الحلقة

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

يصل الصوت عبر WebRTC إلى غرفة LiveKit. ويقوم نظام الكشف عن النشاط الصوتي (نستخدم Silero) بتحديد متى بدأ المتصل في التحدث ومتى توقف فعليًّا. يُرسل الصوت المخزّن مؤقتًا إلى Faster-Whisper ويعود في شكل نص مكتوب. تُسجَّل تلك الجولة في قاعدة بيانات Postgres، ثم يُرسَل سياق المحادثة وسجلها إلى نموذج اللغة، وهو في طبقتنا المُستضافة ذاتيًا نموذج Qwen3-8B الذي يقدمه vLLM. تتدفق الرموز (tokens) عائدةً، وتخضع للتوحيد والتجميع لتشكل جملًا كاملة، وعندها فقط تصل إلى XTTS-v2، الذي يعرضها كإطارات صوتية تنتقل مرة أخرى عبر WebRTC.

أربعة نماذج، عملية كتابة واحدة في قاعدة البيانات، ورحلة ذهاب وإياب، كل ذلك خلال فترة التوقف التي يتحملها المتصل قبل أن يقول «مرحبًا؟» في خضم الصمت.

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

الدرس الأول: المقاطعة هي ميزة من ميزات المنتج، وليست حالة استثنائية

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

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

لذلك، عند اكتشاف الكلام، نوقف الصوت ثم نقتطع الجزء المخزّن من كلام الموظف لنحتفظ فقط بما قيل فعليًّا بصوت عالٍ. تستمر المحادثة انطلاقًا من المكالمة التي عاشها المتصل، وليس تلك التي خطط لها النظام.

الدرس الثاني: لا يمكنك إزالة زمن الاستجابة، لذا عليك ملؤه

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

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

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

الدرس الثالث: النص المكتوب لا يُقرأ بصوت عالٍ

المبالغ المالية، والتواريخ في شكل أرقام، والأوقات، والمختصرات، ورموز المنتجات. كل ذلك يبدو جيدًا على الشاشة، لكنه يبدو خاطئًا عند نطقه صوتيًا. إذا قدمت لنموذج الكلام «1,250.00 بحلول 15/03»، فستسمع شيئًا لم يقله أي شخص بصوت عالٍ من قبل.

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

هذا هو المكون الأقل بريقًا في النظام، وهو أحد العناصر ذات التأثير الأكبر على ما إذا كان صوت الوكيل يشبه صوت شخص أم نظام الرد الآلي.

الدرس الرابع: ذاكرة VRAM هي الحد الأقصى، وليس قدرة الحوسبة

هذا هو الأمر الذي فاجأنا أكثر من غيره، وهو الذي يغير بشكل كبير الطريقة التي تحدد بها حجم الأجهزة.

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

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

إذا كنت تخطط لنشر ذاتي الاستضافة، فاحسب المكالمات المتزامنة مقابل ذاكرة الفيديو أولاً. كل شيء آخر يتبع هذا الرقم.

ما الذي لا يتغير

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

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

هذا هو الهدف من بناء المستويين بناءً على سلوك واحد. الانتقال بينهما هو مسألة تكوين، وليس إعادة بناء.

إذن، أيهما يجب أن تشغّل؟

بصراحة: ابدأ بالنسخة المستضافة.

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

تبرر الاستضافة الذاتية تكلفتها عند عتبتين، وهما عتبتان مختلفتان.

الأولى هي الحجم. تتناسب التكلفة المقاسة مع معدل الاستخدام، بينما لا تتناسب تكلفة الأجهزة مع ذلك، لذا هناك نقطة تقاطع تصبح عندها وحدة معالجة الرسومات (GPU) أرخص ببساطة. ويعتمد تحديد موقع هذه النقطة على حجم المكالمات لديك، ويجب عليك قياسه بدلاً من افتراضه. تقيس Vocale الإنفاق لكل نموذج ولكل مؤسسة لهذا السبب بالذات: يجب أن يكون الاختيار بين واجهة برمجة التطبيقات (API) والبطاقة قرارًا يستند إلى رقم محدد، وليس مجرد جدال.

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

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

النسخة المختصرة

يُعد الاستدلال المحلي على خط الدعم أمرًا عمليًّا في الوقت الحالي. فالنماذج جيدة بما يكفي، والأدوات (vLLM، Faster-Whisper، XTTS-v2، LiveKit) ناضجة بما يكفي بحيث لا يمثل مسار العمل أي مخاطر.

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

  • Local LLM
  • Voice AI
  • Self-hosted
  • RAG
  • vLLM
  • LiveKit
  • Support automation