"أليس ، دعنا نذهب إلى الواجهة الأمامية!"

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



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

نيكيتا دوبكو (@ dark_mefody on Twitter) هو مطور لواجهة ياندكس ، منظم اجتماعات MinskCSS و MinskJS ومحرر الأخبار في معايير الويب. لا يعمل Nikita في Yandex.Dialogs ولا ينتمي إلى Yandex.Alisa بأي شكل من الأشكال. لكنه كان مهتمًا بفهم كيفية عمل Alice ، لذلك حاول تطبيق مهاراتها على الويب وأعد تقريرًا في FrontendConf RIT ++. عند فك تشفير تقرير Nikita ، نأخذ بعين الاعتبار ما يمكن للمساعدين الصوتيين الاستفادة منه وبناء مهارة صحيحة في عملية قراءة هذه المادة.


السير


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

في عام 2006 ، وضعت IBM قاعدة معرفة ضخمة وذكاءًا متطورًا في الروبوت - وهذا هو ما حدث في IBM Watson . هذه مجموعة حوسبة ضخمة يمكنها معالجة خطاب اللغة الإنجليزية وإعطاء بعض الحقائق.

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

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

بالتدريج ، امتدت الفكرة إلى جميع برامج المراسلة الفورية تقريبًا: Facebook و Viber و VKontakte و WhatsApp وغيرها من التطبيقات. الآن السير هي اتجاه ، فهي في كل مكان. هناك خدمات تتيح لك كتابة واجهات برمجة التطبيقات على الفور لجميع المنصات.

مساعدين صوت


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

في 9 أغسطس 2011 ، ظهرت سيري . في البداية ، كان مشروعًا مستقلًا رأت فيه Apple شيئًا مثيرًا للاهتمام ، لذا اشتريته. هذا هو أقدم مساعد صوت شعبي مدمج في نظام التشغيل. بعد مرور عام ، تمكنت Google من التعرف على Apple بسرعة من خلال دمج المساعد الصوتي لـ Google Now في نظام التشغيل الخاص بها.

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



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

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

أليس


تم إصدار Alice في النسخة التجريبية المفتوحة في 10 أكتوبر 2017. يتم حبسها للغة الروسية وهذه هي ميزتها الضخمة. أليس يفهم اللغة الإنجليزية ، لكن الأسوأ من ذلك.

مهمة أليس هي مساعدة المستخدمين الناطقين بالروسية.

Yandex هي شركة كبيرة ويمكنها تضمين Alice في جميع تطبيقاتها التي يمكنها التحدث بطريقة أو بأخرى.

  • ياندكس متصفح.
  • Yandeks.Navigator.
  • محطة ياندكس.
  • Yandeks.Telefon.
  • Yandeks.Avto.
  • Yandeks.Drayv.

سارت عملية الدمج على نحو جيد إلى درجة أن مصنعي الطرف الثالث قرروا أيضًا إنشاء Alice.



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

لماذا شعبية جدا؟


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

الكسل . أنا مستلقٍ على أريكة تحت بطانية منقوشة ولا أريد أن أستيقظ لأذهب إلى مكان ما لتشغيل السماعات. إذا كنت كسول ، ثم بالكامل.

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

توفر. يشعر الأشخاص ضعاف البصر بالراحة في العمل مع المساعدين الصوتيين - عندما تكون الواجهة غير مرئية ، يمكنك سماعها وإصدار أوامر لها.

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

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

وفقا للإحصاءات ، يستخدم 35 مليون شخص أليسا شهريا. بالمناسبة ، يبلغ عدد سكان بيلاروسيا 9475600 نسمة. وهذا هو ، ما يقرب من 3.5 بيلاروسيا تستخدم أليس كل شهر.

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

مهارات المطور


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

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

تمتلك أليس أيضًا مهارات - قدرة المطورين على تنفيذ شيء ما من قِبل جهة خارجية.



في الوقت نفسه ، هناك فهرس بديل للمهارات ، وليس من Yandex ، الذي يدعمه المجتمع.



هناك تقارير جيدة حول كيفية عمل التطبيقات الصوتية. على سبيل المثال ، تحدث Pavel Guy في AppsConf 2018 بعنوان "إنشاء تطبيق صوتي باستخدام مثال مساعدة Google" . يشارك المتحمسون بنشاط في تطوير التطبيقات الصوتية. أحد الأمثلة على ذلك هو لعبة تنشيط الصوت التي كتبها إيفان Golubev.

أليس تحظى بشعبية ، رغم أن كل ما تفعله هو في منتصف المسافة بين الصوت والنص.



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

مهارات أليس - Yandex.Dialogs - لها حدود واحدة. يجب ألا يتجاوز الوقت المستغرق لرد واجهة برمجة التطبيقات الخاصة بك 1.5 ثانية. وهذا منطقي ، لأنه إذا كانت الإجابة معلقة - لماذا الانتظار؟

هل يهم حقًا ماذا تسأل عما إذا كنت لا تزال لا تحصل على إجابة؟

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

الوقت التجريبي


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

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

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

أخذت التقنيات المعروفة التي كانت في متناول اليد: Node.js و Express. لا يزال Heroku ، لأنه مجاني. التطبيق نفسه بسيط: إنه خادم على Node.js ، وهو تطبيق Express. فقط ارفع الخادم على بعض المنافذ واستمع للطلبات.

import express from 'express'; import { router } from 'routes'; const app = express(); app.use('/', router); const port = process.env.PORT || 8000; app.listen(port, () => { console.log('Server started on :${port}'); }); 

لقد استفدت من حقيقة أن كل شيء تم تكوينه بالفعل في تقويم معايير الويب ، ومن عدد كبير من الملفات الصغيرة يوجد ملف ICS واحد يمكن تنزيله. لماذا يجب علي جمع بلدي؟

 // services/vendors/web-standards.js import axios from 'axios'; const axioslnstance = axios.create({ baseURL: 'https://web-standards.ru/' , }); export function getRemoteCal() { return axioslnstance.get('calendar.ics'); } 

تأكد من أن كل شيء يعمل بسرعة.

 import { Router } from 'express'; import * as wst from 'services/vendors/web-standards'; export const router = Router(); router.get('/', function(req, res, next) { wst .getRemoteCal() .then(vendorResponse => parseCalendar(vendorResponse.data)) .then(events => { res.json({ events }); }) .catch(next); }); 

استخدم طرق GET للاختبارات. تعمل المهارات مع أساليب POST ، لذلك يمكن إجراء أساليب GET حصريًا لتصحيح الأخطاء. لقد نفذت هذه الطريقة. كل ما يفعله هو تنزيل نفس ICS ، وتحليلها وإصدارها في شكل JSON.

لقد قمت بإنشاء العرض التوضيحي بسرعة ، لذلك أخذت مكتبة العقدة الجاهزة:

 import ical from 'node-ical'; function parseCalendar(str) { return new Promise((resolve, reject) => { ical.parseICS(str, function(err, data) { if (err) { reject(err); } resolve(data); }); }); } 

إنها تعرف كيفية تحليل تنسيق ICS. في الإخراج تنتج ورقة مثل:

 { "2018-10-04-f rontendconf@https://web-standards.ru/": { "type": "VEVENT", "params": [], "uid": "2018-10-04-f rontendconf@https://web-standards.ru/", "sequence": "0", "dtstamp": "2019-05-25T21:23:50.000Z", "start": "2018-10-04T00:00:00.000Z", "datetype": "date", "end": "2018-10-06T00:00:00.000Z", "MICROSOFT-CDO-ALLDAYEVENT": "TRUE", "MICROSOFT-MSNCALENDAR-ALLDAYEVENT": "TRUE", "summary": "FrontendConf", "location": "", "description": "http://frontendconf.ru/moscow/2018" } } 

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

تنسيق الإدخال


كيف Yandex.Dialogs إرجاع المعلومات؟ يستمع إليك عمود أو مساعد صوت مضمن في تطبيق الهاتف المحمول ، وتقوم خوادم Yandex بمعالجة ما يسمونه وإرسال كائن استجابة:

 { "meta": { … }, "request”: { … }, "session": { … }, "version": "1.0" } 

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

هناك الكثير من المعلومات المفيدة في معلومات التعريف .

 { "meta": { "locale": "ru-RU", "timezone": "Europe/Moscow", "client_id": "ru.yandex.searchplugin/5.80…”, "interfaces": { "screen": {} } } } 

" الإعدادات المحلية " - تستخدم لفهم منطقة المستخدم.

يمكن استخدام " المنطقة الزمنية " للعمل بكفاءة مع الوقت وتحديد موقع المستخدم بدقة أكبر.

" واجهات " - معلومات عن توافر الشاشة. إذا لم تكن هناك شاشة ، فيجب أن تفكر في كيفية رؤية المستخدم للصور إذا أعطيتها إجابة. إذا كانت هناك شاشة ، فإننا نأخذ معلومات عنها.

تنسيق الطلب بسيط :

 { "request": { "command": "      16", "original_utterance": "     , 16", "type": "SimpleUtterance", "nlu": { "tokens": [ "", "", "", "", "", "16"], "entities": [...] } } } 

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

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

هل يمكن للكمبيوتر التحدث مثل شخص؟


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

 [15:46:05] Dudge: My favourite music is contemporary Dazz, what do you prefer? [15:46:14] Eugene: To be short I'll only say that I HATE Britnie [sic] Spears. All other music is OK compared to her. [15:47:06] Dudge: do you like to play any musical instruments [15:47:23] Eugene: I'm tone deaf, but my guinea pig likes to squeal Beethoven's Ode to Doy every morning. I suspect our neighbors want to cut his throat ... Could you tell me about your job, by the way? [15:48:02] Dudge: Guinea pig? Are you an animal lover [15:48:08] Eugene: Yeah. A nice little guinea pig. Not some annoying chatter bot. 

في عام 2019 ، لم يتغير شيء حقًا - لا يزال من الصعب خداع شخص ما. لكننا نتحرك تدريجيا نحو هذا.

العمل النصي


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



أول شيء لبدء تطوير مهارة هو تحية.

"بينما تفكر في ما تقوله ، افعلي! إنه يوفر الوقت ".

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

حوار سهل


علامات الحوار السهل. اخترع القائمة إيفان غولوبيف ، وأنا معجب بالصياغة.

  • لام الشخصية.
  • stestvenny E.
  • D ومرونة.
  • بواسطة ontekstny.
  • و natsiative.
  • موجز J.

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

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

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

سياقي - يجب على الروبوت ، من الناحية المثالية ، أن يتذكر ما حدث من قبل. ثم المحادثة ستكون حية.

- أليس ، ما هو الطقس اليوم؟
- اليوم في المنطقة من +11 إلى +20 ، غائم ، مع الخلوص.
- و غدا؟
- غدًا في الحي من +14 إلى +27 ، غائم ، مع خلوصات.

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

استباقية . إذا تباطأ المستخدم ، يجب أن يطالبه الروبوت: "انقر فوق هذا الزر!" ، "انظر ، لدي صورة لك!" ، "اتبع الرابط". يجب أن يخبرك الروبوت عن كيفية التعامل معه.

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

قواعد البيانات


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

هناك فارق بسيط: Yandex.Dialogs لا تتخلى عن معلومات المستخدم الخاصة ، على سبيل المثال ، الاسم والموقع. ولكن يمكن طلب هذه المعلومات من المستخدم ، وحفظها وربطها بمعرف جلسة محدد ، والذي يرسله Yandex.Dialogs في الطلب.

آلة الدولة


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



لا تبالغي. يمكنك الابتعاد وإنشاء آلة ضخمة للدولة ، والتي سيكون من الصعب اكتشافها - الحفاظ على هذه الشفرة أمر صعب. من الأسهل كتابة نص واحد يتكون من نصوص فرعية صغيرة.

غير واضح تحديد


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

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

كان غليانًا. دسم شور
مطعون على الملاحة.
همهمات همهم.
مثل المومياء في وسائل التحقق. "

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

توقف عن الكلام


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

الآن دعونا نرى الرمز.

الوقت التجريبي


أريد تنفيذ العبارات التالية.

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

عن "الأحداث القادمة" أي عبارة مناسبة. لقد صنعت روبوتًا كسولًا ، وعندما لا يفهم ما يقولونه ، يقدم معلومات حول الأحداث الثلاثة التالية.

 { "request": { "nlu": { "entities": [ { "tokens": { "start": 2, "end": 6 }, "type": "YANDEX.GEO", "value": { "house_number": "16", "street": " ", "city": "" } } ] } } } 

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

الرد على المستخدم


تحتاج إلى الرد بطريقة أو بأخرى على المستخدم الخاص بك. المهارة كلها هي 209 خطوط مع آخر سطر فارغ. لا شيء معقد - العمل في المساء.

كل ما تفعله هو معالجة طلب POST والحصول على "طلب".

 router.post('/', (req/ res, next) ⇒ { const request = req.body; 

علاوة على ذلك ، لم أعقِد آلة الدولة إلى حد كبير ، لكنني ذهبت وفقًا للأولويات. إذا كان المستخدم يريد أن يتعلم كيفية استخدام الروبوت ، فهذا هو أول إطلاق أو طلب للمساعدة. لذلك ، فقط أعده "EmptyResponse" - هذا ما أسميه.

 if (needHelp(request.request)) { res.json(prepareEmptyResponse(request)); return; } 

وظيفة needHelp بسيطة.

 function needHelp(req) { if (req.nlu.token.length ≤ 2 && req.nlu.tokens.includes('')) { return true; } if (req.nlu.token.length = 0 && req.type ≠ 'ButtonPressed') { return true; } return false; } 

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

إذا كان المستخدم يريد التوقف.

 if (needToStop(request.request)) { res.json(prepareStopResponse(request)); return; } 

لذلك نحن نبحث عن نوع من كلمة توقف في الداخل.

 function needStop(req) { const stopWords = ['', '', '' ]; return req.nlu.token.length ≤ 2 && stopWords.some(w ⇒ return req.nlu.token.includes(w)); } 

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

 function prepare StopResponse(req) { const { session, version } = req; return { response: { text: ' .  !', end_session: true, }, session, version, }; } 

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

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

مع طلب فارغ هو أكثر إثارة للاهتمام.

 return { "response": { "text": '!        -  .', "tts": '!        -  .', buttons: [ { title: ' ', payload: {} hide: false, }, { title: '  ', payload: { city: '', } hide: false, }, ], end_session: false, }, session, version, }; 

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

 + + 

وقالت إنها سوف تفهمه اثنين. يتم تمييز لهجة زائد.

هناك توقف مؤقت في الكلام - تضع علامة ترقيم مفصولة بمسافات. حتى تتمكن من إنشاء توقف دراماتيكي:

  — - - - - - - - - +  

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

 { "response": { "buttons": [ { "title": "Frontend Conf", "payload": {}, "url": "https://frontendconf.ru/moscow-rit/2019" , "hide": false } ] } } 

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

هناك حقل "الحمولة النافعة" حيث يمكنك إضافة البيانات. سيعودون بعد ذلك بـ "طلب" - ستعرف ، على سبيل المثال ، كيفية وضع علامة على هذا الزر.

يمكنك اختيار الأصوات التي ستتحدثها مهارتك.

  • أليس هو صوت أليس القياسي. الأمثل للتفاعلات القصيرة.
  • أوكسانا - صوت Yandex.Navigator.
  • جين.
  • الزهار.
  • Ermil.
  • اركان يافاس - لنصوص طويلة. أنشئت أصلا لقراءة الأخبار.

لإكمال المهارة ، ما عليك سوى إرجاع "end_session: true".

 { "response": { "end_session": true } } 

ما حدث مع التجريبي


أولا ، أنا مرشح حسب التاريخ.

 function filterByDate(events) { return events.filter(event ⇒ { const current = new Date().getTime(); const start = new Date(event.start).getTime(); return (start > current) || (event.end && new Date(event.end).getTime() > current && start ≤ current); }); } 

المنطق بسيط: في كل الأحداث التي قمت بتحليلها من التقويم ، فأنا أحضر الأحداث التي ستحدث في المستقبل ، أو أنها ستذهب الآن. ربما يكون من الغريب أن نسأل عن الأحداث الماضية - المهارة ليست في ذلك.

بعد ذلك ، التصفية في مكانها هي ما كان عليه الأمر.

 function filterByPlace(events, req) { const cities = new Set(); const geoEntities = req.nlu.entities.filter(e ⇒ e.type = 'YANDEX.GEO'); if (req.payload && req.payload.city) cities.add(req.payload.city); geoEntities.forEach(e ⇒ { const city = e.value.city && e.value.city.toLowerCase(); if (city && !cities.has(city)) { cities.add(city); } }); 

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

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

من فضلك لا تأنيب لكود - لقد كتبت بسرعة. كل شيء بدائي هناك ، لكن حاول استخدامه أو مجرد اللعب.

نشر المهارة


انتقل إلى صفحة Yandex.Dialogs.



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

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

تم - أرسل مهارة الاعتدال ، ويمكنك اختبارها.

تجريب


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

 const assert = require('assert'); const User = require('alice-tester'); it('should show help', async () => { const user = new User('http://localhost:3000'); await user.enter(); await user.say('  ?'); assert.equal(user.response.text, '    .'); assert.equal(user.response.tts, '    +.'); assert.deepEqual(user.response.buttons, [{title: '', hide: true}]); }]); 

., «».



, , . , : , , . , — , . Postman — .

. . Just AI. , , .

. dialogs.home.popstas.ru URL, , localhost. , debug. , localhost.



. — . URL , - .



— .

, , , .

. , , , , , . - - .


Dialogflow , Google Now. , — , — .



, . . , . , .

Google Dialogflow ., Dialogflower . Alexa, Google Now, . — API, .

, . Aimyloqic — . Zenbot , Tortu Alfa.Bot — , . !


FAQ . , . , , .

. , , , . — , . , . , .

IFTTT , — Trello. — API. , , . , IFTT — .

. , . .



, «» .

. Xiaomi . . . , Arduino - --- , , : «, - 2000!» — !

, : «, !» — ! . , .


. , , : , . . . . . . GitHub- ., . — .

Telegram- . . — . , . . .

. , . - , . , . . , . , : , -, , . , , . : « , ?» , , , .

— , . .

. — . , , . , .

, , - , !

— , — . . — — !

FrontendConf 2019 « CSS — ». — . , FrontendConf 2019 . , , , , .

. , , .

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


All Articles