مهارة B2B في أليس: من النموذج الأولي إلى الروبل الأول المحفوظ


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

إذا كنت لا تعرف فجأة مهارات أليس ، فابحث تحت المفسد: إنه يصف بإيجاز ما الذي يحدث.

لغير المستهلين
ما هو من هو أليس ، أعتقد أن الكثير من الناس يعرفون. ولكن فقط في حالة - هذا هو مساعد صوت من ياندكس. بالإضافة إلى حقيقة أنها يمكن أن تفعل الكثير من الأشياء "خارج الصندوق" ، فإن للمطورين تحت تصرفهم منصة لتوسيع وظائفها - Yandex.Dialogues (هم مهارات أليس).

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

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

فكرة


كيف بدأ كل شيء؟ في 13 مارس 2018 ، أعلنوا عن اختبار تجريبي لمنصة Yandex.Dialogs (مهارات Alice). في ذلك الوقت ، كان الكثيرون مهتمين بالفعل بالمساعد الافتراضي ، مما يعني أنها كانت فرصة رائعة للعمل مع جمهور كبير إلى حد ما. كانت فكرة روبوت الدردشة واحدة تدور في رأسي لفترة طويلة ، لذلك قررت أنه سيكون من المثير للاهتمام أن نجعل بعض المهارة في وقت فراغها بناءً عليها. وإذا تمكن من تحقيق فوائد في العمل - فسيكون ذلك ممتازًا بشكل عام.

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

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

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

الموارد والقيود


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

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

يجب الوصول إلى خدمة ويب المهارات من الخارج (بحيث يكون لدى Alice مكان لإرسال الطلبات) ، لذلك يجب وضعها على استضافة خارجية.

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

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

مراحل. المشاكل والحلول


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

وقع الاختيار على Redis . لقد أظهر نفسه جيدًا في اختبارات الاستجابة ، ونستخدمه أيضًا بإحكام في العمل ، مما يعني أنه في حال نجاحه ، يمكن نقل هذا المشروع بسهولة إلى الشركة (والمفسد - لقد نقلناه). كمفتاح ، يمكنك استخدام معرف المستخدم في المهارة (المشار إليه في الطلب) ، وتخزين بيانات الحالة في تنسيق JSON في القيمة. يمكن نشر نسخة مجانية من Redis على Heroku ، وقد تم دعمها في Yandex.Cloud لبعض الوقت الآن.

سنقوم الآن بتحليل مراحل المهارة بمزيد من التفصيل. في البداية ، يرى المستخدم عبارة الترحيب المعتادة. بعد ذلك ، يجب عليه تسمية اسمه ، والتي بموجبها ستبحث المهارة عن ملف التعريف.



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

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



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

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

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

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

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

مثل هذا التطبيق يمكن أن يكون خدمة خلفية.

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

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

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

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


عندما يقوم العميل بتنزيله وتثبيته ، فسيجده في طلباته:



هذا يكمل عمل المهارة.

النتائج


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

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

اتضح أنه بفضل المهارة ، من الممكن توفير بعض الموارد وزيادة بعض المؤشرات الرئيسية ، أي تم تأكيد افتراض الاستفادة من المهارة لشركتنا.

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

بدلا من خاتمة


غالبًا ما تتم كتابة برامج الدردشة والمهارات في جافا سكريبت وبيثون (حسب عدد المستودعات على جيثب لـ "chatbot"). ويرجع ذلك أيضًا إلى النشر السهل على الخادم. وقد كتب هذا المشروع في C # تحت .net الأساسية. في حالة إطار .net الكلاسيكي ، هناك بعض الصعوبات في النشر (يعمل بشكل أساسي في نظام Windows ، وما إلى ذلك) ، لكن الكثير قد تغير مع ظهور .net core. لكل خدمة أو إطار مذكور أعلاه ، هناك مكتبات تدعم هذه التكنولوجيا بشكل كامل. وبفضل هذا ، يمكن تشغيل المهارة على خوادم Linux ، وأكثر من ذلك على أي استضافة تدعم Docker. إذا كنت فجأة في بحث إبداعي ، فإنني أوصي بإيلاء الاهتمام لهذا الإطار ، يصبح بديلاً جيدًا لتطوير برامج الدردشة.

PS
UPD 08/01/2019: من الآن فصاعدا ، مهلة المهارات هي 3 ثوان .

Source: https://habr.com/ru/post/ar460036/


All Articles