Kerangka kerja chatbot sederhana yang ditulis dalam Go, dengan konfigurasi dalam YAML. Tujuan dari proyek ini adalah untuk membuat chatbot berbasis teks yang sangat sederhana menggunakan beberapa file konfigurasi.
Inspirasi proyek ini awalnya datang dari Flottbot dan pengalaman saya menggunakan Rasa.
Instalasi
Dokumentasi
Bot pertama Anda
File clf.yml
File fsm.yml
Jalankan bot Anda
Berinteraksi dengan bot Anda
Penggunaan
CLI
Penulisan Docker
Kubernet
Impor
Contoh
go get -u github.com/jaimeteb/chatto
Melalui Docker:
docker pull jaimeteb/chatto:latest
Lihat Dokumentasi untuk contoh , panduan konfigurasi dan referensi .
Chatto menggabungkan konsistensi mesin keadaan terbatas dengan fleksibilitas pembelajaran mesin. Ia memiliki tiga komponen utama: pengklasifikasi, mesin keadaan terbatas, dan ekstensi.
Struktur direktori yang sangat mendasar untuk Chatto adalah sebagai berikut:
. └──data ├── clf.yml └── fsm.yml
Mulailah dengan membuat direktori data
serta file YAML.
mkdir datasentuh data/clf.yml data/fsm.yml
File clf.yml mendefinisikan bagaimana pesan pengguna akan diklasifikasikan ke dalam perintah (maksud). Mulailah dengan konfigurasi yang sangat sederhana ini:
klasifikasi: - perintah: "turn_on" teks: - "nyalakan" - "nyalakan" - perintah: "turn_off" teks: - "matikan" - "mati"
File fsm.yml mendefinisikan transisi antar negara, perintah yang melakukan transisi ini, dan jawaban yang akan dikirim di dalamnya. Mulailah dengan isi file ini:
transisi: - dari: - "awal"ke: "on"perintah: "turn_on"jawaban: - teks: "Menghidupkan." - dari: - "on" ke: "awal" perintah: "turn_off" jawaban: - teks: "Mematikan." - teks: ""default: tidak diketahui: "Tidak bisa melakukan itu."
Untuk memulai bot Anda, jalankan:
chatto --jalur data/
Jika Anda menggunakan Docker, jalankan:
menjalankan buruh pelabuhan -dia -e CHATTO_DATA=./data -v $PWD/data:/data jaimeteb/chatto:terbaru chatto --jalur data
Untuk berinteraksi dengan bot Anda, jalankan:
chatto cli
Itu saja! Sekarang Anda dapat mengucapkan nyalakan atau hidupkan untuk masuk ke keadaan hidup , dan matikan atau matikan untuk kembali ke keadaan awal . Namun, Anda tidak bisa melanjutkan dari on ke on , atau dari awal ke awal juga.
Berikut adalah diagram untuk Finite State Machine sederhana ini:
Anda dapat mengintegrasikan bot Anda dengan Telegram, Twilio, Slack, dan apa pun yang Anda suka
Jalankan chatto
di direktori tempat file YAML Anda berada, atau tentukan jalur ke file tersebut dengan tanda --path
:
chatto --path ./data/anda
Untuk berjalan di Docker, gunakan:
menjalankan buruh pelabuhan -hal 4770:4770 -e CHATTO_DATA=./data/Anda -v $PWD/data/anda:/data jaimeteb/chatto
Anda dapat menggunakan alat Chatto CLI dengan mengunduh alat chatto cli
. CLI memudahkan pengujian interaksi bot Anda.
chatto cli --url 'http://mybot.com' -port 4770
Anda juga dapat menggunakan Chatto di Docker Compose. docker-compose.yml
akan terlihat seperti ini:
versi: "3"layanan: chatto:image: jaimeteb/chatto:${CHATTO_VERSION}env_file: .envports: - volume "4770:4770": - ${CHATTO_DATA}:/datadepends_on: - ext - redis ext:image: odise/busybox-curl # Kotak sibuk dengan sertifikatperintah: ext/extexpose: - 8770 volume: - ${CHATTO_DATA}/ext:/ext redis:image: bitnami/redis:6.0lingkungan: - REDIS_PASSWORD=${STORE_PASSWORD}mengekspos: - 6379
Ini memerlukan file .env
untuk memuat variabel lingkungan yang diperlukan:
# Chatto configuration CHATTO_VERSION=latest CHATTO_DATA=./your/data # Extension configuration CHATTO_BOT_EXTENSIONS_EXTENSION_NAME_URL=http://ext:8770 # Redis CHATTO_BOT_STORE_HOST=redis CHATTO_BOT_STORE_PASSWORD=pass # Logs CHATTO_BOT_DEBUG=true
Struktur direktori dengan semua file akan terlihat seperti ini:
. ├── data │ ├── ext │ │ ├── ext │ │ └── ext.go │ ├── bot.yml │ ├── chn.yml │ ├── clf.yml | └── fsm.yml ├── docker-compose.yml └── .env
Terakhir, jalankan:
buruh pelabuhan-menulis -d redis ext buruh pelabuhan-menulis -d chatto
Server ekstensi harus dijalankan sesuai dengan bahasanya.
Untuk filedocker-compose.yml
ini, Anda harus membuat ekstensi Go terlebih dahulu:
go build -o data/ext/ext data/ext/ext.go
Server ekstensi harus berjalan sebelum Chatto diinisialisasi.
Di bawah direktori deploy/kubernetes
Anda dapat menemukan contoh penerapan:
Baik | Nama | Keterangan |
---|---|---|
Rahasia | chatto-config-secrets | Berisi token yang akan digunakan Chatto untuk otorisasi |
ConfigMap | chatto-config-envs | Berisi variabel lingkungan untuk file bot.yml |
ConfigMap | chatto-config-files | Berisi file clf.yml dan fsm.yml |
Penyebaran | chatto | Penerapan Chatto berdasarkan image Docker jaimeteb/chatto |
Melayani | chatto-service | Layanan untuk penerapan chatto |
Masuknya | chatto-ingress | Ingress untuk layanan chatto-service |
Jalankan perintah berikut untuk diterapkan di Kubernetes:
kubectl terapkan -f ./deploy/kubernetes/
Server bot dan paket klien yang dapat diimpor disediakan untuk memungkinkan penyematan ke dalam aplikasi Anda sendiri.
Untuk menyematkan server:
paket mainimport ( "flag""github.com/jaimeteb/chatto/bot")func main() { port := flag.Int("port", 4770, "Tentukan port yang akan digunakan.") path := flag.String ("jalur", ".", "Jalur ke file YAML.") flag.Parse() server := bot.NewServer(*path, *port) server.Run() }
Untuk menyematkan klien:
paket myserviceimport ( "log""github.com/jaimeteb/chatto/bot")ketik MyService struct { chatto bot.Client}func NewMyService(url string, port int) *MyService { return &MyService{chatto: bot.NewClient(url, pelabuhan)} }func (s *Layanan Saya) Kirim(pertanyaan *query.Question) error { jawaban, err := s.chatto.Submit(pertanyaan) if err != nil { return err } // Cetak jawaban ke stdoutfor _, jawaban := rentang jawaban { fmt.Println(answer.Text) } kembali nihil}
Saya telah menyediakan beberapa file konfigurasi di bawah contoh . Kloning repositori dan jalankan chatto
dengan -path
dari contoh yang Anda inginkan untuk mengujinya (untuk yang menggunakan ekstensi, jalankan ekstensi masing-masing terlebih dahulu).
Lebih lanjut tentang contoh-contoh ini di Dokumentasi
Mood Bot - Versi chatto dari Mood Bot Rasa Sapa bot untuk memulai percakapan.
Pencarian Pokemon - Cari Pokemon berdasarkan nama atau nomor.
Kuis Trivia - Ketik mulai untuk mengikuti kuis trivia singkat.