RocketBot adalah bot obrolan yang dapat diprogram yang terintegrasi dengan VK, Telegram dan Bitrix24. Hari ini kita akan berbicara tentang infrastruktur dan teknologi lain di mana ia dibangun.
/ foto Darryl Braaten CC BY-SAToolkit
Saat mengembangkan RocketBot, kami fokus pada kecepatan pengembangan dan pembuatan prototipe. Untuk alasan ini, sistem ditulis dalam Python, dan MySQL dipilih sebagai basis data.
Sampai saat ini, Python
menempati peringkat ketiga dalam peringkat TIOBE dalam popularitas. Ini berarti bahwa bahasa tersebut memiliki komunitas besar dan sejumlah besar literatur referensi: buku, situs, kursus, dan kode sumber. Misalnya, di GitHub Anda dapat menemukan
koleksi praktik terbaik untuk dikembangkan dengan Python , dan di StackOverflow
sejumlah besar utas terbuka . Rumah penerbitan O'Reilly telah mencurahkan banyak buku untuk bahasa ini. Orang dapat membedakannya dengan "
Hitchhiking in Python " dan "
Machine Learning with Python ".
Selain sejumlah besar sumber, salah satu keunggulan utama Python adalah berbagai pustaka dan kerangka kerja fungsional ML. Contohnya adalah
PyTorch dan
SciKit-learn - ini adalah alat yang ampuh yang menyederhanakan pemrosesan ucapan alami, dialog, dan skrip.
Secara khusus, untuk pengembangan model pelatihan, kami menggunakan PyTorch, karena memiliki kemampuan luas untuk pembuatan prototipe. Selain itu, kami mengimplementasikan scikit-learning, yang melakukan preprocessing data, serta pymorth2 dan gensim (masing-masing untuk bekerja dengan morfologi dan vektorisasi teks). Kami juga mengalami DeepPavlov - kami mengevaluasi kemampuannya.
Adapun database, kami memilihnya untuk alasan tidak menyulitkannya. MySQL juga tetap yang paling populer dari database server yang kuat. Untuk alasan ini, Anda dapat menemukan banyak informasi tentang hal itu di Internet (misalnya, ada
manual terperinci
dari pengembang ), dan komunitas luas akan selalu memberi tahu Anda solusi untuk masalah tersebut, jika ada. Plus, MySQL menawarkan fungsionalitas yang luas, meskipun tidak mengikuti semua standar SQL.
Apa yang bisa dilakukan bot obrolan kami
Chatbot kami memungkinkan Anda mengonfigurasi jawaban otomatis untuk pertanyaan pengguna (misalnya, untuk menerapkan FAQ), serta mengotomatiskan operasi rutin (misalnya, jajak pendapat) menggunakan skrip.
Sistem ini dapat bekerja dengan dua jenis pertanyaan: kebiasaan dan standar. Dalam kasus pertama, administrator secara independen menentukan esensi masalah dan kata kunci yang akan ditanggapi oleh bot. Daftar semua kata kunci adalah opsional. Algoritme RocketBot akan mengevaluasi makna frasa dan menemukan jawabannya berdasarkan kedekatan semantik.
Untuk mengevaluasi kedekatan semantik, representasi vektor dari query digunakan. Ini mengidentifikasi komponen utama (
PCA ) dan mencari opsi jarak terdekat dalam database. Dalam kasus kami, metrik cosine_similarity (sciki-learn) berkinerja terbaik.
Dalam kasus kedua, pemilik bot tidak perlu mengkonfigurasi apa pun. Dia hanya memilih pertanyaan standar dari daftar - kemudian bot itu sendiri mengerti apa yang akan ditanyakan kepadanya. Sekarang kami menggunakan layanan Dialogflow untuk menyoroti tema standar, tetapi kami akan mengubahnya ke implementasi kami sendiri. Kami tidak senang dengan ketergantungan pada layanan Google, yang menyebabkan keterlambatan sinkronisasi data. Perhatikan bahwa pengguna dapat mengubah templat standar kapan saja dengan membuat versinya sendiri dan menetapkan tindakan yang sesuai.
Dalam kedua kasus, chatbot dapat merespons dengan pesan teks atau dengan skrip. Pesan teks hanyalah respons standar terhadap suatu situasi. Adapun naskah, itu menyiratkan struktur pohon dialog. Sebenarnya, ini adalah skenario komunikasi lengkap di mana chatbot melakukan tindakan terprogram tergantung pada respons pengguna. Misalnya, fitur ini dapat digunakan untuk melakukan survei atau mengumpulkan umpan balik.
Untuk mengkompilasi skrip, tiga jenis blok digunakan:
- Blok pertanyaan - mengajukan pertanyaan kepada pengguna dan menulis jawaban untuknya dalam variabel.
- Block of conditions - mengimplementasikan percabangan naskah.
- Blok centang variabel - mengontrol rute pengguna sesuai dengan skrip.
Pemilik bot mengisi semua blok secara independen di editor skrip. Sejauh ini, editor tidak memiliki alat visualisasi (tetapi mereka akan muncul dalam waktu dekat). Dalam pengalaman kami, kehadiran perancang visual dalam aplikasi bot obrolan tidak membantu dalam membuat skema untuk pekerjaannya. Sebagian besar pengguna tidak memikirkan algoritma terlebih dahulu, jadi tidak ada yang perlu ditransfer ke editor.
Contoh pengaturan dengan keluar skrip dengan jawaban "Tidak" untuk pertanyaan "Apakah Anda berusia 18 tahun?"Tetapi dengan semua ini, kami dapat membantu klien menyesuaikan skripnya sesuai dengan diagram alur, yang akan ia gambar di editor grafis seperti xmind atau draw.io. Kami akan secara independen memverifikasi algoritme dan melakukan pengaturan awal - biasanya membutuhkan beberapa jam.
Selain menjawab pertanyaan dan mengimplementasikan skrip, bot dapat bekerja dengan sistem pemrosesan bahasa alami. Namun, sementara mereka melakukan berbagai tugas yang sangat sempit: mereka mencari jawaban untuk pertanyaan di basis pengetahuan dan menentukan niat pengguna (Dialogflow yang sama digunakan untuk ini).
Kami telah membatasi berbagai tugas untuk solusi cerdas karena potensi kesulitan dengan perilaku yang tidak terduga. Sistem AI modern masih rentan kesalahan, dan saat membuat layanan bisnis, bot tidak mungkin menjawab 80% pertanyaan dengan satu cara, dan 20% lainnya dengan cara lain.
Untuk menerapkan sistem pemrosesan ucapan alami, algoritma pencarian yang sangat sederhana digunakan sejauh ini. Seiring waktu, kami ingin mengimplementasikan versi baru berdasarkan jaringan LSTM yang menggunakan pembelajaran penguatan. Kemungkinan besar, implementasi baru akan didasarkan pada kerangka DeepPavlov yang telah disebutkan.
Fitur lain dari bot kami adalah integrasi dengan sistem CRM. RocketBot dapat secara otomatis membuat arahan dan tugas dalam CRM (Bitrix24) setelah menjalankan skrip. Bot meneruskan semua yang ditulis pengguna, ditambah informasi tentangnya dari messenger atau jejaring sosial. Semuanya berfungsi sesuai dengan protokol standar dan melalui API utama CRM-sistem dalam bentuk permintaan HTTP dan data di JSON.
Dalam rilis mendatang, kami berencana untuk menambah bot kemampuan untuk membuat corong otomatis. Ini akan memungkinkan bisnis untuk membiasakan pelanggan potensial dengan barang-barang dan menutup transaksi langsung dalam obrolan. Sistem akan secara mandiri menambahkan entitas yang diperlukan ke CRM - prospek, transaksi, tugas - berdasarkan jawaban dan pertanyaan yang dimasukkan.
/ foto spencer cooper CC BY-NDInfrastruktur tempat chatbot dibangun
Semua layanan kami beroperasi
di cloud IT-GRAD - server frontend, database, dan server aplikasi di-host di sana. Secara umum, infrastruktur cloud membantu kami dengan cepat meningkatkan layanan kami, untuk mengatasi meningkatnya beban dan lonjakan lalu lintas yang tiba-tiba. Untuk alasan ini, di masa depan kami berencana hanya untuk memperluas kehadiran kami di cloud.
Bot itu sendiri adalah seperangkat lima layanan mikro yang berinteraksi satu sama lain melalui HTTP - JSON (semua komunikasi internal antar layanan dilakukan dalam segmen aman). Meskipun ini menyebabkan keterlambatan dalam menjawab pertanyaan dalam satu hingga dua detik, arsitektur ini memiliki potensi besar untuk penskalaan dan memungkinkan kami untuk memodifikasi blok individual tanpa mempengaruhi yang lain. Misalnya, memperbarui microservice pencarian di FAQ tidak akan mempengaruhi integrasi microservice dengan CRM.
Untuk menguji dan membuat model pembelajaran mesin dan jaringan saraf, kami menggunakan Nvidia Tesla M40 16GB. Tetapi meskipun demikian, pelatihan tidak terlalu cepat. Set data yang kami gunakan untuk tugas pemrosesan bahasa alami adalah puluhan gigabyte. Untuk alasan ini, dalam beberapa kasus (misalnya, untuk dataset vektorisasi) kami menggunakan mesin virtual dengan 64 CPU.
Bacaan tambahan - tulisan dari Blog IaaS Perusahaan Pertama:
Dari saluran Telegram kami: