Entitas untuk platform Yandex.Dialogues

Hackathon online untuk mengembangkan keterampilan Alice berlangsung Sabtu lalu. Sangat disayangkan bahwa tidak ada yang menulis tentang hasil di sini, sangat penasaran untuk membaca kisah para pemenang. Tetapi karena tidak ada sukarelawan, saya akan membagikan kisah saya.



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 figiyang 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 entitiesdan 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.



All Articles