Ini adalah perpustakaan juru bahasa RiveScript yang ditulis untuk bahasa pemrograman Go. RiveScript adalah bahasa skrip untuk chatterbots, sehingga memudahkan penulisan pasangan pemicu/respons untuk membangun kecerdasan bot.
Proyek ini saat ini dalam status Beta. API sebagian besar harus stabil tetapi segala sesuatunya mungkin berubah pada Anda.
RiveScript adalah bahasa skrip untuk membuat chatbots. Ini memiliki sintaks yang sangat sederhana dan dirancang agar mudah dibaca dan cepat untuk ditulis.
Contoh sederhana tampilan RiveScript:
+ hello bot
- Hello human.
Ini cocok dengan pesan pengguna "halo bot" dan akan membalas "Halo manusia." Atau untuk contoh yang sedikit lebih rumit:
+ my name is *
* <formal> == <bot name> => <set name=<formal>>Wow, we have the same name!
* <get name> != undefined => <set name=<formal>>Did you change your name?
- <set name=<formal>>Nice to meet you, <get name>!
Situs web resmi untuk RiveScript adalah https://www.rivescript.com/
Untuk menguji coba RiveScript di browser web Anda, cobalah RiveScript Playground.
Lihat juga Wiki Komunitas RiveScript untuk pola desain umum dan tip & trik untuk RiveScript.
Untuk perpustakaan pengembangan:
go get github.com/aichaos/rivescript-go
Untuk biner rivescript
yang berdiri sendiri untuk menguji bot:
go get github.com/aichaos/rivescript-go/cmd/rivescript
Distribusi RiveScript menyertakan shell interaktif untuk menguji bot RiveScript Anda. Jalankan dengan path ke folder pada disk yang berisi dokumen RiveScript Anda. Contoh:
# (Linux)
$ rivescript eg/brain
# (Windows)
> rivescript.exe eg/brain
Lihat rivescript -help
untuk opsi yang diterima, termasuk mode debug dan mode UTF-8.
Jika digunakan sebagai perpustakaan untuk menulis chatbot Anda sendiri, sinopsisnya adalah sebagai berikut:
package main
import (
"fmt"
"github.com/aichaos/rivescript-go"
)
func main () {
// Create a new bot with the default settings.
bot := rivescript . New ( nil )
// To enable UTF-8 mode, you'd have initialized the bot like:
bot = rivescript . New ( rivescript . WithUTF8 ())
// Load a directory full of RiveScript documents (.rive files)
err := bot . LoadDirectory ( "eg/brain" )
if err != nil {
fmt . Printf ( "Error loading from directory: %s" , err )
}
// Load an individual file.
err = bot . LoadFile ( "./testsuite.rive" )
if err != nil {
fmt . Printf ( "Error loading from file: %s" , err )
}
// Sort the replies after loading them!
bot . SortReplies ()
// Get a reply.
reply , err := bot . Reply ( "local-user" , "Hello, bot!" )
if err != nil {
fmt . Printf ( "Error: %s n " , err )
} else {
fmt . Printf ( "The bot says: %s" , reply )
}
}
Konstruktor mengambil struct Config
opsional. Berikut adalah contoh lengkap dengan semua opsi yang didukung. Anda hanya perlu memberikan kunci yang berbeda dengan defaultnya.
bot := rivescript . New ( & rivescript. Config {
Debug : false , // Debug mode, off by default
Strict : false , // No strict syntax checking
UTF8 : false , // No UTF-8 support enabled by default
Depth : 50 , // Becomes default 50 if Depth is <= 0
Seed : time . Now (). UnixNano (), // Random number seed (default is == 0)
SessionManager : memory . New (), // Default in-memory session manager
})
Untuk kenyamanan, Anda dapat menggunakan pintasan:
// A nil config uses all the defaults.
bot = rivescript . New ( nil )
// WithUTF8 enables UTF-8 mode (other settings left as default).
bot = rivescript . New ( rivescript . WithUTF8 ())
Fitur umum dalam banyak implementasi RiveScript adalah makro objek, yang memungkinkan Anda menulis kode program dinamis (dalam bahasa pemrograman favorit Anda) untuk menambahkan kemampuan ekstra pada bot Anda. Misalnya, bot Anda dapat menjawab pertanyaan "seperti apa cuaca di $location " dengan menjalankan beberapa kode untuk mencari jawabannya melalui API web.
RiveScript versi Go memiliki dukungan untuk makro objek yang ditulis dalam Go (pada waktu kompilasi aplikasi Anda). Ia juga memiliki dukungan opsional untuk makro objek JavaScript menggunakan perpustakaan goja.
Berikut ini cara mendefinisikan makro objek Go:
bot . SetSubroutine ( func ( rs * rivescript. RiveScript , args [] string ) string {
return "Hello world!"
})
Berikut ini contoh cara membuat makro objek JavaScript tersedia melalui modul goja:
package main
import (
"fmt"
"github.com/aichaos/rivescript-go"
"github.com/aichaos/rivescript-go/lang/javascript"
)
func main () {
// Initialize RiveScript first.
bot := rivescript . New ( rivescript . WithUTF8 ())
// Add the JavaScript object macro handler.
js := javascript . New ( bot )
bot . SetHandler ( "javascript" , js )
// You can access the goja VM and set your own global
// variable or function bindings to be called from your
// object macros.
js . VM . Set ( "helloFunc" , func ( name string ) string {
return fmt . Sprintf ( "Hello, %s!" , name )
})
// Load some RiveScript code. This example just tests the
// JavaScript object macro support.
err := bot . Stream ( `
> object add javascript
let a = args[0];
let b = args[1];
return parseInt(a) + parseInt(b);
< object
> object fn javascript
let result = helloFunc(args[0])
return result
< object
+ add # and #
- <star1> + <star2> = <call>add <star1> <star2></call>
+ say hello *
- <call>fn <star></call>
` )
if err != nil {
fmt . Printf ( "Error loading RiveScript document: %s" , err )
}
// Sort the replies after loading them!
bot . SortReplies ()
// Get some replies!
inputs := [] string { "add 5 and 12" , "say hello goja" }
for _ , message := range inputs {
fmt . Printf ( "You said: %s n " , message )
reply , err := bot . Reply ( "local-user" , message )
if err != nil {
fmt . Printf ( "Error: %s n " , err )
} else {
fmt . Printf ( "The bot says: %s n " , reply )
}
}
}
Dukungan UTF-8 di RiveScript dianggap sebagai fitur eksperimental. Ini dinonaktifkan secara default.
Secara default (tanpa mengaktifkan mode UTF-8), pemicu hanya boleh berisi karakter ASCII dasar (tidak ada karakter asing), dan semua karakter dalam pesan pengguna akan dihilangkan kecuali huruf, angka, dan spasi. Artinya, misalnya, Anda tidak dapat menangkap alamat email pengguna dalam balasan RiveScript, karena tanda @ dan . karakter.
Jika mode UTF-8 diaktifkan, pembatasan ini akan dicabut. Pemicu hanya dibatasi untuk tidak mengandung metakarakter tertentu seperti garis miring terbalik, dan pesan pengguna hanya dihilangkan dari garis miring terbalik dan tanda kurung siku HTML (untuk melindungi dari XSS yang jelas jika Anda menggunakan RiveScript dalam aplikasi web). Selain itu, karakter tanda baca umum dihilangkan, dengan set defaultnya adalah /[.,!?;:]/g
. Hal ini dapat diatasi dengan menyediakan string regexp literal baru ke fungsi RiveScript.SetUnicodePunctuation
. Contoh:
// Make a new bot with UTF-8 mode enabled.
bot := rivescript . New ( rivescript . WithUTF8 ())
// Override the punctuation characters that get stripped
// from the user's message.
bot . SetUnicodePunctuation ( `[.,!?;:]` );
Tag <star>
di RiveScript akan menangkap masukan "mentah" pengguna, sehingga Anda dapat menulis balasan untuk mendapatkan alamat email pengguna atau menyimpan karakter asing dalam namanya.
Saya menggunakan GNU Makefile untuk membuat pembuatan dan menjalankan modul ini lebih mudah. Perintah yang relevan adalah:
make setup
- jalankan ini setelah baru saja mengkloning repo ini. Ini menjalankan perintah git submodule
untuk menarik dependensi vendor.make build
- ini akan membangun perintah front-end dari cmd/rivescript
dan menempatkan binernya ke direktori bin/
. Itu membangun biner yang relevan dengan sistem Anda saat ini, jadi di Linux ini akan membuat biner Linux. Disarankan juga untuk menjalankan yang ini setidaknya sekali, karena ini akan menyimpan paket ketergantungan dalam cache dan mempercepat pembangunan dan pengoperasian selanjutnya.make run
- menjalankan perintah front-end dan mengarahkannya ke folder eg/brain
sebagai sumber RiveScript-nya.make fmt
- menjalankan gofmt -w
pada semua file sumber.make test
- menjalankan pengujian unit.make clean
- membersihkan direktori .gopath
, bin
dan dist
. Repo rivescript-go mensubmodulkan proyek RiveScript Test Suite (pertama). Jika Anda tidak melakukan git clone --recursive
untuk rivescript-go, Anda dapat menarik submodul melalui perintah berikut:
git submodule init
git submodule update
Kemudian make test
(atau go test
) akan menunjukkan hasil dari tes yang dijalankan di folder rsts/.
Anda dapat membuat rilis untuk platform individual dengan menjalankan perintah seperti make linux/amd64
. Target pembangunan yang valid saat ini adalah sebagai berikut:
linux/386
dan linux/amd64
windows/386
dan windows/amd64
darwin/amd64
Jalankan make release
untuk secara otomatis membuat rilis untuk semua platform yang didukung.
Direktori untuk rilis dibuat di dist/rivescript-$VERSION-$OS-$ARCH/
yang berisi biner bawaan, README.md, Changes.md, dan contoh. Anda dapat memeriksa direktori ini setelahnya; isinya secara otomatis di-tar (zip untuk Windows) dan ditempatkan di root repo git.
Jika Anda melakukan kompilasi silang untuk sistem yang berbeda, Anda mungkin perlu mengotak-atik izin agar Go dapat mengunduh pustaka standar untuk target baru. Contoh:
% sudo mkdir /usr/lib/golang/pkg/windows_386
% chown your_user:your_user /usr/lib/golang/pkg/windows_386
NullStore
untuk pengujian. Manajer sesi resmi lainnya (misalnya Redis) juga ada di sini. The MIT License (MIT)
Copyright (c) 2017 Noah Petherbridge
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Situs web resmi RiveScript, http://www.rivescript.com/