Asisten suara bukan masa depan yang jauh, tetapi kenyataan. Alexa, Siri, Google Now, Alice dibangun menjadi speaker pintar, jam tangan, dan telepon. Mereka secara bertahap mengubah cara kami berinteraksi dengan aplikasi dan perangkat. Melalui asisten Anda dapat mengetahui ramalan cuaca, membeli tiket pesawat, memesan taksi, mendengarkan musik dan menyalakan ketel di dapur, berbaring di sofa di ruangan lain.

Siri atau Alexa sebagian besar berbicara bahasa Inggris kepada pengguna, jadi di Rusia mereka tidak sepopuler Alice dari Yandex. Untuk pengembang, Alice juga lebih nyaman: penciptanya memiliki blog, memposting alat yang nyaman di GitHub dan membantu membangun asisten di perangkat baru.
Nikita Dubko (@dark_mefody di Twitter) adalah pengembang antarmuka Yandex, penyelenggara pertemuan MinskCSS dan MinskJS dan editor berita dalam standar Web. Nikita tidak bekerja di Yandex.Dialogs dan tidak berafiliasi dengan Yandex.Alisa dengan cara apa pun. Tetapi dia tertarik untuk memahami bagaimana Alice bekerja, jadi dia mencoba menerapkan keterampilannya untuk Web dan menyiapkan laporan tentang ini di
FrontendConf RIT ++. Dalam menguraikan laporan Nikita, kami mempertimbangkan apa yang dapat dibawa oleh asisten suara dan membangun keterampilan yang tepat dalam proses membaca materi ini.
Bot
Mari kita mulai dengan sejarah bot. Pada tahun 1966, bot
Eliza muncul, berpura-pura menjadi seorang terapis. Itu mungkin untuk berkomunikasi dengannya, dan beberapa bahkan percaya bahwa orang yang hidup menjawab mereka. Pada 1995, bot
ALICE keluar. - jangan bingung dengan Alice. Bot mampu menyamar sebagai orang sungguhan. Sampai hari ini terletak di Open Source dan sedang diselesaikan. Sayangnya, ALICE tidak lulus dari Tes Turing, tetapi ini tidak menghentikannya untuk menyesatkan orang.
Pada tahun 2006, IBM menempatkan basis pengetahuan yang sangat besar dan kecerdasan canggih di bot - begitulah
IBM Watson muncul. Ini adalah cluster komputasi besar yang dapat memproses pidato bahasa Inggris dan memberikan beberapa fakta.
Pada 2016, Microsoft melakukan percobaan. Dia menciptakan bot
Tay , yang diluncurkannya di Twitter. Di sana, bot belajar menggunakan microblog berdasarkan bagaimana pelanggan hidup berinteraksi dengannya. Akibatnya, Tay menjadi rasis dan misoginis. Sekarang ini adalah akun tertutup. Moral: jangan biarkan anak-anak di Twitter, dia bisa mengajar yang buruk.
Tapi ini semua bot yang tidak bisa Anda komunikasikan untuk keuntungan Anda sendiri. Pada 2015, "berguna" muncul di Telegram. Bot ada di program lain, tetapi Telegram membuat splash. Dimungkinkan untuk membuat bot yang bermanfaat yang akan memberikan informasi, menghasilkan konten, mengelola publik - kemungkinannya besar, dan APInya sederhana. Bot telah menambahkan gambar, tombol, tooltips - antarmuka interaksi telah muncul.
Secara bertahap, gagasan itu menyebar ke hampir semua pengirim pesan instan: Facebook, Viber, VKontakte, WhatsApp, dan aplikasi lainnya. Sekarang bot adalah tren, mereka ada di mana-mana. Ada layanan yang memungkinkan Anda untuk menulis API segera untuk semua platform.
Asisten suara
Perkembangan berjalan paralel dengan bot, tetapi kami akan menganggap bahwa era asisten datang kemudian.
Pada 9 Agustus 2011,
Siri muncul. Awalnya, itu adalah proyek independen di mana Apple melihat sesuatu yang menarik, jadi saya membelinya. Ini adalah asisten suara populer tertua yang ada di dalam OS. Setahun kemudian, Google dengan cepat menyusul Apple dengan mengintegrasikan asisten suara
Google Now ke dalam sistem operasinya.
Setelah 2 tahun, Microsoft merilis
Microsoft Cortana . Tetapi tidak jelas mengapa - pasar seluler untuk asisten suara, tampaknya, mereka sudah ketinggalan. Perusahaan mencoba untuk mengintegrasikan asisten suara ke dalam sistem desktop, ketika sudah ada perjuangan untuk pasar perangkat yang berbeda.
Amazon Alexa keluar sedikit kemudian tahun itu.

Asisten telah berevolusi. Selain sistem perangkat lunak yang tahu cara bekerja dengan suara, speaker muncul dengan asisten. Menurut statistik, pada awal 2019, setiap keluarga ketiga di Amerika Serikat memiliki kolom yang cerdas. Ini adalah pasar besar di mana Anda dapat berinvestasi.
Tetapi ada masalah - asisten asing memiliki bahasa yang buruk dengan Rusia. Para asisten dipenjara dalam bahasa Inggris dan memahaminya dengan baik, tetapi ketika berkomunikasi dalam bahasa Rusia, kesulitan penerjemahan muncul. Bahasa berbeda dan memerlukan pendekatan berbeda untuk pemrosesan bahasa alami.
Alice
Alice dirilis dalam versi beta terbuka pada 10 Oktober 2017. Ini dipenjara karena bahasa Rusia dan ini adalah keuntungan yang sangat besar. Alice mengerti bahasa Inggris, tetapi lebih buruk.
Misi Alice adalah untuk membantu pengguna berbahasa Rusia.
Yandex adalah perusahaan besar dan mampu menanamkan Alice di semua aplikasi yang entah bagaimana bisa berbicara.
- Yandex.Browser.
- Yandex.Navigator.
- Stasiun Yandex.
- Yandex. Telepon.
- Yandex. Otomatis.
- Yandex. Berkendara.
Integrasi berjalan sangat baik sehingga produsen pihak ketiga juga memutuskan untuk membangun Alice.

Selama 2 tahun pengembangan asisten, ia diintegrasikan ke dalam banyak layanan dan keterampilan baru ditambahkan. Dia tahu cara memainkan musik, mengenali gambar, mencari informasi di Yandex dan bekerja dengan rumah pintar.
Kenapa begitu populer?
Lebih mudah ketika tangan sibuk . Saya sedang menyiapkan makan malam dan ingin menyalakan musik. Pergi ke keran, cuci tangan, keringkan, buka aplikasi, temukan trek yang diinginkan - untuk waktu yang lama. Lebih cepat dan lebih mudah untuk memberikan perintah suara.
Kemalasan . Saya berbaring di sofa di bawah selimut kotak-kotak dan saya tidak ingin bangun untuk pergi ke suatu tempat untuk menyalakan speaker. Jika Anda malas, maka secara penuh.
Pasar besar adalah aplikasi untuk anak-anak . Anak-anak kecil belum tahu cara membaca, menulis, dan mencetak, tetapi mereka berbicara dan memahami ucapan. Karena itu, anak-anak mengagumi Alice dan suka berkomunikasi dengannya. Orang tua juga puas - tidak perlu mencari apa yang harus dilakukan dengan anak. Yang menarik, Alice memahami anak-anak berkat jaringan saraf yang terlatih dengan baik.
Ketersediaan Orang tunanetra merasa nyaman bekerja dengan asisten suara - saat antarmuka tidak terlihat, Anda dapat mendengarnya dan memberikannya perintah.
Suara lebih cepat . Rata-rata orang, bukan pengembang, mencetak rata-rata 30 kata per menit, dan mengatakan 120. Per menit, 4 kali lebih banyak informasi ditransmisikan dengan suara.
Masa depan Film fantastis dan prediksi futuristik menunjukkan bahwa masa depan adalah dengan antarmuka suara. Penulis naskah berpikir bahwa mungkin kontrol suara akan menjadi cara utama untuk berinteraksi dengan antarmuka di mana gambar tidak begitu penting.
Menurut statistik, 35 juta orang menggunakan Alisa per bulan. Omong-omong, populasi Belarus adalah 9.475.600 orang. Artinya, sekitar 3,5 Belarus menggunakan Alice setiap bulan.
Asisten suara menaklukkan pasar. Menurut perkiraan, pada 2021 akan tumbuh sekitar 2 kali lipat. Popularitas hari ini tidak akan berhenti, tetapi akan terus tumbuh. Semakin banyak pengembang menyadari bahwa mereka perlu berinvestasi di bidang ini.
Keterampilan Pengembang
Sangat bagus ketika perusahaan berinvestasi dalam asisten suara. Mereka memahami bagaimana mereka dapat diintegrasikan dengan layanan mereka. Tetapi pengembang juga ingin berpartisipasi dalam hal ini, dan perusahaan itu sendiri menguntungkan.
Alexa memiliki Keterampilan Alexa. Menurut metode interaksi yang didokumentasikan, dia mengerti apa yang ditulis pengembang untuknya. Google meluncurkan Tindakan - kemampuan untuk mengintegrasikan sesuatu sendiri ke dalam asisten suara.
Alice juga memiliki keterampilan - kemampuan bagi pengembang untuk mengimplementasikan sesuatu pihak ketiga.

Pada saat yang sama, ada katalog alternatif keterampilan, bukan dari Yandex, yang didukung oleh komunitas.

Ada laporan bagus tentang cara membuat aplikasi suara. Misalnya,
Pavel Guy berbicara di AppsConf 2018 dengan tema
"Membuat aplikasi suara menggunakan contoh Bantuan Google" . Penggemar terlibat aktif dalam pengembangan aplikasi suara. Salah satu contohnya adalah permainan visual yang diaktifkan suara yang ditulis oleh Ivan Golubev.
Alice populer, meskipun pada dasarnya semua yang dia lakukan berada di antara suara dan teks.

Alice tahu cara mendengarkan suara dan mengubahnya menjadi teks sesuai dengan algoritmanya, membuat jawaban, dan menyuarakannya. Tampaknya ini tidak cukup, tetapi ini adalah tugas yang sangat sulit. Banyak orang berusaha memastikan bahwa Alice terdengar alami, dengan benar dikenali, memahami aksen, dan ucapan anak-anak. Yandex menyediakan sesuatu seperti proxy yang melewati segalanya dengan sendirinya. Pikiran yang menakjubkan bekerja sehingga Anda dapat menggunakan hasil pekerjaan mereka.
Keahlian Alice - Yandex.Dialogs - memiliki satu keterbatasan. Waktu yang dibutuhkan API untuk merespons tidak boleh melebihi 1,5 detik. Dan ini logis, karena jika jawabannya hang - mengapa menunggu?
Apakah benar-benar penting untuk bertanya apa jika Anda masih belum mendapatkan jawaban?
Ketika kami menerima informasi dengan telinga kami, jeda dirasakan oleh otak lebih lama dari jeda serupa di antarmuka visual. Misalnya, loader, pemintal - segala sesuatu yang ingin kita tambahkan ke antarmuka mengalihkan pengguna dari menunggu. Pertimbangkan semuanya bekerja dengan cepat.
Waktu untuk demo
Semuanya dijelaskan secara rinci dalam
dokumentasi Yandex.Dialog dan selalu terbaru. Saya tidak akan mengulangi lagi. Saya akan memberi tahu Anda apa yang menarik bagi saya dan menunjukkan cara cepat membuat demo, yang saya habiskan hanya satu malam.
Mari kita mulai dengan ide. Ada banyak keterampilan, ada katalog, tetapi saya tidak menemukan apa yang penting bagi saya - ini adalah kalender acara di front-end. Bayangkan bangun di pagi hari: “Saya akan pergi ke pertemuan hari ini. Alice! Adakah sesuatu yang menarik di sana? ”, Dan Alice menjawab Anda, terlebih lagi, dengan benar dan mempertimbangkan lokasi Anda.
Jika Anda terlibat dalam menyelenggarakan konferensi,
bergabunglah di GitHub . Anda dapat membawa acara dan rapat di sana, belajar tentang banyak acara di front-end di dunia dari satu kalender.
Saya mengambil teknologi terkenal yang ada di tangan: Node.js dan Express. Masih Heroku, karena gratis. Aplikasi itu sendiri sederhana: ini adalah server di Node.js, aplikasi Express. Angkat saja server pada beberapa port dan dengarkan permintaan.
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}'); });
Saya mengambil keuntungan dari kenyataan bahwa semuanya sudah dikonfigurasi dalam kalender standar Web, dan dari sejumlah besar file kecil ada satu file ICS yang dapat diunduh. Mengapa saya harus mengambil sendiri?
Pastikan semuanya bekerja dengan cepat.
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); });
Gunakan metode GET untuk tes. Keterampilan bekerja dengan metode POST, sehingga metode GET dapat dilakukan secara eksklusif untuk debugging. Saya telah menerapkan metode seperti itu. Semua yang dia lakukan adalah mengunduh ICS yang sama, mengurai dan mengeluarkannya dalam bentuk JSON.
Saya membuat demo dengan cepat, jadi saya mengambil perpustakaan node-ical siap pakai:
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); }); }); }
Dia tahu cara mem-parsing format ICS. Pada output itu menghasilkan lembaran seperti:
{ "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" } }
Untuk memilah dan memberikan informasi yang diperlukan kepada pengguna keterampilan, cukup mengetahui waktu awal dan akhir acara, nama, tautan, dan, yang penting, kota. Saya ingin keterampilan untuk mencari acara di kota.
Format input
Bagaimana Yandex.Dialog mengembalikan informasi? Kolom atau asisten suara yang dibangun di dalam aplikasi seluler mendengarkan Anda, dan server Yandex memproses apa yang mereka dengar dan mengirim objek sebagai respons:
{ "meta": { … }, "request”: { … }, "session": { … }, "version": "1.0" }
Objek berisi meta-informasi, informasi tentang permintaan, sesi saat ini dan versi API jika tiba-tiba diperbarui - keterampilan tidak boleh rusak.
Ada banyak
informasi berguna dalam
informasi meta .
{ "meta": { "locale": "ru-RU", "timezone": "Europe/Moscow", "client_id": "ru.yandex.searchplugin/5.80…”, "interfaces": { "screen": {} } } }
"
Lokal " - digunakan untuk memahami wilayah pengguna.
"
Zona Waktu " dapat digunakan untuk bekerja secara kompeten dengan waktu dan lebih akurat menentukan lokasi pengguna.
"
Antarmuka " - informasi tentang ketersediaan layar. Jika tidak ada layar, Anda harus memikirkan bagaimana pengguna akan melihat gambar jika Anda memberikannya dalam jawaban. Jika ada layar, kami mengambil informasi tentang itu.
Format permintaan
sederhana :
{ "request": { "command": " 16", "original_utterance": " , 16", "type": "SimpleUtterance", "nlu": { "tokens": [ "", "", "", "", "", "16"], "entities": [...] } } }
Ini memberikan apa yang dikatakan pengguna, tipe permintaan dan
NLU - Unit berbahasa alami . Inilah keajaiban yang dilakukan platform Yandex.Dialog. Dia memecah seluruh kalimat yang dia kenali menjadi token - kata. Ada juga entitas di sana yang akan kita bicarakan nanti. Menggunakan token sudah cukup untuk memulai.
Kami mendapat kata-kata ini, dan apa yang harus dilakukan dengan mereka? Pengguna telah mengatakan sesuatu, tetapi ia dapat mengucapkan kata-kata dalam urutan yang berbeda, menggunakan partikel "tidak", yang mengubah segalanya secara dramatis, atau bahkan mengatakan "pagi" daripada "pagi". Jika pengguna juga berbicara bahasa Belarusia, maka akan ada "tas", bukan pagi. Sebuah proyek besar akan membutuhkan bantuan ahli bahasa untuk mengembangkan keterampilan yang memahami segalanya. Tetapi saya melakukan tugas sederhana, jadi saya melakukannya tanpa bantuan pihak luar.
Bisakah komputer berbicara seperti orang?
Ini adalah pertanyaan filosofis yang coba dijawab oleh tes Turing. Tes memungkinkan dengan probabilitas tertentu untuk menentukan bahwa kecerdasan buatan dapat menyamar sebagai seseorang. Ada
Hadiah Loebner untuk menerima program mana yang bersaing dalam melewati tes Turing. Keputusan itu dibuat oleh majelis hakim. Untuk mendapatkan hadiah, Anda perlu menipu 33% dari juri atau lebih. Hanya pada tahun 2014, bot
Zhenya Gustman dari St. Petersburg akhirnya menipu komisi.
[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.
Pada tahun 2019, tidak ada yang benar-benar berubah - masih sulit untuk menipu seseorang. Tapi kami secara bertahap bergerak menuju ini.
Script bekerja
Keahlian yang baik membutuhkan kasus penggunaan yang menarik. Saya menyarankan satu buku yang layak dibaca - "Merancang Antarmuka Pengguna Suara: Prinsip-Prinsip Pengalaman Percakapan". Mengagumkan tentang penulisan skrip untuk antarmuka suara dan menjaga perhatian pengguna sangat mengagumkan. Saya tidak melihat buku itu dalam bahasa Inggris, tetapi buku itu dibaca dengan mudah.

Hal pertama untuk mulai mengembangkan keterampilan adalah salam.
“Selagi kamu memikirkan apa yang harus dikatakan, lakukan curtsy! Ini menghemat waktu. "
Saat skill menyala, Anda perlu menahan pengguna dari detik pertama, dan untuk ini Anda perlu menjelaskan cara menggunakan skill. Bayangkan bahwa pengguna meluncurkan skill dan ada keheningan. Bagaimana Anda tahu jika suatu keterampilan bekerja sama sekali? Berikan instruksi kepada pengguna, seperti tombol di layar.
Dialog yang mudah
Tanda-tanda dialog mudah. Daftar ini diciptakan oleh Ivan Golubev, dan saya sangat suka kata-katanya.
- L pribadi.
- Alami.
- Fleksibel
- Ontext.
- Dan bernasib baik.
- Singkat J.
Pribadi berarti bot harus memiliki karakter. Jika Anda berbicara dengan Alice, Anda akan mengerti bahwa dia memiliki karakter - para pengembang mengurus ini. Karena itu, bot Anda untuk organikitas harus memiliki "kepribadian". Berikan frasa dengan setidaknya satu suara, gunakan konstruksi verbal yang sama. Ini membantu mempertahankan pengguna.
Alami . Jika permintaan pengguna sederhana, maka jawabannya harus sama. Selama komunikasi dengan bot, pengguna harus memahami apa yang harus dilakukan selanjutnya.
Fleksibel Bersiaplah untuk apa pun. Ada banyak sinonim dalam bahasa Rusia. Pengguna dapat mengalihkan perhatian dari kolom dan mentransfer percakapan ke lawan bicara, dan kemudian kembali ke kolom. Semua ini sulit ditangani. Tetapi jika Anda ingin membuat bot dengan baik, maka Anda harus melakukannya. Perlu diingat bahwa beberapa persen dari non-pengakuan masih akan terjadi. Bersiaplah untuk ini - sarankan opsi.
Kontekstual - bot, idealnya, harus mengingat apa yang terjadi sebelumnya. Maka pembicaraan akan menjadi hidup.
- Alice, seperti apa cuaca hari ini?- Hari ini di Distrik dari +11 hingga +20, berawan, dengan cerah.- Dan besok?- Besok di Distrik dari +14 hingga +27, berawan, dengan cerah.Bayangkan bot Anda tidak tahu cara menyimpan konteks. Apa artinya baginya permintaan "dan besok?" Jika Anda tahu bagaimana menjaga konteks seperti Alice, maka Anda dapat menggunakan hasil sebelumnya untuk meningkatkan jawaban dalam keterampilan.
Proaktif . Jika pengguna tumpul, bot akan menanyakannya: "Klik tombol ini!", "Lihat, saya punya gambar untuk Anda!", "Ikuti tautannya." Bot harus memberi tahu Anda cara bekerja dengannya.
Bot harus
pendek . Ketika seseorang berbicara untuk waktu yang lama, sulit baginya untuk menjaga perhatian audiens. Ini bahkan lebih rumit dengan bot - tidak sayang untuk itu, itu tidak hidup. Untuk menarik perhatian, Anda perlu membangun percakapan dengan menarik atau singkat dan singkat. Ini akan membantu “Menulis. Potong itu. " Saat Anda mulai mengembangkan bot, baca buku ini.
Basis data
Saat mengembangkan bot yang kompleks, Anda tidak dapat melakukannya tanpa basis data. Demo saya tidak menggunakan database, itu sederhana. Tetapi jika Anda mengacaukan beberapa basis data, Anda dapat menggunakan informasi tentang sesi pengguna, setidaknya untuk menyimpan konteksnya.
Ada nuansa: Yandex.Dialogs tidak memberikan informasi pribadi pengguna, misalnya, nama, lokasi. Tetapi informasi ini dapat ditanyakan dari pengguna, disimpan dan ditautkan ke ID sesi tertentu, yang Yandex.Dialogs kirimkan dalam permintaan.
Mesin negara
Menyebutkan skenario yang kompleks, orang tidak bisa tidak mengingat mesin negara. Mekanisme ini telah lama dan sangat baik digunakan untuk pemrograman mikrokontroler, dan kadang-kadang ujung depan. Mesin keadaan sesuai untuk skenario: ada keadaan dari mana kita beralih ke keadaan lain untuk frasa tertentu.

Jangan berlebihan. Anda bisa terbawa suasana dan membuat mesin negara yang besar, yang akan sulit dipecahkan - mempertahankan kode seperti itu sulit. Lebih mudah untuk menulis satu skrip yang terdiri dari sub-skrip kecil.
Tidak jelas Tentukan
Jangan pernah berkata, "Ulangi, tolong." Apa yang dilakukan seseorang ketika diminta mengulangi? Dia berbicara lebih keras. Jika pengguna meneriaki keahlian Anda, pengakuan tidak akan meningkat. Ajukan pertanyaan klarifikasi. Jika salah satu bagian dari dialog pengguna dikenali dan ada sesuatu yang hilang, periksa blok yang hilang.
Pengenalan teks adalah tugas yang paling sulit dalam mengembangkan bot, jadi terkadang klarifikasi tidak membantu. Dalam situasi yang tidak dapat dipahami, solusi terbaik adalah mengumpulkan segala sesuatu di satu tempat, mencatat, dan kemudian menganalisis dan menggunakannya di masa depan. Misalnya, jika pengguna mengatakan hal-hal yang aneh dan tidak dapat dipahami.
“Itu mendidih. Creamy Shore
Mengejek nav.
Dan dengusan mendengus.
Seperti mumi dalam gerakan. ”Pengguna secara tak terduga dapat menggunakan beberapa neologisme, yang artinya sesuatu, dan itu perlu diproses entah bagaimana. Akibatnya, persentase pengakuan turun. Jangan khawatir - masuk, pelajari dan tingkatkan bot Anda.
Hentikan kata
Pasti ada sesuatu untuk menghentikan keterampilan ketika Anda ingin keluar dari itu. Alice tahu bagaimana berhenti setelah frasa: "Alice, itu sudah cukup!" atau "Alice, berhenti!" Tetapi pengguna biasanya tidak membaca instruksi. Karena itu, setidaknya tanggapi kata "Stop" dan kembalikan kontrol ke Alice.
Sekarang mari kita lihat kodenya.
Waktu untuk demo
Saya ingin menerapkan frasa berikut.
- Acara mendatang di kota.
- Nama kota: "peristiwa di Moskow", "acara di Minsk", "St. Petersburg" untuk menunjukkan peristiwa yang ditemukan di sana.
- Stop words: "Stop," "Cukup." "Terima kasih" jika pengguna mengakhiri percakapan dengan kata ini. Tapi idealnya, ahli bahasa diperlukan di sini.
Untuk "acara mendatang" frasa apa pun cocok. Saya membuat bot malas, dan ketika dia tidak mengerti apa yang mereka katakan, dia memberikan informasi tentang tiga peristiwa berikutnya.
{ "request": { "nlu": { "entities": [ { "tokens": { "start": 2, "end": 6 }, "type": "YANDEX.GEO", "value": { "house_number": "16", "street": " ", "city": "" } } ] } } }
Yandex secara bertahap meningkatkan platform Yandex.Dialogs dan mengeluarkan entitas yang telah dapat dikenali. Misalnya, dia tahu cara mendapatkan alamat dari sebuah teks, mengurutkannya di beberapa bagian: kota, negara, jalan, rumah. Dia juga tahu bagaimana mengenali angka dan tanggal, baik mutlak maupun relatif. Dia akan mengerti bahwa kata "Besok" adalah tanggal hari ini, yang ditambahkan.
Balas ke pengguna
Anda harus entah bagaimana menanggapi pengguna Anda. Seluruh skill adalah
209 baris dengan baris kosong terakhir. Tidak ada yang rumit - bekerja untuk malam hari.
Yang Anda lakukan hanyalah memproses permintaan POST dan mendapatkan "permintaan".
router.post('/', (req/ res, next) ⇒ { const request = req.body;
Selanjutnya, saya tidak terlalu menyulitkan mesin negara, tetapi berjalan sesuai prioritas. Jika pengguna ingin mempelajari cara menggunakan bot, maka ini adalah peluncuran pertama atau permintaan bantuan. Karena itu, siapkan dia "EmptyResponse" - inilah yang saya sebut.
if (needHelp(request.request)) { res.json(prepareEmptyResponse(request)); return; }
Fungsi needHelp sederhana.
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; }
Ketika kami memiliki nol token, maka kami berada di awal permintaan. Pengguna baru saja memulai keterampilan atau tidak meminta apa pun. Anda perlu memeriksa bahwa tokennya nol dan ini bukan tombol - ketika Anda mengklik tombolnya, pengguna juga tidak mengatakan apa-apa. Saat pengguna meminta bantuan, kami membaca token dan mencari kata "Bantuan". Logikanya sederhana.
Jika pengguna ingin berhenti.
if (needToStop(request.request)) { res.json(prepareStopResponse(request)); return; }
Jadi kami mencari semacam stop word di dalam.
function needStop(req) { const stopWords = ['', '', '' ]; return req.nlu.token.length ≤ 2 && stopWords.some(w ⇒ return req.nlu.token.includes(w)); }
Dalam semua jawaban, Anda harus mengembalikan informasi yang Yandex.Dialog kirimkan tentang sesi tersebut. Dia harus entah bagaimana mencocokkan jawaban Anda dan permintaan pengguna.
function prepare StopResponse(req) { const { session, version } = req; return { response: { text: ' . !', end_session: true, }, session, version, }; }
Oleh karena itu, apa yang Anda dapatkan dalam variabel "sesi" dan "versi", kembali, dan semuanya akan baik-baik saja. Sudah dalam jawaban Anda dapat memberikan beberapa teks untuk Alice untuk mengucapkannya, dan lulus "akhir sesi: benar". Ini artinya kita mengakhiri sesi skill dan mentransfer kontrol ke Alice.
Saat kamu memanggil skill, Alice mati. Semua yang dia dengarkan adalah kata-kata penghenti, dan Anda sepenuhnya mengendalikan proses bekerja dengan keterampilan. Karena itu, Anda perlu mengembalikan kontrol.
Dengan permintaan kosong lebih menarik.
return { "response": { "text": '! - .', "tts": '! - .', buttons: [ { title: ' ', payload: {} hide: false, }, { title: ' ', payload: { city: '', } hide: false, }, ], end_session: false, }, session, version, };
Ada bidang
TTS (
Teks Ke Pidato ) -
kontrol suara . Ini adalah format sederhana yang memungkinkan Anda membaca teks dengan berbagai cara. Misalnya, kata "multidisiplin" memiliki dua tekanan dalam bahasa Rusia - satu primer, sekunder kedua. Tugasnya adalah Alice dapat mengucapkan kata ini dengan benar. Anda dapat mematahkannya dengan spasi:
+ +
Dia akan mengerti dia sebagai dua. Aksen plus disorot.
Ada jeda dalam pidato - Anda memberi tanda baca, yang dipisahkan oleh spasi. Jadi, Anda dapat membuat jeda dramatis:
— - - - - - - - - +
Saya sudah bicara tentang
tombol . Mereka penting jika Anda tidak berkomunikasi dengan kolom, tetapi dengan aplikasi seluler Yandex, misalnya.
{ "response": { "buttons": [ { "title": "Frontend Conf", "payload": {}, "url": "https://frontendconf.ru/moscow-rit/2019" , "hide": false } ] } }
Tombol juga merupakan petunjuk untuk frasa yang Anda rasakan dalam keterampilan Anda. Keahlian bekerja di aplikasi Yandex - Anda berkomunikasi dengan antarmuka. Jika Anda ingin memberikan beberapa informasi - berikan tautan, pengguna mengkliknya. Anda juga dapat menambahkan tombol untuk ini.
Ada bidang “muatan” di mana Anda dapat menambahkan data. Mereka kemudian akan kembali dengan "permintaan" - Anda akan tahu, misalnya, bagaimana menandai tombol ini.
Anda dapat memilih
suara yang akan dibicarakan oleh keahlian Anda.
- Alice adalah suara standar Alice . Dioptimalkan untuk interaksi singkat.
- Oksana - suara Yandex.Navigator.
- Jane
- Zahar.
- Ermil.
- Erkan Yavas - untuk teks panjang. Awalnya dibuat untuk membaca berita.
Untuk
menyelesaikan keterampilan , cukup kembalikan "end_session: true".
{ "response": { "end_session": true } }
Apa yang terjadi dengan demo
Pertama, saya filter berdasarkan tanggal.
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); }); }
Logikanya sederhana: dalam semua peristiwa yang saya parsing dari kalender, saya mengambil yang akan terjadi di masa depan, atau mereka pergi sekarang. Mungkin aneh untuk bertanya tentang peristiwa masa lalu - keterampilannya bukan tentang itu.
Selanjutnya, pemfilteran di tempatnya adalah tentang semua itu.
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); } });
Di "entitas" Anda dapat menemukan entitas YANDEX.GEO, yang menyaring lokasi. Jika entitas memiliki kota, tambahkan ke set kami. Selanjutnya, logikanya juga sederhana. Kami mencari kota ini di token, dan jika ada, kami mencari apa yang diinginkan pengguna. Jika tidak, kami mencari di semua "lokasi" dan "acara" yang kami miliki.
Misalkan Yandex tidak mengenali bahwa itu adalah YANDEX.GEO, tetapi pengguna tersebut menamai kota tersebut - ia yakin ada sesuatu yang terjadi di sana. Kami menelusuri semua kota di "acara" dan mencari yang sama di token. Ternyata perbandingan lintas array. Bukan cara yang paling produktif, tentu saja, tetapi apa itu. Itu seluruh keterampilan!
Tolong jangan dimarahi saya untuk kode - saya menulis dengan cepat. Semuanya primitif di sana, tetapi cobalah untuk menggunakannya atau hanya bermain-main.
Terbitkan Keterampilan
Buka halaman Yandex.Dialogs.

Pilih keahlian dalam Alice. Tekan tombol "Buat dialog" dan Anda akan masuk ke formulir yang harus Anda isi dengan data Anda.
- Nama itulah yang akan ada dalam dialog.
- Nama aktivasi . Jika Anda memilih nama aktivasi "Kalender Standar Web" melalui tanda hubung, maka Alice tidak mengenalinya - dia tidak mendengar tanda hubung. Kami mengucapkan kata-kata tanpa tanda hubung, dan aktivasi tidak akan berfungsi. Untuk mendapatkan uang, atur nama menjadi "Kalender Standar Web".
- Frasa aktivasi untuk meluncurkan skill. Jika ini adalah permainan, maka "Ayo mainkan sesuatu," "Tanya seseorang." Set ini terbatas, tetapi ini karena frasa seperti itu adalah aktivasi untuk Alice. Dia harus mengerti bahwa inilah saatnya untuk mempelajari keterampilan.
- URL Webhook - alamat yang sama tempat Alice akan mengirim permintaan POST.
- Suara itu . Standarnya adalah Oksana. Karena itu, banyak di katalog suaranya, bukan Alice.
- Apakah perangkat dengan layar diperlukan? Jika ada gambar, Anda akan dibatasi untuk menggunakan keterampilan - pada kolom pengguna tidak akan dapat meluncurkannya.
- Keterampilan pribadi adalah bidang penting bagi pengembang. Jika Anda tidak siap memposting keterampilan di depan umum, jika hanya karena itu mentah, maka kami tidak menunjukkannya di katalog, membatasi privasi. Keterampilan pribadi dimoderasi dengan cepat - dalam beberapa jam. Keterampilan seperti itu tidak perlu diuji secara menyeluruh - cukup untuk mencocokkan nama aktivasi. Karena pengguna tidak akan menemukan mereka di katalog, mereka lebih loyal kepada mereka.
- Catatan untuk moderator . Saya meminta moderator untuk membantu: "Saya benar-benar membutuhkan keterampilan untuk demo di konferensi!" - dan saya berhasil melewati moderasi dengan cepat.
- Hak cipta . Jika Anda, tidak bekerja di bank bersyarat, memutuskan untuk membuat keterampilan untuk itu, Anda perlu membuktikan bahwa Anda memiliki hak untuk melakukannya. Tiba-tiba mereka akan mendatangimu? Dan mereka pasti akan datang, dan melalui distributor, yaitu Yandex, yang tidak memerlukan masalah tambahan.
Selesai - kirim keterampilan untuk moderasi, dan Anda dapat menguji.
Pengujian
Saya menulis server Express dangkal. API, . , , «alice-tester» — , .
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 . , , , , .
. , , .