Esta es una biblioteca de intérpretes RiveScript para JavaScript. RiveScript es un lenguaje de programación para chatterbots, que facilita la escritura de pares de activación/respuesta para desarrollar la inteligencia de un bot.
Esta biblioteca se puede utilizar tanto en un navegador web como como módulo de Node. Consulte la carpeta eg/
para ver ejemplos.
RiveScript v2.0.0 viene con una refactorización masiva del código base para implementar funciones modernas de Async/Await en todo momento. La refactorización ahora permite funciones como "almacenar variables de usuario directamente en Redis" o "usar macros asíncronas en condicionales".
Pero necesariamente tenía que romper cierta compatibilidad con versiones anteriores, ¡ligeramente! - al convertir funciones previamente sincrónicas como reply()
en funciones asíncronas que devuelven promesas como lo hizo replyAsync()
.
Consulte el documento Upgrading-v2 para obtener información sobre los cambios y cómo corregir su código para la nueva versión.
Para nodejs y otros motores JavaScript similares, puedes instalar este módulo en tu proyecto a través de npm:
$ npm install rivescript
Para la web puedes usar el unpkg:
< script src =" https://unpkg.com/rivescript@latest/dist/rivescript.min.js " > </ script >
El repositorio git para este proyecto incluye el código fuente ES2015+. Para compilaciones de ES5 dirigidas a navegadores y versiones de Node más antiguas, consulte la pestaña Versiones. La distribución compilada incluye un directorio lib/
con fuentes ES5 para usar con el nodo <= 6, y un directorio dist/
que contiene un script "explorado" que se puede usar en una página web.
Para usarlo en la web, simplemente cargue dist/rivescript.min.js
con una etiqueta <script>
como de costumbre.
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 distribución de RiveScript.js incluye un shell de línea de comandos interactivo llamado riveshell para probar su bot RiveScript. Toma como argumento la ruta (relativa o absoluta) al "cerebro", la carpeta que contiene sus documentos RiveScript (archivos .rive ).
npm install rivescript
), puede iniciar el shell usando npx mientras está en la carpeta de su proyecto. Ejemplo: $ npx riveshell /path/to/brain
npm install -g rivescript
), puede iniciar el shell desde cualquier lugar. Ejemplo: $ riveshell /path/to/brain
shell.js
en la raíz del proyecto, usando node. Ejemplo usando el cerebro predeterminado que viene en la carpeta eg/ : $ node shell.js /eg/brain
Una vez dentro del shell, puedes chatear con el bot usando los archivos RiveScript en ese directorio. Para una depuración sencilla, puede escribir /eval
para ejecutar líneas individuales de código JavaScript. Consulte /help
para obtener más información.
El shell acepta algunos parámetros de línea de comando:
--debug
: habilita el registro de depuración detallado.--watch
: observa la carpeta de respuesta en busca de cambios y recarga automáticamente el bot cuando se modifican los archivos.--utf8
: habilita el modo UTF-8.--case
: habilita mensajes de usuario que distinguen entre mayúsculas y minúsculas. Se genera documentación Markdown y HTML de los módulos en la carpeta de documentos. El módulo principal está en rivescript.
Consulte también el Wiki de la comunidad RiveScript para conocer patrones de diseño comunes, consejos y trucos para RiveScript.
Hay ejemplos disponibles en el directorio eg/ de este proyecto en GitHub que muestran cómo interactuar con un bot RiveScript de diversas maneras, como a través de un navegador web o un servidor telnet, y otros fragmentos de código y trucos útiles.
Para probar y compartir fragmentos de RiveScript que utilizan la implementación de JavaScript, consulte RiveScript Playground.
Es una aplicación web estilo JSFiddle para jugar con RiveScript en su navegador web y compartir código con otros.
https://play.rivescript.com/
La versión 1.0.5 agrega soporte experimental para UTF-8 en documentos RiveScript. Está deshabilitado de forma predeterminada. Habilítelo pasando un valor true
para la opción utf8
en el constructor.
De forma predeterminada (sin el modo UTF-8 activado), los activadores solo pueden contener caracteres ASCII básicos (sin caracteres extranjeros) y el mensaje del usuario carece de todos los caracteres excepto letras, números y espacios. Esto significa que, por ejemplo, no puede capturar la dirección de correo electrónico de un usuario en una respuesta de RiveScript debido a @ y . personajes.
Cuando el modo UTF-8 está habilitado, estas restricciones se eliminan. Los activadores solo se limitan a no contener ciertos metacaracteres como la barra invertida, y el mensaje del usuario solo está libre de barras invertidas y corchetes en ángulo HTML (para protegerlo de XSS obvio si usa RiveScript en una aplicación web). Además, se eliminan los caracteres de puntuación comunes y el conjunto predeterminado es /[.,!?;:]/g
. Esto se puede anular proporcionando un nuevo objeto RegExp
como atributo rs.unicodePunctuation
. Ejemplo:
// 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 ) ;
Las etiquetas <star>
en RiveScript capturarán la entrada "sin procesar" del usuario, por lo que puede escribir respuestas para obtener la dirección de correo electrónico del usuario o almacenar caracteres extranjeros en su nombre.
Hasta ahora, esto solo se ha probado cuando se ejecuta en Node. Cuando se sirve a través de un servidor web, tenga especial cuidado de que su servidor envíe la codificación de contenido correcta con los archivos fuente de RiveScript ( Content-Type: text/plain; charset=utf-8
).
Una advertencia a tener en cuenta en el modo UTF-8 es que los caracteres de puntuación no se eliminan del mensaje de un usuario, por lo que si incluyen comas o signos de exclamación, puede afectar la capacidad de coincidencia de sus activadores ( no debe escribir ningún signo de puntuación explícito). en el lado de su disparador. Los disparadores NO deben contener símbolos como ?
o ,
incluso con el modo UTF-8 habilitado, y si bien eso puede funcionar en este momento, una actualización futura probablemente lo imponga rígidamente).
Utilizo scripts de ejecución npm para manejar varias tareas de compilación.
npm run build
: compila las fuentes de ES2015+ de src/
con Babel y las genera en lib/
npm run test
: compila el código fuente con Babel según lo anterior, compila los scripts de prueba de ES2015+ en test/
y los genera en test.babel/
y luego ejecuta nodeunit
en él.npm run dist
: produce una compilación distribuible completa. La fuente se construye con Babel y luego se pasa a webpack y uglify para compilaciones de navegador.npm run webpack
: crea dist/rivescript.js
a partir de las fuentes de ES2015+ directamente desde src/
(usando babel-loader
). Este comando es independiente de npm run build
y se puede ejecutar sin dejar ningún código ES5 por ahí.npm run uglify
: minimiza dist/rivescript.js
a dist/rivescript.min.js
npm run clean
: limpia todos los archivos de compilación.Si la versión de su nodo local es >= 7 (admite Async/Await), puede ejecutar las fuentes de ES2015+ directamente sin necesidad de ejecutar ningún script npm. Para ello, tengo un Makefile.
make setup
: configura el entorno de desarrollo, instala dependencias, etc.make run
: ejecuta shell.js
apuntando al cerebro de ejemplo. Este script se ejecuta de forma nativa en las fuentes ES2015+, no se necesitan pasos de compilación.make test
: ejecuta nodeunit
en las fuentes de prueba de ES2015+ directamente sin compilarlas como lo haría npm run test
.Me encontré con esto en Fedora 37/nodo 18.7.0; la respuesta del paquete web/webpack#14532 es:
export NODE_OPTIONS=--openssl-legacy-provider
Pasos para el mantenedor de npm de este módulo:
package.json
y src/rivescript.js
Changes.md
npm run dist
para compilar las fuentes de ES5 y ejecutar pruebas unitarias.npm install ../rivescript-js
)npm login
si es la primera vez en un sistema nuevo y npm publish
para publicar el módulo en NPM.rm -rf .git node_modules
para eliminar cruft de la nueva carpeta.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.
El sitio web oficial de RiveScript, http://www.rivescript.com/