これは、JavaScript 用の RiveScript インタプリタ ライブラリです。 RiveScript はチャタボット用のスクリプト言語であり、ボットのインテリジェンスを構築するためのトリガーと応答のペアを簡単に作成できます。
このライブラリは、Web ブラウザーまたは Node モジュールの両方で使用できます。例については、 eg/
フォルダーを参照してください。
RiveScript v2.0.0 には、最新の Async/Await 機能を全体的に実装するためのコードベースの大規模なリファクタリングが付属しています。リファクタリングにより、「ユーザー変数を Redis に直接保存」や「条件文での非同期マクロの使用」などの機能が可能になりました。
しかし、必然的に、下位互換性をわずかに壊す必要がありました。 -- reply()
のような以前の同期関数を、 replyAsync()
のように Promise を返す非同期関数に変えることによって。
変更点と新しいバージョンに合わせてコードを修正する方法については、「v2 のアップグレード」ドキュメントを参照してください。
Nodejs および他の同様の JavaScript エンジンの場合は、npm を通じてこのモジュールをプロジェクトにインストールできます。
$ npm install rivescript
Web の場合は、unpkg を使用できます。
< script src =" https://unpkg.com/rivescript@latest/dist/rivescript.min.js " > script >
このプロジェクトの git リポジトリには、ES2015+ ソース コードが含まれています。古いブラウザとノード バージョンを対象とする ES5 ビルドについては、[リリース] タブを確認してください。コンパイルされたディストリビューションには、ノード 6 以下で使用する ES5 ソースを含むlib/
ディレクトリと、Web ページで使用できる「ブラウザ化された」スクリプトを含むdist/
ディレクトリが含まれます。
Web 上で使用するには、通常どおりタグを付けて
dist/rivescript.min.js
読み込むだけです。
var bot = new RiveScript ( ) ;
// Load a directory full of RiveScript documents (.rive files). This is for
// Node.JS only: it doesn't work on the web!
bot . loadDirectory ( "brain" ) . then ( loading_done ) . catch ( loading_error ) ;
// Load an individual file.
bot . loadFile ( "brain/testsuite.rive" ) . then ( loading_done ) . catch ( loading_error ) ;
// Load a list of files all at once (the best alternative to loadDirectory
// for the web!)
bot . loadFile ( [
"brain/begin.rive" ,
"brain/admin.rive" ,
"brain/clients.rive"
] ) . then ( loading_done ) . catch ( loading_error ) ;
// All file loading operations are asynchronous, so you need handlers
// to catch when they've finished. If you use loadDirectory (or loadFile
// with multiple file names), the success function is called only when ALL
// the files have finished loading.
function loading_done ( ) {
console . log ( "Bot has finished loading!" ) ;
// Now the replies must be sorted!
bot . sortReplies ( ) ;
// And now we're free to get a reply from the brain!
// RiveScript remembers user data by their username and can tell
// multiple users apart.
let username = "local-user" ;
// NOTE: the API has changed in v2.0.0 and returns a Promise now.
bot . reply ( username , "Hello, bot!" ) . then ( function ( reply ) {
console . log ( "The bot says: " + reply ) ;
} ) ;
}
// It's good to catch errors too!
function loading_error ( error , filename , lineno ) {
console . log ( "Error when loading files: " + error ) ;
}
RiveScript.js のディストリビューションには、RiveScript ボットをテストするためのriveshellと呼ばれる対話型コマンドライン シェルが含まれています。引数として、「脳」へのパス (相対または絶対)、つまり RiveScript ドキュメント ( .riveファイル) を含むフォルダーを受け取ります。
npm install rivescript
を使用)、プロジェクト フォルダー内でnpx を使用してシェルを起動できます。例: $ npx riveshell /path/to/brain
npm install -g rivescript
を使用)、どこからでもシェルを起動できます。例: $ riveshell /path/to/brain
shell.js
からシェルを直接起動できます。 eg/フォルダーにあるデフォルトの Brain を使用した例: $ node shell.js /eg/brain
シェルに入ると、そのディレクトリ内の RiveScript ファイルを使用してボットとチャットできます。簡単なデバッグの場合は、 /eval
と入力して 1 行の JavaScript コードを実行できます。詳細については、 /help
参照してください。
シェルはいくつかのコマンド ライン パラメーターを受け入れます。
--debug
: 詳細なデバッグ ログを有効にします。--watch
: 応答フォルダーの変更を監視し、ファイルが変更されたときにボットを自動的にリロードします。--utf8
: UTF-8 モードを有効にします。--case
: 大文字と小文字を区別するユーザー メッセージを有効にします。 docs フォルダーには、モジュールの Markdown および HTML ドキュメントが生成されます。メインモジュールは rivscript にあります。
RiveScript の一般的なデザイン パターンやヒントとテクニックについては、 RiveScript コミュニティ Wikiもチェックしてください。
GitHub 上のこのプロジェクトの eg/ ディレクトリには、Web ブラウザや Telnet サーバーなど、さまざまな方法で RiveScript ボットとインターフェースする方法や、その他のコード スニペットや便利なトリックを示す例が用意されています。
JavaScript 実装を使用する RiveScript スニペットのテストと共有については、RiveScript Playground を確認してください。
これは、Web ブラウザーで RiveScript を操作したり、他のユーザーとコードを共有したりするための JSFiddle スタイルの Web アプリです。
https://play.rivescript.com/
バージョン 1.0.5 では、RiveScript ドキュメントに UTF-8 の実験的なサポートが追加されています。デフォルトでは無効になっています。コンストラクターのutf8
オプションにtrue
値を渡すことで、これを有効にします。
デフォルト (UTF-8 モードをオンにしていない場合) では、トリガーには基本的な ASCII 文字のみを含めることができ (外国文字は不可)、ユーザーのメッセージからは文字、数字、スペースを除くすべての文字が削除されます。これは、たとえば、@ と . が原因で、RiveScript 応答でユーザーの電子メール アドレスを取得できないことを意味します。文字。
UTF-8 モードを有効にすると、これらの制限が解除されます。トリガーにはバックスラッシュなどの特定のメタキャラクターが含まれないように制限されており、ユーザーのメッセージからはバックスラッシュと HTML 山かっこのみが削除されます (Web アプリケーションで RiveScript を使用する場合に明らかな XSS から保護するため)。さらに、一般的な句読点文字は削除され、デフォルトの設定は/[.,!?;:]/g
になります。これは、新しいRegExp
オブジェクトをrs.unicodePunctuation
属性として指定することでオーバーライドできます。例:
// Make a new bot with UTF-8 mode enabled.
var bot = new RiveScript ( { utf8 : true } ) ;
// Override the punctuation characters that get stripped from the
// user's message.
bot . unicodePunctuation = new RegExp ( / [.,!?;:] / g ) ;
RiveScript の
タグはユーザーの「生の」入力をキャプチャするため、返信を書いてユーザーの電子メール アドレスを取得したり、ユーザーの名前に外国文字を保存したりできます。
これは今のところ、Node.js で実行する場合にのみテストされています。 Web サーバー経由で提供する場合は、サーバーが RiveScript ソース ファイル ( Content-Type: text/plain; charset=utf-8
) とともに正しいコンテンツ エンコーディングを送信するように特に注意してください。
UTF-8 モードで注意すべき点の 1 つは、句読点文字はユーザーのメッセージから削除されないため、句読点文字にカンマや感嘆符が含まれている場合、トリガーのマッチング機能に影響を与える可能性があることです (明示的な句読点は絶対に記述しないでください)トリガー側では、UTF-8 モードが有効になっている場合でも、トリガーに?
や のような記号を含めることはできません,
現時点では機能する可能性がありますが、将来のアップデートではこれが厳密に強制される可能性があります)。
私は npm run スクリプトを使用してさまざまなビルドタスクを処理します。
npm run build
- Babel を使用してsrc/
から ES2015+ ソースをコンパイルし、 lib/
に出力します。npm run test
- 上記に従って Babel を使用してソースを構築し、 test/
で ES2015+ テスト スクリプトを構築し、それらをtest.babel/
に出力して、その上でnodeunit
実行します。npm run dist
- 完全な配布可能なビルドを生成します。ソースは Babel でビルドされ、ブラウザー ビルド用に webpack と uglify に渡されます。npm run webpack
- ES2015+ ソースからsrc/
から直接dist/rivescript.js
作成します ( babel-loader
を使用)。このコマンドはnpm run build
から独立しており、ES5 コードを残さずに実行できます。npm run uglify
- dist/rivescript.js
dist/rivescript.min.js
に縮小しますnpm run clean
- すべてのビルド ファイルをクリーンアップします。ローカル ノードのバージョンが 7 以上 (Async/Await をサポート) の場合、npm スクリプトを実行する必要なく、ES2015+ ソースを直接実行できます。そのために、Makefile を用意しました。
make setup
- 開発環境をセットアップし、依存関係をインストールします。make run
- サンプルブレインで指定されたshell.js
実行します。このスクリプトは ES2015+ ソース上でネイティブに実行され、ビルド手順は必要ありません。make test
- npm run test
のようにnodeunit
をビルドせずに、ES2015+ テスト ソース上で直接実行します。Fedora 37/ノード 18.7.0 でこれに遭遇しました。 webpack/webpack#14532 からの答えは次のとおりです。
export NODE_OPTIONS=--openssl-legacy-provider
このモジュールの npm メンテナの手順:
package.json
とsrc/rivescript.js
のバージョン番号をインクリメントします。Changes.md
に追加するnpm run dist
実行して ES5 ソースをビルドし、単体テストを実行します。npm install ../rivescript-js
)npm login
、モジュールを NPM に公開するにはnpm publish
使用します。rm -rf .git node_modules
実行して、新しいフォルダーから cruft を削除します。zip -r rivescript-js-VERSION.zip rivescript-js
tar -czvf rivescript-js-VERSION.tar.gz rivescript-js
The MIT License (MIT)
Copyright (c) 2020 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/