Esta es una biblioteca de intérpretes RiveScript escrita para el lenguaje de programación Java. 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.
RiveScript es un lenguaje de programación para crear chatbots. Tiene una sintaxis muy simple y está diseñado para ser fácil de leer y rápido de escribir.
Un ejemplo sencillo de cómo se ve RiveScript:
+ hello bot - Hello human.
Esto coincide con el mensaje de un usuario de "hola robot" y respondería "Hola humano". O para un ejemplo un poco más complicado:
+ 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>!
El sitio web oficial de RiveScript es https://www.rivescript.com/
Para probar RiveScript en su navegador web, pruebe RiveScript Playground.
Documentación API: http://www.javadoc.io/doc/com.rivescript/rivescript-core/
Borrador de trabajo: http://www.rivescript.com/wd/RiveScript
Consulte también el Wiki de la comunidad RiveScript para conocer patrones de diseño comunes, consejos y trucos para RiveScript.
Agregue la dependencia rivescript-core
a su proyecto:
experto :
<dependencia> <groupId>com.rivescript</groupId> <artifactId>rivescript-core</artifactId> <versión>0.10.0</versión> </dependencia>
Gradle :
dependencias { compilar "com.rivescript:rivescript-core:0.10.0"}
Si desea utilizar RiveScript en una aplicación Spring Boot, consulte la sección Spring Boot Starter.
Cuando se utiliza como biblioteca para escribir su propio chatbot, la sinopsis es la siguiente:
import com.rivescript.Config;import com.rivescript.RiveScript;// Crea un nuevo bot con la configuración predeterminada.RiveScript bot = new RiveScript();// Para habilitar el modo UTF-8, habrías inicializado el bot como :RiveScript bot = new RiveScript(Config.utf8());// Cargar un directorio lleno de documentos RiveScript (archivos .rive)bot.loadDirectory("./replies");// Cargar un archivo individual.bot.LoadFile("./testsuite.rive");// ¡Ordena las respuestas después de cargarlas!bot.sortReplies();// Obtén una respuesta.String respuesta = bot.reply("usuario", " ¡Hola robot!");
La distribución rivescript-core
también incluye un shell interactivo para probar su bot RiveScript. Ejecútelo con la ruta a una carpeta en el disco que contenga sus documentos RiveScript. Ejemplo:
java com.rivescript.cmd.Shell [options] </path/to/documents>
El constructor com.rivescript.RiveScript
toma una instancia Config
opcional. Aquí hay un ejemplo completo con todas las opciones admitidas. Solo necesita proporcionar valores para las opciones de configuración que sean diferentes a los predeterminados.
Bot RiveScript = nuevo RiveScript(Config.newBuilder() .throwExceptions(false) // Si el lanzamiento de excepciones está habilitado.strict(true) // Si está habilitada la verificación de sintaxis estricta.utf8(false) // Si el modo UTF-8 está habilitado.unicodePunctuation("[.,!?;: ]") // El patrón de puntuación Unicode.forceCase(false) // Si está habilitado forzar los activadores a minúsculas.concat(ConcatMode.NONE) // El concat mode. Depth(50) // El límite de profundidad de recursión .sessionManager(sessionManager) // El administrador de sesión para variables de usuario.errorMessages(errors) // Mapa de mensajes de error personalizados.build());
Para mayor comodidad, puede utilizar atajos:
// El constructor predeterminado usa una configuración básica. RiveScript bot = new RiveScript();// Esto es similar a: RiveScript bot = new RiveScript(Config.basic());// Para usar la configuración básica con el modo UTF-8 uso habilitado: bot RiveScript = new RiveScript(Config.utf8());
La compatibilidad con UTF-8 en RiveScript se considera una característica experimental. Está deshabilitado de forma predeterminada.
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 [.,!?;:]
. Esto se puede anular proporcionando una nueva cadena de expresión regular al método Config.Builder#unicodePunctuation()
. Ejemplo:
// Crea un nuevo bot con el modo UTF-8 habilitado y anula los caracteres de puntuación que se eliminan del mensaje del usuario. RiveScript bot = new RiveScript(Config.Builder.utf8() .unicodePunctuation("[.,!?;:]") .construir());
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.
Agregue la dependencia rivescript-spring-boot-starter
a su proyecto:
experto :
<dependencia> <groupId>com.rivescript</groupId> <artifactId>rivescript-spring-boot-starter</artifactId> <versión>0.10.0</versión> </dependencia>
Gradle :
dependencias { compilar "com.rivescript:rivescript-spring-boot-starter:0.10.0"}
El iniciador agregará automáticamente la dependencia rivescript-core
a su proyecto y activará la configuración automática para crear la instancia del bot RiveScript
.
Aunque la configuración automática utilizará valores predeterminados razonables para crear la instancia del bot, se pueden especificar las siguientes propiedades dentro de su archivo application.properties
/ application.yml
(o como modificadores de línea de comando) para personalizar el comportamiento de la configuración automática:
remachado: habilitado: verdadero # Habilite RiveScript para la aplicación. source-path: classpath:/rivescript/ # La lista separada por comas de archivos y/o directorios fuente de RiveScript. extensiones de archivo: .rive, .rs # La lista separada por comas de extensiones de archivo RiveScript para cargar. throw-exceptions: false # Habilitar excepciones de lanzamiento. estricto: verdadero # Habilitar la verificación estricta de sintaxis. utf8: false # Habilita el modo UTF-8. puntuación unicode: [.,!?;:] # El patrón de puntuación Unicode (solo se usa cuando el modo UTF-8 está habilitado). force-case: false # Habilitar forzar activadores a minúsculas. concat: none # El modo concat (ninguno|nueva línea|espacio). profundidad: 50 # El límite de profundidad de recursión. mensajes de error: # El mensaje de error personalizado se anula. Por ejemplo, `rivescript.error-messages.deepRecursion=Mensaje personalizado de recursión profunda detectada` manejadores de objetos: # La lista separada por comas de nombres de manejadores de objetos para registrar (actualmente compatible: `groovy`, `javascript`, `ruby`).
Para registrar automáticamente subrutinas Java personalizadas y/o controladores de objetos compatibles no predeterminados en la instancia del bot RiveScript
creada, defina los beans apropiados en el contexto de su aplicación, como:
@Beanpublic Map<String, Subroutine> subrutinas() {// La clave es el nombre de la macro del objeto Java a registrar.Map<String, Subroutine> subrutinas = new HashMap<>();subroutines.put("subrutina1", nueva Subrutina1());subrutinas.put("subrutina2", nueva Subrutina2());devolver subrutinas; }@Beanpublic Map<String, ObjectHandler> objectHandlers() {// La clave es el nombre del lenguaje de programación a registrar.Map<String, ObjectHandler> objectHandlers = new HashMap<>();objectHandlers.put("handler1", new ObjectHandler1());objectHandlers.put("handler2", new ObjectHandler2());return objectHandlers; }
Para compilar, probar y compilar todos los archivos jar y documentos, ejecute:
./gradlew build
Para instalar todos los archivos jar en su caché local de Maven, ejecute:
./gradlew install
La carpeta /samples
contiene varios ejemplos de implementaciones de bots Java RiveScript.
rsbot
: RSBot.java
es una implementación simple que utiliza com.rivescript.cmd.Shell
.
Estos comandos se pueden usar en el indicador de entrada en RSBot:
/quit - Quit the program /dump topics - Dump the internal topic/trigger/reply struct (debugging) /dump sorted - Dump the internal trigger sort buffers (debugging) /last - Print the last trigger you matched.
Para ejecutar RSBot
y comenzar a chatear con la demostración basada en Eliza:
./gradlew :rivescript-samples-rsbot:runBot --console plain
spring-boot-starter-rsbot
: este ejemplo utiliza RiveScript Spring Boot Starter para configurar automáticamente la instancia del bot RiveScript
.
Para comenzar a chatear con el bot de demostración, ejecute:
./gradlew :rivescript-samples-spring-boot-starter-rsbot:bootRun --console plain
Noah Petherbridge, https://www.kirsle.net/
Marcel Overdijk, https://twitter.com/marceloverdijk
The MIT License (MIT) Copyright (c) 2016 the original author or authors. 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.