Il s'agit d'une bibliothèque d'interpréteur RiveScript pour JavaScript. RiveScript est un langage de script pour les chaterbots, facilitant l'écriture de paires déclencheur/réponse pour développer l'intelligence d'un bot.
Cette bibliothèque peut être utilisée à la fois dans un navigateur Web ou en tant que module Node. Voir le dossier eg/
pour des exemples.
RiveScript v2.0.0 est livré avec une refactorisation massive de la base de code pour implémenter les fonctionnalités Async/Await modernes partout. Le refactor permet désormais des fonctionnalités telles que « le stockage des variables utilisateur directement dans Redis » ou « l'utilisation de macros asynchrones dans les conditions »
Mais il a nécessairement fallu rompre légèrement la rétrocompatibilité ! -- en transformant des fonctions précédemment synchrones comme reply()
en fonctions asynchrones qui renvoient des promesses comme l'a fait replyAsync()
.
Consultez le document Mise à niveau-v2 pour plus d'informations sur les modifications et comment corriger votre code pour la nouvelle version.
Pour nodejs et autres moteurs JavaScript similaires, vous pouvez installer ce module dans votre projet via npm :
$ npm install rivescript
Pour le Web, vous pouvez utiliser le unpkg :
< script src =" https://unpkg.com/rivescript@latest/dist/rivescript.min.js " > </ script >
Le référentiel git de ce projet inclut le code source ES2015+. Pour les versions ES5 ciblant les anciens navigateurs et les versions de Node, consultez l'onglet Versions. La distribution compilée comprend un répertoire lib/
avec les sources ES5 à utiliser avec le nœud <= 6, et un répertoire dist/
contenant un script « navigable » qui peut être utilisé sur une page Web.
Pour l'utiliser sur le Web, chargez simplement dist/rivescript.min.js
avec une balise <script>
comme d'habitude.
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 ) ;
}
La distribution de RiveScript.js comprend un shell de ligne de commande interactif appelé riveshell pour tester votre bot RiveScript. Il prend comme argument le chemin (relatif ou absolu) vers le "cerveau" - le dossier qui contient vos documents RiveScript (fichiers .rive ).
npm install rivescript
), vous pouvez démarrer le shell en utilisant npx dans votre dossier de projet. Exemple: $ npx riveshell /path/to/brain
npm install -g rivescript
), vous pouvez démarrer le shell depuis n'importe où. Exemple: $ riveshell /path/to/brain
shell.js
à la racine du projet, en utilisant node. Exemple utilisant le cerveau par défaut fourni dans le dossier eg/ : $ node shell.js /eg/brain
Une fois à l'intérieur du shell, vous pouvez discuter avec le bot en utilisant les fichiers RiveScript de ce répertoire. Pour un débogage simple, vous pouvez taper /eval
pour exécuter une seule ligne de code JavaScript. Voir /help
pour en savoir plus.
Le shell accepte quelques paramètres de ligne de commande :
--debug
: active la journalisation détaillée du débogage.--watch
: surveille le dossier de réponses pour les modifications et recharge automatiquement le bot lorsque les fichiers sont modifiés.--utf8
: active le mode UTF-8.--case
: active les messages utilisateur sensibles à la casse. Une documentation Markdown et HTML est générée pour les modules dans le dossier docs. Le module principal est chez rivescript.
Consultez également le wiki de la communauté RiveScript pour connaître les modèles de conception courants ainsi que les trucs et astuces pour RiveScript.
Il existe des exemples disponibles dans le répertoire eg/ de ce projet sur GitHub qui montrent comment s'interfacer avec un robot RiveScript de diverses manières, par exemple via un navigateur Web ou un serveur telnet, ainsi que d'autres extraits de code et astuces utiles.
Pour tester et partager des extraits RiveScript qui utilisent l'implémentation JavaScript, consultez RiveScript Playground.
Il s'agit d'une application Web de style JSFiddle pour jouer avec RiveScript dans votre navigateur Web et partager du code avec d'autres.
https://play.rivescript.com/
La version 1.0.5 ajoute la prise en charge expérimentale d'UTF-8 dans les documents RiveScript. Il est désactivé par défaut. Activez-le en passant une valeur true
pour l'option utf8
dans le constructeur.
Par défaut (sans le mode UTF-8 activé), les déclencheurs ne peuvent contenir que des caractères ASCII de base (pas de caractères étrangers) et le message de l'utilisateur est dépourvu de tous les caractères à l'exception des lettres, des chiffres et des espaces. Cela signifie que, par exemple, vous ne pouvez pas capturer l'adresse e-mail d'un utilisateur dans une réponse RiveScript, à cause des @ et . personnages.
Lorsque le mode UTF-8 est activé, ces restrictions sont levées. Les déclencheurs sont uniquement limités à ne pas contenir certains métacaractères comme la barre oblique inverse, et le message de l'utilisateur est uniquement dépourvu de barres obliques inverses et de crochets HTML (pour se protéger des XSS évidents si vous utilisez RiveScript dans une application Web). De plus, les caractères de ponctuation courants sont supprimés, le jeu par défaut étant /[.,!?;:]/g
. Cela peut être remplacé en fournissant un nouvel objet RegExp
comme attribut rs.unicodePunctuation
. Exemple:
// 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 ) ;
Les balises <star>
dans RiveScript captureront l'entrée « brute » de l'utilisateur, afin que vous puissiez écrire des réponses pour obtenir l'adresse e-mail de l'utilisateur ou stocker des caractères étrangers dans son nom.
Jusqu'à présent, cela n'a été testé que lorsqu'il est exécuté sous Node. Lorsqu'il est servi via un serveur Web, veillez particulièrement à ce que votre serveur envoie le bon codage de contenu avec les fichiers source RiveScript ( Content-Type: text/plain; charset=utf-8
).
Une mise en garde à surveiller en mode UTF-8 est que les caractères de ponctuation ne sont pas supprimés du message d'un utilisateur. Par conséquent, s'ils incluent des virgules ou des points d'exclamation, cela peut avoir un impact sur la capacité de correspondance de vos déclencheurs (vous ne devez absolument pas écrire de signe de ponctuation explicite). du côté de votre déclencheur. Les déclencheurs ne doivent PAS contenir de symboles comme ?
ou ,
même avec le mode UTF-8 activé, et même si cela peut fonctionner pour le moment, une future mise à jour appliquera probablement cela de manière rigide).
J'utilise des scripts d'exécution npm pour gérer diverses tâches de construction.
npm run build
- Compile les sources ES2015+ de src/
avec Babel et les affiche dans lib/
npm run test
- Construit la source avec Babel comme ci-dessus, construit les scripts de test ES2015+ dans test/
et les affiche dans test.babel/
, puis exécute nodeunit
dessus.npm run dist
- Produit une version distribuable complète. La source est construite avec Babel, puis transmise à webpack et uglify pour les versions de navigateur.npm run webpack
- Crée dist/rivescript.js
à partir des sources ES2015+ directement à partir de src/
(en utilisant babel-loader
). Cette commande est indépendante de npm run build
et peut être exécutée sans laisser de code ES5.npm run uglify
- Réduit dist/rivescript.js
en dist/rivescript.min.js
npm run clean
- Nettoie tous les fichiers de build.Si la version de votre nœud local est >= 7 (prend en charge Async/Await), vous pouvez exécuter les sources ES2015+ directement sans avoir besoin d'exécuter de scripts npm. Pour cela, j'ai un Makefile.
make setup
- configure l'environnement de développement, installe les dépendances, etc.make run
- exécute shell.js
pointé vers l'exemple de cerveau. Ce script s'exécute nativement sur les sources ES2015+, aucune étape de build n'est nécessaire.make test
- exécute nodeunit
sur les sources de test ES2015+ directement sans les construire comme le ferait npm run test
.J'ai rencontré cela sur Fedora 37/node 18.7.0 ; la réponse de webpack/webpack#14532 est la suivante :
export NODE_OPTIONS=--openssl-legacy-provider
Étapes pour le responsable npm de ce module :
package.json
et src/rivescript.js
Changes.md
npm run dist
pour créer les sources ES5 et exécuter des tests unitaires.npm install ../rivescript-js
)npm login
si c'est la première fois sur un nouveau système, et npm publish
pour publier le module sur NPM.rm -rf .git node_modules
pour supprimer Cruft du nouveau dossier.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.
Le site officiel de RiveScript, http://www.rivescript.com/