عند الظهور ، جذبت Alice المستخدمين باستخدام توليف الكلام عالي الجودة وروبوت الدردشة بشكل غير متوقع. اليوم ، من المتوقع أن يكون لديها مهارات مفيدة وألعاب مثيرة للاهتمام مع خلفية يمكن أن تأخذ في الاعتبار سياق المستخدم وتنفيذ مجموعة واسعة من السيناريوهات. تتناول هذه المقالة إنشاء مهارة بناءً على جداول بيانات Google ، وهي أداة مألوفة للكثيرين لديهم إمكانات كبيرة لبرامج الدردشة الآلية الصغيرة.
يمكن أن يكون اللعب مع شخص حقيقي أكثر إثارة للاهتمام من اللعب مع شخصية افتراضية ، لذلك كمثال سنقوم بتطوير لعبة متعددة اللاعبين لأليس.
واحد! حوار
تبدأ اللعبة بالقواعد. خطرت لي هذه: كل من اللاعبين يضع أولاً كنزًا وفخًا خلف ثلاثة أبواب ، ثم يفتح أيًا من أبواب الخصم. افتح الكنز - احصل على عملات الخصم ، افتح الفخ - أعطه القطع النقدية. يتم تحديد عدد القطع النقدية ، من 1 إلى 3 ، من قبل اللاعب نفسه. خلف الباب المتبقي يوجد صندوق Pandora ، يفتح حيث يمكنك العثور على / فقدان كمية عشوائية من العملات المعدنية. يمكنك اللعب مع أليس وضد المستخدمين الآخرين.
يتم حل واجهة Alice في شكل حوار ، ويجب تنفيذ جميع تفاعلات اللعبة من خلال المراسلة. تتمثل الخطوات التالية في معالجة كل رسالة بواسطة خادم اللعبة:
- استعادة سياق المستخدم ؛
- تفسير الاستعلام في سياق المستعادة ؛
- تشكيل رسالة استجابة ؛
- حفظ سياق مستخدم متغير.
استعادة وحفظ سياق المستخدم
يتضمن سياق المستخدم حالته في اللعبة ، بما في ذلك النتائج السابقة ، وخطوة داخل البرنامج النصي والخصم الحالي ، بالإضافة إلى اسم المستخدم والمعلومات الأخرى اللازمة لمنطق اللعبة.
في كل طلب ،
وفقًا للبروتوكول ، تقوم أليس بتمرير معرف المستخدم. هذا يكفي لحفظ سياقه واستعادته لاحقًا.
كمستودع بيانات ، خذ جداول بيانات Google. تشمل المزايا الموضوعية لهذا الحل الاستخدام المجاني والرؤية وسهولة الاستخدام. يتيح لك محرر البرنامج النصي المدمج وصف منطق اللعبة في Apps Script (بناءً على JavaScript) ، والإشارة إلى جداول API ، ونشرها كتطبيق ويب.
بعد إنشاء الجدول بالعناوين الضرورية ، يمكنك الانتقال إلى محرر النصوص البرمجية:
يمكن وصف منطق اللعبة في مشروع على برمجة التطبيقات ، وتنظيمها كمجموعة من ملفات gs ، والانتقال إلى النشر:
عند النشر ، يجب عليك تحديد مدى توفر التطبيق للمستخدمين المجهولين:
عند الإخراج ، ستحصل على عنوان URL لتطبيق الويب المنشور. ستعمل الدالتان doGet () و doPost () في البرنامج النصي على معالجة الطلبات من الأنواع المقابلة لاستلام سياقات المستخدم وحفظها.
فيما يلي رسم تخطيطي للعمل مع جداول API لمعالجة البيانات:
تفسير طلب في سياق مستعاد
في الحالة العامة ، يتطلب التفسير الصحيح لاستعلامات النص استخدام خوارزميات NLU الذكية. وعلى الرغم من أن هذه الخوارزميات متوفرة في أدوات بسيطة مثل تلك
التي وصفتها Aimylogic ، فقد
قررت في هذه الحالة التخلي عن معالجة اللغة الطبيعية لصالح البساطة.
في اللعبة المقترحة ، يقتصر تفاعل اللاعب مع Alice على اثنتي عشرة حالة ممكنة ويمكن اختزالها إلى مجموعة صغيرة من النوايا. من أجل البساطة ، أقدم دائمًا للاعب ثلاثة إجراءات محتملة: أرسل "واحد" أو "اثنان" أو "ثلاثة". لأي طلب آخر ، تطلب أليس توضيح الإجراء.
يأتي السيناريو في هذه الحالة إلى رمز برمجة التطبيقات التالي:
بالنسبة للمستخدم ، يتم تمثيل التفاعل الذي تم حله على هذا النحو على أنه اختيار أحد الخيارات الثلاثة ، والذي تم تعريف معناه بوضوح في إجابة كل أليس. يتم تمثيل الخيارات نفسها من خلال الأزرار "واحد" ، "اثنان" ، "ثلاثة" ، والتي تسرع بشكل كبير في اللعب.
توليد رسالة الاستجابة
تتكون إجابة أليس من عدة أجزاء ، كل منها يحتاج إلى تشكيل ، بما في ذلك:
- نص لعرضه على الشاشة ؛
- نص لتوليف الكلام ؛
- مجموعة من أزرار التلميح.
لقد قمت مؤخرًا بصياغة
مفهوم حوار EASY ، واصفاً مبادئ تصميم واجهة محادثة ، بما في ذلك Alice. يسمح تنسيق استجابة أليس بتنفيذ هذه المبادئ.
لذا ، يتيح لك فصل النص المعروض والمنطوق جعل الإجابات أكثر إيجازًا وطبيعية. لا يمكنك إجبار Alice على تجميع النص الطويل الذي يعرفه المستخدم بالفعل ، وكذلك استخدام الرموز التعبيرية في نص الرسالة واسم الأزرار.
تعمل أزرار التلميح على تطبيق مبدأ المبادرة: تشير Alice دائمًا وتقترح الإجراءات الممكنة لمواصلة الحوار. في سيناريو اللعبة المقترحة ، لا تعتمد قائمة الأزرار على السياق ويتم إضافتها إلى كل رسالة.
لذلك ، لدينا جدول Google مع بيانات المستخدم التي يتم تخزينها واسترجاعها من خلال عنوان URL الخاص بتطبيق الويب. التطبيق مكتوب في Apps Script ، فهو يفسر إجراء المستخدم وفقًا لسياقه ويولد بيانات لرسالة الاستجابة.
يبقى للاتصال أليس ...
اثنان! التكامل
تسمح Yandex.Dialogs للمطورين بإضافة مهاراتهم إلى Alice. يتلخص ربط المهارة في ثلاثة أشياء رئيسية:
- التنشيط ؛
- التصميم ؛
- ربط الويب.
التنشيط والتصميم
للتفعيل ، من المهم اختيار عبارة تعترف بها أليس جيدًا ، والتي تلبي
المتطلبات الرسمية لـ Yandex. إذا كانت هناك أرقام في اسم التفعيل ، تحقق بشكل منفصل من التنشيط عند الدخول من لوحة المفاتيح والصوت.
يتضمن تصميم المهارة اسمًا ووصفًا ورمزًا وفئة وما إلى ذلك.
تجدر الإشارة إلى أنه في قائمة المهارات في الكتالوج يتم عرض الرمز وعبارة التنشيط فقط ، ويتم البحث في الكتالوج بشكل أساسي وفقًا للوصف.
الحصول على ربط الويب
ربط الويب هو العنوان الذي سترسل فيه أليس رسائل إلى مهارتك وتنتظر استجابة JSON بالتنسيق الموصوف.
يعرض تطبيق الويب الذي تم إنشاؤه على Apps Script استجابة بشكل صفحة html بشكل افتراضي ، ولكن باستخدام ContentService ، يمكن فرض إعادة JSON أيضًا:
return ContentService.createTextOutput(JSON.stringify(<JSON >)) .setMimeType(ContentService.MimeType.JSON);
ومع ذلك ، عند استخدام ContentService ، تعيد Google توجيه طلب المستخدم إلى عنوان URL مؤقت ، والذي لم يكن Yandex.Dialogs جاهزًا له. لذلك ، فإن عنوان تطبيق الويب باعتباره ربط الويب غير مناسب.
هناك خدمات مجانية تقدم ربط ويب مناسب لـ Alice ،
مثل Zenbot . في Zenbot ، للعبة المقترحة ، يمكنك كتابة نص برمجي قصير يصل إلى تطبيق ويب Google ويعيد استجابة مع الأزرار. بالمناسبة ، بهذه الطريقة يمكن دمج اللعبة ليس فقط مع أليس ، ولكن أيضًا مع القنوات الأخرى.
في ما يلي مثال على نص برمجي يوفر اللعبة "واحد ، اثنان ، ثلاثة!" في روبوت TelegramRazDvaTriBot:
<context> <input pattern="$Text"> <var name="Utterance" value="$Text" scope="input"/> <get url="https://script.google.com/macros/s/<id ->/exec" var="Result"> <param name="userId" value="$req_telegram_chat"/> <param name="utterance" value="$Utterance"/> <param name="channel" value="telegram"/> </get> <var name="Answer" value='javascript: $Result.text'/> <output value="$Answer"/> <sample> <item value=""/> <item value=""/> <item value=""/> </sample> </input> </context>
لمزيد من المرونة في معالجة الطلبات ، يمكنك كتابة خادمك الخاص ، على سبيل المثال ، Google App Engine. يمكن أيضًا استخدام هذه الأداة مجانًا.
بعد إنشاء مشروع في Google App Engine ، تتيح لك واجهة
Cloud Shell كتابة رمز الخادم على صفحة ويب واحدة ونشره على عنوان URL المطلوب للنموذج https: // <project id> .appspot.com ، والذي سيكون عنوان ربط الويب.
تتكون عملية الخادم من الخطوات التالية:
- تلقي بيانات الطلب من أليس ؛
- التفاعل مع تطبيق الويب للعبة ؛
- إرسال رد بتنسيق أليس.
تلقي / إرسال بيانات أليس
من Alice ، من المهم الحصول على معرفات الجلسة والمستخدم والرسالة ونص الطلب. أدناه مثال في PHP:
$data = json_decode(file_get_contents("php://input")); $session_id = $data->session->session_id; $user_id = $data->session->user_id; $utterance = $data->request->original_utterance; $messageId = $data->session->message_id;
كإجابة ، يتم إرجاع الأزرار والنصوص إلى اللعبة للعرض والنطق:
$button1 = array('title' => '1️⃣ ', 'hide' => true); $button2 = array('title' => '2️⃣ ', 'hide' => true); $button3 = array('title' => '3️⃣ ', 'hide' => true); $yaButtons = array($button1, $button2, $button3); $yaResponse = array('text' => $text, 'tts' => $tts, 'buttons' => $yaButtons, 'end_session' => false); $yaSession = array('session_id' => $session_id, 'message_id' => $messageId, 'user_id' => $user_id); $yaResult = array('response' => $yaResponse, 'session' => $yaSession, 'version' => '1.0'); echo json_encode($yaResult);
ثلاثة! تزامن
يستغرق إرسال / تلقي البيانات من تطبيق ويب بعض الوقت ، وتتوق أليس إلى إعطاء إجابة للمستخدم ، لذا تتداخل مشكلات المزامنة مع المسألة القانونية.
بطبيعة الحال ، بالنسبة إلى المشروعات الكبيرة ، لا تعد جداول بيانات Google مناسبة كخلفية لمهارة أليس: يزداد وقت الاستجابة مع عدد كبير من الطلبات الموازية. ومع ذلك ، هناك توصيات لتحسين برنامج الدردشة الآلي ، مما يجعل من الممكن جعل مشروع صغير قابل للتطبيق في نظام حوار تفاعلي في الوقت الحقيقي.
مهلة بروتوكول أليس المتزامن - 1.5 ثانية لكل استجابة. إذا لم يكن لدى الخادم الوقت لإعطاء إجابة خلال هذا الوقت ، سيرى المستخدم رسالة حزينة بروح "عذرًا ، <اسم الحوار> لا يستجيب". لا يقدم النظام أي أدلة على ما يجب القيام به بعد ذلك.
لتجنب مثل هذا الموقف ، يمكنك ويجب عليك تسريع الخدمة ، بالإضافة إلى تتبع المهلات ومعالجتها. إن العمليات الأكثر طولًا أثناء تشغيل البرنامج النصي للعبة هي قراءة وكتابة بيانات الجدول. لذلك ، أولاً ، يجب تقليل عدد هذه العمليات ، وثانياً ، من المستحسن موازنتها.
اقرأ بيانات الجدول مرة كافية. بعد تنفيذ المنطق ، يصبح البرنامج النصي جاهزًا لإعطاء المستخدم إجابة على الفور ، قبل نهاية تسجيل النتائج.
يجب السماح بوقت محدود لتلقي استجابة - على سبيل المثال ، 1100 مللي ثانية:
$request_params = array( 'userId' => $user_id, 'utterance' => $utterance, 'channel' => 'alice' ); $get_params = http_build_query($request_params); $ctx = stream_context_create(array('http'=> array( 'timeout' => 1.1 ) )); $answer = file_get_contents('https://script.google.com/macros/s/<id ->/exec?'. $get_params, false, $ctx);
إذا تم تلقي الرد بواسطة طلب GET في الوقت المحدد ، فيمكننا إرساله إلى المستخدم وبدء حفظ النتائج عن طريق طلب POST في الخلفية. خلاف ذلك ، نعطي المستخدم نصًا روتينًا مع أزرار للمتابعة ، ونتجاهل نتائج البرنامج النصي بحيث يمكن للمستخدم تكرار طلبه في السياق الحالي.
if($answer === FALSE) { $text = ' , .'; $tts = ', .'; } else { $answer = json_decode($answer); $text = $answer->text; $tts = $answer->tts;

في لعبة متعددة اللاعبين لـ Alice ، يجب حل مهام المزامنة بين خوادم الألعاب و Yandex ، وبين اللاعبين. إذا أراد اللاعب اللعب ضد مستخدم آخر ، فإن اللعبة نفسها تختار الخصم - من أولئك الذين أرادوا اللعب مؤخرًا. يجب على المستخدمين تأكيد استعدادهم للعب مع بعضهم البعض لبدء اللعبة.
في الوقت الحالي ، لا يمكن للمهارة بدء إرسال رسالة إلى مستخدم أليس. لذلك ، ينص البرنامج النصي للعبة على التحقق من جاهزية الخصم والدقائق المخصصة لجولة اللعبة. إذا قام الخصم بتأخير اللعبة ، فسيتم مطالبة المستخدم بانتظاره: "انتظر الخصم أكثر قليلاً؟" من خلال الموافقة على الانتظار ، يبدأ المستخدم فحصًا آخر. إذا انتهت دقيقة المباراة ، تنتهي اللعبة.
الخلاصة
تشتمل مزايا جداول بيانات Google كواجهة خلفية لبرنامج روبوت للدردشة ، باستثناء الإصدار المجاني ، على حقيقة أنها أداة تصحيح أخطاء أثناء التطوير ، وبعد ذلك تصبح وحدة تحكم مسؤول المهارات مع كل مسرات التحرير التعاوني من أي جهاز. من خلال السلبيات - التأخير في التشغيل المتزامن لعدد كبير من المستخدمين.
آمل أن تساعد هذه المقالة المتحمسين والمطورين على إنشاء مهارات مفيدة بسرعة لأليس أو القنوات الأخرى. اللعبة المقترحة متاحة في متجر Yandex.Dialog المهارات يسمى "
واحد ، اثنان ، ثلاثة! لعبة متعددة اللاعبين . "
إلى جانب الأدوات ذات الأغراض العامة ، هناك حلول متخصصة لتطوير برامج الروبوت للدردشة. أدعو القراء للمشاركة في استبيان صغير حول الخدمات التي أعرفها في هذا المجال. لم تتضمن القائمة جميع المنتجات الحالية - سأكون ممتنًا للتعليقات ذات الأسماء والمراجعات القصيرة إذا استخدمت أدوات أخرى.