Saya membuat antarmuka suara untuk mengelola akun broker, saya sudah menulis tentang itu di Habré - Alice, beli Yandex . Pada titik tertentu, saya perlu mengekstraksi harga dalam mata uang yang berbeda dari permintaan. Saya yakin saya bukan orang pertama yang menghadapi tugas seperti itu, jadi saya mencoba mencari maksud yang sudah jadi atau entitas bernama di GitHub, tetapi saya tidak dapat menemukan apa pun. Ada hackathon di hidung, banyak pengembang di satu tempat, saya pikir, jika semua orang berbagi praktik terbaik mereka, maka akan ada seluruh perpustakaan entitas. Ini adalah bagaimana ide untuk repositori perpustakaan entitas lahir.
Entitas khusus dalam Dialog
Ketika saya mengatakan pada kolom pintar “beli satu saham Yandex”, pidatonya melewati keajaiban batin platform Yandex.Dialogi, lalu pergi ke web hook, yang saya tentukan sebagai penangan keterampilan. Inilah yang datang ke pawang:
"request": {
"command": " ",
"original_utterance": " ",
"nlu": {
"tokens": [
"",
"1",
"",
""
],
...
"intents": {
"market.order": {
"slots": {
"amount": {
"type": "YANDEX.NUMBER",
"tokens": {
"start": 1,
"end": 2
},
"value": 1
},
"unit": {
"type": "OperationUnit",
"tokens": {
"start": 2,
"end": 3
},
"value": "share"
},
"figi": {
"type": "EFigi",
"tokens": {
"start": 3,
"end": 4
},
"value": "BBG006L8G4H1"
},
"operation": {
"type": "OperationType",
"tokens": {
"start": 0,
"end": 1
},
"value": "buy"
}
}
}
}
},
...
},
Perhatikan slot
figi
yang berisi pengidentifikasi saham Yandex, yang disebut FIGI (Financial Instrument Global Identifier), yang diperlukan untuk berinteraksi dengan API platform perdagangan Tinkoff Investments. Tipe data EFigi adalah entitas khusus yang saya jelaskan di bagian Entitas saat membuat keterampilan di platform Yandex.Dialogi. Berikut cuplikan uraian:
entity EFigi:
values:
BBG005DXJS36:
%exact
TCS
%lemma
()?
()?
()?
()?
BBG006L8G4H1:
%exact
YNDX
%lemma
BBG004730JJ5:
%exact
MOEX
%lemma
BBG002B2J5X0:
%exact
KRKNP
%lemma
[ ]
[ ]
...
Berkat mekanisme entitas, dalam kode handler, saya tidak perlu melakukan manipulasi tambahan pada data input untuk mendapatkan FIGI. Platform Dialog mengubah nama keamanan menjadi FIGI untuk saya.
Saya menggunakan EFigi sebagai tata bahasa nonterminal dan tipe slot dalam maksud. Maksud adalah ungkapan reguler tentang steroid dalam Dialog. Niat membantu Dialog memahami data apa yang perlu diambil dari permintaan pengguna dan diteruskan ke pawang. Berikut adalah contoh niat untuk perintah untuk membeli / menjual sekuritas di bursa dengan harga pasar:
slots:
operation:
source: $Operation
type: OperationType
figi:
source: $Stock
type: Efigi
amount:
source: $Amount
type: YANDEX.NUMBER
unit:
source: $Unit
type: OperationUnit
root:
$Operation [$Amount $Unit $Stock]
$Operation:
$OperationType
$Amount:
$YANDEX.NUMBER
$Unit:
$OperationUnit
$Stock:
$EFigi
Ini mirip dengan ekspresi reguler.
Perpustakaan Entity untuk Dialog
Selama hackathon untuk mengembangkan keterampilan untuk Alice, saya membuat repositori alice-entitas-perpustakaan , mendorong entitas EFigi di sana dan pergi ke GitHub untuk mencari repositori yang memiliki deskripsi entitas kustom. Saya berharap menemukan ratusan repositori, menghubungi pengembang dan menawarkan untuk mengirim permintaan tarik ke perpustakaan entitas.
Saya mencari repositori dengan tag: yandex-dialog, alice-skills, yandex-alice dan alice-sdk. Ternyata sangat sedikit orang yang menggunakan tag pada GitHub, saya hanya dapat menemukan satu repositori yang berisi file yang menggambarkan entitas ELang. Secara kebetulan, penulis repositori ternyata adalah David, salah satu penyelenggara hackathon. Saya menyarankan kepada David untuk menambahkan entitas ELang ke perpustakaan dan menerima permintaan tarik darinya beberapa menit kemudian.
Anggota hackathon online lainnya mengabaikan pesan obrolan saya dengan proposal untuk mengisi kembali perpustakaan entitas. Mungkin, di tengah perjuangan, tidak ada waktu untuk ini. Sejujurnya, saya sedikit frustrasi, tetapi pada akhirnya saya menambahkan tautan ke repositori di sameoldmadness / awesome-alice .
Alih-alih sebuah kesimpulan
Pengembang Alice Skill yang terhormat, harap unggah kode sumber ke GitHub jika memungkinkan agar orang lain dapat belajar.
Silakan tambahkan yandex-dialog, skill alice dan tag yandex-alice ke repo sehingga orang lain dapat menemukan skill Anda di GitHub.
Buat direktori di repositori Anda
entities
dan letakkan file deskripsi entitas yang Anda tulis untuk keterampilan di sana sehingga orang lain dapat menggunakan kembali pekerjaan Anda.
Sebelum menjelaskan entitas baru, lihatlah perpustakaan entitas , ia mungkin sudah memiliki apa yang Anda butuhkan di sana. Dan jika tidak, silakan tambahkan entitas Anda ke perpustakaan.