RocketBot عبارة عن روبوت دردشة قابل للبرمجة يتكامل مع VK و Telegram و Bitrix24. اليوم سنتحدث عن البنية التحتية والتقنيات الأخرى التي بنيت عليها.
/ الصورة Darryl Braaten CC BY-SAمجموعة الأدوات
عند تطوير RocketBot ، ركزنا على سرعة التطوير والنماذج الأولية. لهذا السبب ، تتم كتابة النظام في Python ، ويتم تحديد MySQL كقاعدة البيانات.
حتى الآن ،
تحتل بيثون
المرتبة الثالثة في ترتيب TIOBE من حيث الشعبية. هذا يعني أن اللغة بها مجتمع كبير وكمية لا حصر لها من الأدب المرجعي: الكتب والمواقع والدورات التدريبية ورموز المصدر. على سبيل المثال ، على GitHub ، يمكنك العثور على
مجموعات من أفضل الممارسات للتطوير في Python ، وعلى StackOverflow ،
يوجد عدد كبير من سلاسل الرسائل
المفتوحة . كرست دار نشر O'Reilly الكثير من الكتب لهذه اللغة ، ويمكن للمرء أن يميزها بـ "
Hitchhiking in Python " و "
Machine Machine with Python ".
إلى جانب عدد كبير من المصادر ، واحدة من المزايا الرئيسية لبيثون هي مجموعة متنوعة من المكتبات وأطر ML الوظيفية. من الأمثلة على ذلك
PyTorch و
SciKit-learn - وهي أدوات قوية تسهل معالجة الكلام الطبيعي ومربعات الحوار والبرامج النصية.
على وجه الخصوص ، لتطوير نماذج التدريب ، استخدمنا PyTorch ، نظرًا لأن لديها قدرات واسعة للنماذج الأولية. إضافةً إلى ذلك ، قمنا بتطبيق scikit-learn ، والذي يقوم بمعالجة البيانات المسبقة ، وكذلك pymorth2 و gensim (للعمل مع التشكل وتجهي النصوص ، على التوالي). نحن أيضا تجربة DeepPavlov - نحن تقييم قدراتها.
أما بالنسبة لقاعدة البيانات ، فقد اخترناها لأسباب عدم تعقيدها. MySQL أيضا لا يزال الأكثر شعبية من قواعد بيانات الخادم قوية. لهذا السبب ، يمكنك العثور على الكثير من المعلومات حول هذا الموضوع على الإنترنت (على سبيل المثال ، هناك
دليل تفصيلي
من المطورين ) ، وسيخبرك مجتمع واسع دائمًا بحل للمشكلة ، إن وجدت. بالإضافة إلى ذلك ، يوفر MySQL وظائف واسعة ، على الرغم من أنه لا يتبع جميع معايير SQL.
ما يمكن أن تفعله الدردشة بوت لدينا
يتيح لك chatbot الخاص بنا تكوين إجابات تلقائية لأسئلة المستخدم (على سبيل المثال ، لتطبيق الأسئلة الشائعة) ، وكذلك أتمتة العمليات الروتينية (على سبيل المثال ، استطلاعات الرأي) باستخدام البرامج النصية.
النظام قادر على العمل مع نوعين من الأسئلة: العرف والمعيار. في الحالة الأولى ، يحدد المسؤول بشكل مستقل جوهر المشكلة والكلمات الرئيسية التي سوف يستجيب لها الروبوت. سرد جميع الكلمات الأساسية اختياري. ستقوم خوارزميات RocketBot بتقييم معنى العبارة وتجد الإجابة بناءً على القرب الدلالي.
لتقييم القرب الدلالي ، يتم استخدام تمثيل متجه للاستعلام. يحدد المكونات الرئيسية (
PCA ) ويبحث عن الخيار الأقرب للمسافة في قاعدة البيانات. في حالتنا ، كان أداء قياس cosine_similarity (sciki-Learn) أفضل.
في الحالة الثانية ، لا يحتاج مالك الروبوت إلى تكوين أي شيء. إنه ببساطة يختار سؤالًا قياسيًا من القائمة - ثم يفهم الروبوت نفسه ما الذي سيُطرح عليه. الآن نستخدم خدمة Dialogflow لتسليط الضوء على السمات القياسية ، لكننا سنغيرها إلى التنفيذ الخاص بنا. نحن لسنا سعداء بالاعتماد على خدمة Google ، التي تقدم تأخيرًا في مزامنة البيانات. لاحظ أنه يمكن للمستخدم تغيير القالب القياسي في أي وقت عن طريق إنشاء نسخته الخاصة من العبارات وتعيين الإجراء المناسب.
في كلتا الحالتين ، يمكن أن يستجيب chatbot إما برسالة نصية أو ببرنامج نصي. الرسالة النصية هي مجرد استجابة قياسية للموقف. أما بالنسبة للنص ، فهو يتضمن بنية شجرة للحوار. في الواقع ، هذه هي سيناريوهات اتصال كاملة حيث يقوم chatbot بتنفيذ إجراءات مبرمجة اعتمادًا على ردود المستخدم. على سبيل المثال ، يمكن استخدام هذه الميزة لإجراء الاستطلاعات أو جمع الملاحظات.
لتجميع برنامج نصي ، يتم استخدام ثلاثة أنواع من الكتل:
- كتلة السؤال - يسأل سؤالًا للمستخدم ويكتب الإجابة عليه في متغير.
- كتلة من الشروط - تنفذ المتفرعة من البرنامج النصي.
- كتلة الاختيار المتغيرة - تتحكم في مسار المستخدم وفقًا للبرنامج النصي.
يملأ مالك الروبوت كل الكتل بشكل مستقل في محرر النصوص. حتى الآن ، لا يتوفر لدى المحرر أدوات التصور (لكنها ستظهر في المستقبل القريب). في تجربتنا ، لا يساعد وجود مصمم مرئي في تطبيق bot chat في إنشاء مخطط لعمله. لا يفكر معظم المستخدمين في الخوارزميات مقدمًا ، لذلك لا يوجد شيء يمكن نقله إلى المحرر.
مثال على الإعدادات مع الخروج من البرنامج النصي مع الإجابة "لا" على السؤال "هل عمرك 18 عامًا؟"ولكن مع كل هذا ، يمكننا مساعدة العميل في تخصيص نصوصه وفقًا لمخطط انسيابي ، والذي سوف يرسمه في محرر رسومي مثل xmind أو draw.io. سوف نتحقق من الخوارزمية بشكل مستقل وننفذ الإعداد الأولي - عادة ما يستغرق عدة ساعات.
بالإضافة إلى الإجابة على الأسئلة وتنفيذ البرامج النصية ، يمكن أن يعمل الروبوت مع أنظمة معالجة اللغة الطبيعية. ومع ذلك ، فبينما يؤدون نطاقًا ضيقًا جدًا من المهام: يبحثون عن إجابة للسؤال في قاعدة المعرفة ويحددون نوايا المستخدم (يتم استخدام نفس مربع حوار Dialogflow لهذا الغرض).
لقد حدنا من نطاق المهام المتعلقة بالحلول الذكية بسبب الصعوبات المحتملة في السلوك غير المتوقع. لا تزال أنظمة الذكاء الاصطناعى الحديثة عرضة للخطأ ، وعند إنشاء خدمات الأعمال ، يستحيل على الروبوت الإجابة على 80٪ من الأسئلة بطريقة ، و 20٪ في طريقة أخرى.
لتطبيق نظام معالجة الكلام الطبيعي ، يتم استخدام خوارزمية بحث بسيطة للغاية حتى الآن. بمرور الوقت ، نريد تطبيق إصدار جديد يستند إلى شبكات LSTM يستخدم التعلم التعزيز. على الأرجح ، سوف يعتمد التنفيذ الجديد على إطار DeepPavlov المذكور بالفعل.
ميزة أخرى من الروبوت لدينا هو التكامل مع أنظمة CRM. بإمكان RocketBot إنشاء عميل متوقع ومهمة في CRM (Bitrix24) بعد تشغيل البرامج النصية. يقوم برنامج الروبوت بإعادة توجيه كل ما كتبه المستخدم ، بالإضافة إلى معلومات عنه من برنامج المراسلة أو الشبكة الاجتماعية. كل شيء يعمل وفقًا للبروتوكولات القياسية ومن خلال واجهة برمجة التطبيقات الرئيسية لأنظمة CRM في شكل طلبات HTTP والبيانات في JSON.
في الإصدارات المستقبلية ، نخطط لإضافة إلى الروبوت القدرة على إنشاء مسارات تحويل تلقائي. سيتيح هذا لرجال الأعمال تعريف العملاء المحتملين بالبضائع وإغلاق الصفقة مباشرة في الدردشة. سيضيف النظام بشكل مستقل الكيانات اللازمة إلى CRM - العملاء المتوقعون والصفقات والمهام - بناءً على الإجابات والأسئلة المدخلة.
/ الصورة سبنسر كوبر CC BY-NDالبنية التحتية التي تم بناء chatbot عليها
تعمل جميع خدماتنا
في سحابة IT-GRAD - حيث يتم استضافة الخوادم الأمامية وقواعد البيانات وخوادم التطبيقات هناك. بشكل عام ، تساعدنا البنية التحتية السحابية على توسيع نطاق خدماتنا بسرعة ، لمواجهة الحمولة المتزايدة وزيادة حركة المرور المفاجئة. لهذا السبب ، في المستقبل نخطط فقط لتوسيع وجودنا في السحابة.
الروبوت نفسه عبارة عن مجموعة من خمس خدمات ميكروية تتفاعل مع بعضها البعض عبر HTTP - JSON (جميع الاتصالات الداخلية بين الخدمات تتم في قطاع آمن). على الرغم من أن هذا يؤدي إلى تأخير في الإجابة على السؤال خلال ثانية إلى ثانيتين ، إلا أن هذه البنية لديها إمكانات كبيرة للتوسيع وتتيح لنا تعديل الكتل الفردية دون التأثير على الآخرين. على سبيل المثال ، لن يؤثر تحديث خدمة microservice للبحث في الأسئلة الشائعة على تكامل خدمة microservice مع CRM.
لاختبار وإنشاء نماذج التعلم الآلي والشبكات العصبية ، نستخدم Nvidia Tesla M40 16GB. لكن حتى على ذلك ، التدريب ليس سريعًا جدًا. مجموعات البيانات التي نستخدمها في مهام معالجة اللغة الطبيعية هي عشرات الجيجابايت. لهذا السبب ، في بعض الحالات (على سبيل المثال ، لتوجيه مجموعات البيانات) استخدمنا أجهزة افتراضية مع 64 وحدة المعالجة المركزية.
قراءة إضافية - منشورات من مدونة IaaS للشركات الأولى:
من قناة Telegram لدينا: