Hubot adalah salah satu kerangka pembuatan bot paling terkenal di web, itu karena github memudahkan pembuatannya. Jika Anda dapat menentukan perintah Anda dalam parameter RegExp, pada dasarnya Anda dapat melakukan apa pun dengan Hubot. Ini merupakan kontribusi besar bagi budaya ChatOps.
Terinspirasi oleh hal tersebut, kami ingin memberikan kemudahan yang sama kepada komunitas kami untuk mengembangkan chatbot yang benar-benar dapat memproses bahasa alami dan menjalankan tugas, semudah membuat bot berorientasi RegExp.
Jadi, kami telah menemukan proyek yang sangat menarik untuk dimulai, Heartbot Samudera Digital , sebuah suntikan cinta untuk klien obrolan favorit Anda =)
Berdasarkan Heartbot, kami memperkenalkan beberapa kekuatan NLP dari tim NaturalNode, sebuah koleksi lib Pemrosesan Bahasa Alami yang mengesankan yang dibuat untuk digunakan di NodeJS.
Jadi, keajaiban terjadi...
Selamat datang di HubotNatural , kerangka kerja chatbot baru yang menarik yang berbasis di lib Hubot dan NaturalNode, dengan arsitektur sederhana dan dapat diperluas yang dirancang oleh Tim HeartBot Digital Ocean, dibuat dengan cinta dan perhatian oleh Tim Rocket.Chat.
Kami harap Anda menikmati proyek ini dan meluangkan waktu untuk berkontribusi.
HubotNatural dibuat agar mudah untuk dilatih dan dikembangkan. Jadi yang harus Anda pahami pada dasarnya adalah ia memiliki korpus YAML, tempat Anda dapat mendesain interaksi chatbot hanya menggunakan notasi YAML.
Semua interaksi YAML yang dirancang di korpus dapat memiliki parameternya sendiri, yang akan diproses oleh kelas peristiwa.
Kelas acara memberikan kemungkinan untuk memperluas HubotNatural. Dengan menulis kelas acara Anda sendiri, Anda dapat memberikan chatbot Anda keterampilan untuk berinteraksi dengan layanan apa pun yang Anda butuhkan.
File YAML dimuat di scripts/index.js
, diurai dan diteruskan ke chatbot bind, yang akan ditemukan di scripts/bot/index.js
, korteks bot, tempat semua aliran informasi dan kontrol diprogram.
Korpus YAML terletak di training_data/corpus.yml
dan struktur dasarnya terlihat seperti ini:
trust : .85
interactions :
- name : salutation
expect :
- hi there
- hello everyone
- what's up bot
- good morning
answer :
- - Hello there $user, how are you?
- Glad to be here...
- Hey there, nice to see you!
event : respond
Arti sintaksis ini:
trust
: tingkat kepastian minimum yang harus dikembalikan oleh pengklasifikasi untuk menjalankan interaksi ini. Nilainya 0 hingga 1 (0% hingga 100%). Jika pengklasifikasi mengembalikan nilai kepastian yang lebih kecil dari trust
, bot akan merespons dengan dan membuat simpul interaksi kesalahan.interactions
: Vektor dengan banyak node interaksi yang akan diurai. Setiap interaksi yang dirancang untuk chatbot Anda harus berada di bawah struktur objek interaksi.node.name
: itulah nama unik dari interaksi yang akan digunakan untuk mengidentifikasinya. Jangan membuat lebih dari satu interaksi dengan atribut node.name
yang sama.expect
: Itulah kalimat yang akan diberikan pada pelatihan bot. Mereka dapat berupa string atau vektor kata kunci, seperti ['consume','use']
.answer
: pesan yang akan dikirim ke pengguna, jika pengklasifikasi diklasifikasikan di atas tingkat kepercayaan. node.message
akan diuraikan dan dikirim oleh kelas acara. Untuk menggunakan string multiline di dalam YAML Anda, Anda harus mengikuti sintaksis YAML Multiline Strings. Anda dapat menentukan variabel dalam pesan. Secara default HubotNatural hadir dengan variabel $user
, $bot
dan $room
.event
: adalah nama Kelas CoffeeScript atau JavaScript di dalam scripts/events
, tanpa ekstensi file.Kelas acara dapat ditulis untuk memperluas keterampilan chatbot. Mereka menerima objek interaksi dan menguraikan pesannya, seperti ini:
class respond
constructor : (@interaction) ->
process : (msg) =>
sendMessages(stringElseRandomKey(@interaction.answer), msg)
module.exports = respond
Konstruktor dasarnya adalah simpul @interaction
sehingga Anda dapat memiliki akses ke semua atribut di dalam interaksi hanya dengan menggunakan @interaction.attribute
. Di sini Anda dapat mengurai teks, memanggil API, membaca file, mengakses database, dan semua hal lain yang Anda perlukan.
Anda mungkin ingin menggunakan fungsi stringElseRandomKey
untuk mendapatkan elemen acak dari daftar, jika parameternya adalah daftar, dan menggunakan fungsi sendMessages
untuk mengirim pesan ke pengguna.
Pustaka NaturalNode hadir dengan dua jenis pengklasifikasi, pengklasifikasi Naive Bayes yang dikenal sebagai BayesClassifier
dan fungsi LogisticRegressionClassifier
. Secara default, HubotNatural menggunakan LogisticRegressionClassifier
. Itu datang dengan hasil yang lebih baik dalam pengujian kami.
Ada juga lebih dari satu jenis stemmer. Anda harus mengatur stemmer untuk menentukan bahasa Anda. Secara default kami menggunakan PorterStemmerPt untuk bahasa Portugis, tetapi Anda dapat menemukan stemmer bahasa Inggris, Rusia, Italia, Perancis, Spanyol, dan lainnya di lib NaturalNode, atau bahkan menulis sendiri berdasarkan lib tersebut.
Cukup periksa di dalam node_modules/natural/lib/natural/stemmers/
.
Untuk mengubah bahasa stemmer, cukup atur variabel lingkungan HUBOT_LANG
sebagai pt
, en
, es
, dan penghentian bahasa lainnya yang sesuai dengan file stemmer di dalam direktori di atas.
Kami memiliki Dockerfile yang membuat image ringan berbasis Linux Alpine dengan semua konten repositori sehingga Anda dapat mengunggah image tersebut ke registri buruh pelabuhan dan menerapkan chatbot Anda dari sana. Itu terletak di folder docker
.
Anda juga dapat menggunakan file docker-compose.yml
untuk memuat instance lokal layanan Rocket.Chat, MongoDB, dan HubotNatural, tempat Anda dapat mengubah parameter jika perlu.
File penulisan buruh pelabuhan terlihat seperti ini:
version : ' 2 '
services :
rocketchat :
image : rocketchat/rocket.chat:latest
restart : unless-stopped
volumes :
- ./uploads:/app/uploads
environment :
- PORT=3000
- ROOT_URL=http://localhost:3000
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
- MAIL_URL=smtp://smtp.email
# - HTTP_PROXY=http://proxy.domain.com
# - HTTPS_PROXY=http://proxy.domain.com
depends_on :
- mongo
ports :
- 3000:3000
mongo :
image : mongo:3.2
restart : unless-stopped
volumes :
- ./data/db:/data/db
# - ./data/dump:/dump
command : mongod --smallfiles --oplogSize 128 --replSet rs0
mongo-init-replica :
image : mongo:3.2
command : ' mongo mongo/rocketchat --eval "rs.initiate({ _id: '' rs0 '' , members: [ { _id: 0, host: '' localhost:27017 '' } ]})" '
depends_on :
- mongo
hubot-natural :
build : .
restart : unless-stopped
environment :
- HUBOT_ADAPTER=rocketchat
- HUBOT_NAME='Hubot Natural'
- HUBOT_OWNER=RocketChat
- HUBOT_DESCRIPTION='Hubot natural language processing'
- HUBOT_LOG_LEVEL=debug
- HUBOT_CORPUS=corpus.yml
- HUBOT_LANG=pt
- RESPOND_TO_DM=true
- RESPOND_TO_LIVECHAT=true
- RESPOND_TO_EDITED=true
- LISTEN_ON_ALL_PUBLIC=false
- ROCKETCHAT_AUTH=password
- ROCKETCHAT_URL=rocketchat:3000
- ROCKETCHAT_ROOM=GENERAL
- ROCKETCHAT_USER=botnat
- ROCKETCHAT_PASSWORD=botnatpass
- HUBOT_NATURAL_DEBUG_MODE=true
volumes :
- ./scripts:/home/hubotnat/bot/scripts
- ./training_data:/home/hubotnat/bot/training_data
depends_on :
- rocketchat
ports :
- 3001:8080
Anda dapat mengubah atribut variabel dan volume sesuai kebutuhan spesifik Anda dan menjalankan docker-compose up
di terminal untuk memulai layanan rocketchat di http://localhost:3000
. PERHATIAN: Anda harus ingat bahwa hubot harus memiliki pengguna rocketchat asli untuk login. Jadi pertama kali Anda menjalankan ini, Anda harus masuk ke rocketchat terlebih dahulu dan membuat pengguna baru untuk hubot, mengubah variabel ROCKETCHAT_USER
dan ROCKETCHAT_PASSWORD
di file docker-compose.yml, lalu memuat ulang layanan menggunakan docker-compose stop && docker-compose up
untuk memulai semuanya dari awal lagi.
Jika Anda hanya ingin menjalankan layanan hubot-natural untuk menghubungkan instance Rocket.Chat yang sudah berjalan, Anda hanya perlu ingat untuk menyetel ROCKETCHAT_URL
ke nilai yang benar, seperti https://open.rocket.chat
.
Untuk menggunakan Hubot Natural dengan benar, setelah menjalankan perintah docker-compose up
, perlu melakukan beberapa langkah konfigurasi. Untuk melakukan itu, ada dua opsi utama:
Yang pertama adalah melakukan secara manual langkah-langkah yang dijelaskan pada dokumentasi konfigurasi bot.
Opsi kedua adalah menjalankan skrip bot_config.py
, yang terletak di direktori root pada proyek. Itu akan secara otomatis mengkonfigurasi bot berdasarkan variabel berikut yang ditentukan pada skrip: admin_name, admin_password, bot_name
dan bot_password
. Penting untuk diingat untuk menetapkan nilai variabel ini dengan benar sesuai dengan konteksnya. Nilai yang digunakan pada bot_name
dan bot_password
harus sama dengan yang ditentukan pada docker-compose.yml, masing-masing pada variabel ROCKETCHAT_USER
dan ROCKETCHAT_PASSWORD
. Dan nilai yang ditentukan pada variabel admin_name
dan admin_password
harus merupakan kredensial pengguna yang sudah ada di rocketchat, yang memiliki izin admin.
Untuk membuat pengguna admin secara otomatis, sebelum menjalankan layanan, cukup tentukan variabel ADMIN_USERNAME
dan ADMIN_PASS
untuk layanan rocketchat di docker-compose.yml
.
Untuk menerapkan HubotNatural, pertama-tama Anda harus menginstal yo hubot-generator:
npm install -g yo generator-hubot
Kemudian Anda akan mengkloning repositori HubotNatural:
git clone https://github.com/RocketChat/hubot-natural.git mybot
Ubah 'mybot' pada perintah git clone di atas menjadi apa pun nama bot Anda, dan instal binari hubot, tanpa menimpa file apa pun di dalam folder:
cd mybot
npm install
yo hubot
_____________________________
/
// | Extracting input for |
//// _____ | self-replication process |
////// /_____ /
======= | [^_/ _ ] | /----------------------------
| | _ | ___@@__ | __
+===+/ /// _
| | _ /// HUBOT/ \
| ___/ / / / \
/ +---+
_ ___/ | |
| // | +===+
/ / | xx |
? Owner Diego < [email protected] >
? Bot name mybot
? Description A simple helpful chatbot for your Company
? Bot adapter rocketchat
create bin/hubot
create bin/hubot.cmd
conflict Procfile
? Overwrite Procfile ? do not overwrite
skip Procfile
conflict README.md
? Overwrite README.md ? do not overwrite
skip README.md
create external-scripts.json
create hubot-scripts.json
conflict .gitignore
? Overwrite .gitignore ? do not overwrite
skip .gitignore
conflict package.json
? Overwrite package.json ? do not overwrite
skip package.json
create scripts/example.coffee
create .editorconfig
Sekarang, untuk menjalankan chatbot Anda di shell, Anda harus menjalankan:
bin/hubot
tunggu sebentar untuk proses pemuatan, lalu Anda dapat berbicara dengan mybot.
Lihatlah adaptor untuk menjalankan bot Anda di platform lain.
Hubot Natural dapat dikonfigurasi untuk mengalihkan percakapan ke orang sungguhan, pada saat bot tidak dapat membantu pengguna sebanyak yang diperlukan. Untuk mengaktifkan dan mengonfigurasi fitur Live Transfer
, ikuti langkah-langkah yang dijelaskan pada dokumentasi konfigurasi transfer langsung.
Di jendela terminal Anda, jalankan:
export HUBOT_ADAPTER=rocketchat
export HUBOT_OWNER=RocketChat
export HUBOT_NAME= ' Bot Name '
export HUBOT_DESCRIPTION= ' Description of your bot '
export ROCKETCHAT_URL=https://open.rocket.chat
export ROCKETCHAT_ROOM=GENERAL
export LISTEN_ON_ALL_PUBLIC=false
export RESPOND_TO_DM=true
export RESPOND_TO_LIVECHAT=true
export ROCKETCHAT_USER=catbot
export ROCKETCHAT_PASSWORD= ' bot password '
export ROCKETCHAT_AUTH=password
export HUBOT_LOG_LEVEL=debug
export HUBOT_CORPUS= ' corpus.yml '
export HUBOT_LANG= ' en '
bin/hubot -a rocketchat --name $HUBOT_NAME
Anda dapat memeriksa proyek adaptor hubot-rocketchat untuk lebih jelasnya.
Sebagai pengembang NodeJS, kami belajar menyukai Process Manager PM2, dan kami sangat menganjurkan Anda untuk menggunakannya.
npm install pm2 -g
Buat file mybot.json
dan atur kontennya sebagai:
{
"apps" : [{
"name" : " mybot " ,
"interpreter" : " /bin/bash " ,
"watch" : true ,
"ignore_watch" : [ " client/img " ],
"script" : " bin/hubot " ,
"args" : " -a rocketchat " ,
"port" : " 3001 " ,
"env" : {
"ROCKETCHAT_URL" : " https://localhost:3000 " ,
"ROCKETCHAT_ROOM" : " general " ,
"RESPOND_TO_DM" : true ,
"ROCKETCHAT_USER" : " mybot " ,
"ROCKETCHAT_PASSWORD" : " 12345 " ,
"ROCKETCHAT_AUTH" : " password " ,
"HUBOT_LOG_LEVEL" : " debug "
}
}
]
}
Anda juga dapat membuat instance lebih dari satu proses dengan PM2, misalnya jika Anda ingin menjalankan lebih dari satu bot Anda:
{
"apps" : [{
"name" : " mybot.0 " ,
"interpreter" : " /bin/bash " ,
"watch" : true ,
"ignore_watch" : [ " client/img " ],
"script" : " bin/hubot " ,
"args" : " -a rocketchat " ,
"port" : " 3001 " ,
"env" : {
"ROCKETCHAT_URL" : " https://localhost:3000 " ,
"ROCKETCHAT_ROOM" : " general " ,
"RESPOND_TO_DM" : true ,
"ROCKETCHAT_USER" : " mybot " ,
"ROCKETCHAT_PASSWORD" : " 12345 " ,
"ROCKETCHAT_AUTH" : " password " ,
"HUBOT_LOG_LEVEL" : " debug "
}
}, {
"name" : " mybot.1 " ,
"interpreter" : " /bin/bash " ,
"watch" : true ,
"ignore_watch" : [ " client/img " ],
"script" : " bin/hubot " ,
"args" : " -a rocketchat " ,
"port" : " 3002 " ,
"env" : {
"ROCKETCHAT_URL" : " https://mycompany.rocket.chat " ,
"ROCKETCHAT_ROOM" : " general " ,
"RESPOND_TO_DM" : true ,
"ROCKETCHAT_USER" : " mybot " ,
"ROCKETCHAT_PASSWORD" : " 12345 " ,
"ROCKETCHAT_AUTH" : " password " ,
"HUBOT_LOG_LEVEL" : " debug "
}
}
]
}
Dan tentu saja, Anda dapat mengatur konfigurasi untuk platform yang berbeda, seperti mensenger facebook, twitter, atau telegram ;P.
Hubot hadir dengan setidaknya 38 adaptor, termasuk adaptor Rocket.Chat tentunya.
Untuk terhubung ke instance Rocket.Chat Anda, Anda dapat mengatur variabel env, file json konfigurasi pm2 kami.
Lihat adaptor hubot lainnya untuk info lebih lanjut.
Di Rocket.Chat kami sangat jatuh cinta dengan apa yang kami lakukan sehingga kami tidak bisa lupa berterima kasih kepada semua orang yang telah mewujudkannya!
Terima kasih teman-teman atas kerangka luar biasa ini, hubots ada di jantung Rocket.Chat, dan kami menyarankan semua orang untuk memeriksa https://hubot.github.com dan menemukan lebih banyak lagi tentang hubot!
Kepada Tim NaturalNode, kami dengan tulus mengucapkan "TERIMA KASIH BANYAK!! Kami menyukai proyek Anda dan kami bersemangat untuk berkontribusi!".
Periksa https://github.com/NaturalNode/natural dan biarkan pikiran Anda terpesona!
Kami sangat berterima kasih kepada Digital Ocean, tidak hanya untuk proyek HeartBot yang indah ini, tetapi juga untuk semua tutorial hebat dan semua kontribusi pada gerakan OpenSource.
Dan yang tak kalah pentingnya, terima kasih kepada komunitas besar kami yang terdiri dari kontributor, penguji, pengguna, mitra, dan semua orang yang menyukai Rocket.Chat dan memungkinkan semua ini terjadi.