Dies ist eine RiveScript-Interpreterbibliothek für JavaScript. RiveScript ist eine Skriptsprache für Chatterbots, die es einfach macht, Trigger-/Antwortpaare zum Aufbau der Intelligenz eines Bots zu schreiben.
Diese Bibliothek kann sowohl in einem Webbrowser als auch als Node-Modul verwendet werden. Beispiele finden Sie im Ordner eg/
.
RiveScript v2.0.0 verfügt über eine umfassende Umgestaltung der Codebasis, um durchgehend moderne Async/Await-Funktionen zu implementieren. Der Refactor ermöglicht jetzt Funktionen wie „Benutzervariablen direkt in Redis speichern“ oder „asynchrone Makros in Bedingungen verwenden“
Aber es musste zwangsläufig eine gewisse Abwärtskompatibilität beeinträchtigen – und zwar geringfügig! – indem zuvor synchrone Funktionen wie reply()
in asynchrone Funktionen umgewandelt werden, die Versprechen zurückgeben, wie es replyAsync()
tat.
Informationen zu den Änderungen und zur Korrektur Ihres Codes für die neue Version finden Sie im Dokument „Upgrading-v2“.
Für NodeJS und andere ähnliche JavaScript-Engines können Sie dieses Modul über npm in Ihrem Projekt installieren:
$ npm install rivescript
Für das Web können Sie das unpkg verwenden:
< script src =" https://unpkg.com/rivescript@latest/dist/rivescript.min.js " > </ script >
Das Git-Repository für dieses Projekt enthält ES2015+-Quellcode. Überprüfen Sie für ES5-Builds, die auf ältere Browser und Node-Versionen abzielen, die Registerkarte „Releases“. Die kompilierte Distribution enthält ein lib/
-Verzeichnis mit ES5-Quellen zur Verwendung mit Knoten <= 6 und ein dist/
-Verzeichnis, das ein „browserifiziertes“ Skript enthält, das auf einer Webseite verwendet werden kann.
Um es im Web zu verwenden, laden Sie einfach dist/rivescript.min.js
wie üblich mit einem <script>
-Tag.
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 ) ;
}
Die Distribution von RiveScript.js enthält eine interaktive Befehlszeilen-Shell namens Riveshell zum Testen Ihres RiveScript-Bots. Als Argument wird der Pfad (relativ oder absolut) zum „Gehirn“ verwendet – dem Ordner, der Ihre RiveScript-Dokumente ( .rive- Dateien) enthält.
npm install rivescript
), können Sie die Shell mit npx starten, während Sie sich in Ihrem Projektordner befinden. Beispiel: $ npx riveshell /path/to/brain
npm install -g rivescript
), können Sie die Shell von überall aus starten. Beispiel: $ riveshell /path/to/brain
shell.js
im Stammverzeichnis des Projekts starten. Beispiel für die Verwendung des Standardhirns, das im Ordner „eg/“ enthalten ist: $ node shell.js /eg/brain
Sobald Sie sich in der Shell befinden, können Sie mithilfe der RiveScript-Dateien in diesem Verzeichnis mit dem Bot chatten. Zum einfachen Debuggen können Sie /eval
eingeben, um einzelne Zeilen JavaScript-Code auszuführen. Weitere Informationen finden Sie unter /help
.
Die Shell akzeptiert einige Befehlszeilenparameter:
--debug
: Aktiviert die ausführliche Debug-Protokollierung.--watch
: Überwacht den Antwortordner auf Änderungen und lädt den Bot automatisch neu, wenn Dateien geändert werden.--utf8
: Aktiviert den UTF-8-Modus.--case
: Aktiviert Groß- und Kleinschreibung von Benutzernachrichten. Im Ordner „docs“ befindet sich eine generierte Markdown- und HTML-Dokumentation der Module. Das Hauptmodul befindet sich bei Rivescript.
Schauen Sie sich auch das RiveScript-Community-Wiki an, um gängige Designmuster sowie Tipps und Tricks für RiveScript zu finden.
Im Verzeichnis „eg/“ dieses Projekts auf GitHub sind Beispiele verfügbar, die zeigen, wie man auf verschiedene Weise mit einem RiveScript-Bot interagiert – etwa über einen Webbrowser oder einen Telnet-Server – sowie andere Codeausschnitte und nützliche Tricks.
Informationen zum Testen und Teilen von RiveScript-Snippets, die die JavaScript-Implementierung verwenden, finden Sie im RiveScript Playground.
Es handelt sich um eine Web-App im JSFiddle-Stil zum Spielen mit RiveScript in Ihrem Webbrowser und zum Teilen von Code mit anderen.
https://play.rivescript.com/
Version 1.0.5 fügt experimentelle Unterstützung für UTF-8 in RiveScript-Dokumenten hinzu. Es ist standardmäßig deaktiviert. Aktivieren Sie es, indem Sie im Konstruktor einen true
Wert für die Option utf8
übergeben.
Standardmäßig (ohne aktivierten UTF-8-Modus) dürfen Trigger nur einfache ASCII-Zeichen (keine Fremdzeichen) enthalten und die Nachricht des Benutzers enthält alle Zeichen außer Buchstaben, Zahlen und Leerzeichen. Das bedeutet, dass Sie beispielsweise die E-Mail-Adresse eines Benutzers aufgrund der @ und nicht in einer RiveScript-Antwort erfassen können. Charaktere.
Wenn der UTF-8-Modus aktiviert ist, werden diese Einschränkungen aufgehoben. Trigger dürfen nur bestimmte Metazeichen wie den Backslash nicht enthalten, und die Nachricht des Benutzers wird nur von Backslashes und spitzen HTML-Klammern befreit (zum Schutz vor offensichtlichem XSS, wenn Sie RiveScript in einer Webanwendung verwenden). Darüber hinaus werden gängige Satzzeichen entfernt, wobei der Standardsatz /[.,!?;:]/g
ist. Dies kann überschrieben werden, indem ein neues RegExp
Objekt als rs.unicodePunctuation
Attribut bereitgestellt wird. Beispiel:
// 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 ) ;
Die <star>
-Tags in RiveScript erfassen die „rohen“ Eingaben des Benutzers, sodass Sie Antworten schreiben können, um die E-Mail-Adresse des Benutzers abzurufen oder fremde Zeichen in seinem Namen zu speichern.
Dies wurde bisher nur getestet, wenn es unter Node ausgeführt wurde. Achten Sie bei der Bereitstellung über einen Webserver besonders darauf, dass Ihr Server die richtige Inhaltskodierung mit den RiveScript-Quelldateien sendet ( Content-Type: text/plain; charset=utf-8
).
Eine Einschränkung, auf die Sie im UTF-8-Modus achten sollten, besteht darin, dass Satzzeichen nicht aus der Nachricht eines Benutzers entfernt werden. Wenn sie also Kommas oder Ausrufezeichen enthalten, kann dies die Übereinstimmungsfähigkeit Ihrer Auslöser beeinträchtigen (Sie sollten auf keinen Fall ein explizites Satzzeichen schreiben). auf der Seite Ihres Triggers ,
KEINE Symbole wie ?
Ich verwende npm-Ausführungsskripte, um verschiedene Build-Aufgaben zu erledigen.
npm run build
– Kompiliert die ES2015+-Quellen aus src/
mit Babel und gibt sie in lib/
ausnpm run test
– Erstellt die Quelle mit Babel wie oben beschrieben, erstellt die ES2015+-Testskripte in test/
und gibt sie in test.babel/
aus und führt dann nodeunit
darauf aus.npm run dist
– Erstellt einen vollständig verteilbaren Build. Die Quelle wird mit Babel erstellt und dann für Browser-Builds an Webpack und Uglify übergeben.npm run webpack
– Erstellt dist/rivescript.js
aus den ES2015+-Quellen direkt aus src/
(mit babel-loader
). Dieser Befehl ist unabhängig von npm run build
und kann ausgeführt werden, ohne dass ES5-Code übrig bleibt.npm run uglify
– Minimiert dist/rivescript.js
auf dist/rivescript.min.js
npm run clean
– Bereinigt alle Build-Dateien.Wenn Ihre lokale Knotenversion >= 7 ist (unterstützt Async/Await), können Sie die ES2015+-Quellen direkt ausführen, ohne dass Sie irgendwelche NPM-Skripte ausführen müssen. Zu diesem Zweck habe ich ein Makefile.
make setup
– richtet die Entwicklungsumgebung ein, installiert Abhängigkeiten usw.make run
– führt shell.js
aus, das auf das Beispielhirn zeigt. Dieses Skript läuft nativ auf den ES2015+-Quellen, es sind keine Build-Schritte erforderlich.make test
– führt nodeunit
direkt auf den ES2015+-Testquellen aus, ohne sie zu erstellen, wie dies npm run test
der Fall wäre.Ich bin auf Fedora 37/Knoten 18.7.0 darauf gestoßen; Die Antwort von webpack/webpack#14532 lautet:
export NODE_OPTIONS=--openssl-legacy-provider
Schritte für den NPM-Betreuer dieses Moduls:
package.json
und src/rivescript.js
Changes.md
hinzunpm run dist
aus, um die ES5-Quellen zu erstellen und Komponententests auszuführen.npm install ../rivescript-js
)npm login
, wenn es das erste Mal auf einem neuen System ist, und npm publish
um das Modul in NPM zu veröffentlichen.rm -rf .git node_modules
um Cruft aus dem neuen Ordner zu entfernen.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.
Die offizielle RiveScript-Website, http://www.rivescript.com/