これは、Go プログラミング言語用に書かれた RiveScript インタープリター ライブラリです。 RiveScript はチャタボット用のスクリプト言語であり、ボットのインテリジェンスを構築するためのトリガーと応答のペアを簡単に作成できます。
このプロジェクトは現在ベータ版です。 API はほぼ安定しているはずですが、状況が変わる可能性があります。
RiveScript は、チャットボットを作成するためのスクリプト言語です。構文は非常にシンプルで、読みやすく、速く書けるように設計されています。
RiveScript がどのようなものかを示す簡単な例:
+ hello bot
- Hello human.
これは、ユーザーの「こんにちはボット」というメッセージと一致し、「こんにちは、人間です」と応答します。または、もう少し複雑な例としては次のようになります。
+ 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>!
RiveScript の公式 Web サイトは https://www.rivescript.com/ です。
Web ブラウザで RiveScript をテストするには、RiveScript Playground を試してください。
RiveScript の一般的なデザイン パターンやヒントとテクニックについては、 RiveScript コミュニティ Wikiもチェックしてください。
開発ライブラリの場合:
go get github.com/aichaos/rivescript-go
ボットをテストするためのスタンドアロンrivescript
バイナリの場合:
go get github.com/aichaos/rivescript-go/cmd/rivescript
RiveScript のディストリビューションには、RiveScript ボットをテストするための対話型シェルが含まれています。 RiveScript ドキュメントを含むディスク上のフォルダーへのパスを指定して実行します。例:
# (Linux)
$ rivescript eg/brain
# (Windows)
> rivescript.exe eg/brain
デバッグ モードや UTF-8 モードなど、受け入れられるオプションについては、 rivescript -help
参照してください。
独自のチャットボットを作成するためのライブラリとして使用する場合の概要は次のとおりです。
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 )
}
}
コンストラクターはオプションのConfig
構造体を受け取ります。以下は、サポートされているすべてのオプションを含む完全な例です。デフォルトとは異なるキーを指定するだけで済みます。
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
})
便宜上、ショートカットを使用できます。
// 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 ())
多くの RiveScript 実装に共通する機能はオブジェクト マクロです。これを使用すると、動的プログラム コードを (好みのプログラミング言語で) 記述して、ボットに追加機能を追加できます。たとえば、ボットは、Web API 経由で回答を検索するコードを実行することで、「 $locationの天気はどうですか」という質問に答えることができます。
RiveScript の Go バージョンでは、Go で記述されたオブジェクト マクロがサポートされています (アプリケーションのコンパイル時)。また、goja ライブラリを使用した JavaScript オブジェクト マクロのオプションのサポートもあります。
Go オブジェクト マクロを定義する方法は次のとおりです。
bot . SetSubroutine ( func ( rs * rivescript. RiveScript , args [] string ) string {
return "Hello world!"
})
goja モジュール経由で JavaScript オブジェクト マクロを利用できるようにする方法の例を次に示します。
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 )
}
}
}
RiveScript での UTF-8 サポートは実験的な機能とみなされます。デフォルトでは無効になっています。
デフォルト (UTF-8 モードをオンにしていない場合) では、トリガーには基本的な ASCII 文字のみを含めることができ (外国文字は不可)、ユーザーのメッセージからは文字、数字、スペースを除くすべての文字が削除されます。これは、たとえば、@ と . が原因で、RiveScript 応答でユーザーの電子メール アドレスを取得できないことを意味します。文字。
UTF-8 モードを有効にすると、これらの制限が解除されます。トリガーにはバックスラッシュなどの特定のメタキャラクターが含まれないように制限されており、ユーザーのメッセージからはバックスラッシュと HTML 山かっこのみが削除されます (Web アプリケーションで RiveScript を使用する場合に明らかな XSS から保護するため)。さらに、一般的な句読点文字は削除され、デフォルトのセットは/[.,!?;:]/g
になります。これは、新しい正規表現文字列リテラルをRiveScript.SetUnicodePunctuation
関数に提供することでオーバーライドできます。例:
// 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 ( `[.,!?;:]` );
RiveScript の<star>
タグはユーザーの「生の」入力をキャプチャするため、返信を書いてユーザーの電子メール アドレスを取得したり、ユーザーの名前に外国文字を保存したりできます。
このモジュールの構築と実行を容易にするために、GNU Makefile を使用します。関連するコマンドは次のとおりです。
make setup
- このリポジトリを新たに複製した後、これを実行します。 git submodule
コマンドを実行して、ベンダーの依存関係をプルダウンします。make build
- cmd/rivescript
からフロントエンド コマンドをビルドし、そのバイナリをbin/
ディレクトリに配置します。現在のシステムに関連するバイナリをビルドするため、Linux では Linux バイナリが作成されます。また、依存関係パッケージをキャッシュし、後続のビルドと実行を高速化するため、これを少なくとも 1 回実行することをお勧めします。make run
- フロントエンド コマンドを実行し、RiveScript ソースとしてeg/brain
フォルダーをポイントします。make fmt
- すべてのソース ファイルに対してgofmt -w
を実行します。make test
- 単体テストを実行します。make clean
- .gopath
、 bin
、およびdist
ディレクトリをクリーンアップします。rivescript-go リポジトリは、RiveScript Test Suite (rsts) プロジェクトのサブモジュールです。 rivescript-go に対してgit clone --recursive
実行しなかった場合は、次のコマンドを使用してサブモジュールをプルできます。
git submodule init
git submodule update
次に、 make test
(またはgo test
) を実行すると、 rsts/ フォルダーから実行されたテストの結果が表示されます。
make linux/amd64
のようなコマンドを実行して、個々のプラットフォーム用のリリースをビルドできます。現在、有効なビルド ターゲットは次のとおりです。
linux/386
およびlinux/amd64
windows/386
およびwindows/amd64
darwin/amd64
make release
を実行して、サポートされているすべてのプラットフォーム用のリリースを自動的にビルドします。
リリースのディレクトリがdist/rivescript-$VERSION-$OS-$ARCH/
に作成され、ビルドされたバイナリ、README.md、Changes.md、およびサンプルが含まれます。このディレクトリは後で検査できます。その内容は自動的に tar 化され (Windows の場合は zip)、git リポジトリのルートに配置されます。
別のシステム用にクロスコンパイルしている場合は、Go が新しいターゲットの標準ライブラリをダウンロードできるように、権限を変更する必要がある場合があります。例:
% sudo mkdir /usr/lib/golang/pkg/windows_386
% chown your_user:your_user /usr/lib/golang/pkg/windows_386
NullStore
が含まれています。他の公式セッションマネージャー (Redis など) もここにあります。 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.
RiveScript の公式 Web サイト、http://www.rivescript.com/