Esta é uma biblioteca interpretadora RiveScript escrita para a linguagem de programação Java. RiveScript é uma linguagem de script para chatterbots, facilitando a escrita de pares de gatilho/resposta para desenvolver a inteligência de um bot.
RiveScript é uma linguagem de script para criação de chatbots. Possui uma sintaxe muito simples e foi projetado para ser fácil de ler e rápido de escrever.
Um exemplo simples da aparência do RiveScript:
+ hello bot - Hello human.
Isso corresponde à mensagem de um usuário “olá bot” e responderia “Olá humano”. Ou para um exemplo um pouco mais 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>!
O site oficial do RiveScript é https://www.rivescript.com/
Para testar o RiveScript em seu navegador, experimente o RiveScript Playground.
Documentação da API: http://www.javadoc.io/doc/com.rivescript/rivescript-core/
Rascunho de trabalho: http://www.rivescript.com/wd/RiveScript
Verifique também o Wiki da comunidade RiveScript para padrões de design comuns e dicas e truques para RiveScript.
Adicione a dependência rivescript-core
ao seu projeto:
Maven :
<dependência> <groupId>com.rivescript</groupId> <artifactId>rivescript-core</artifactId> <versão>0.10.0</versão> </dependency>
Gradil :
dependências { compilar "com.rivescript:rivescript-core:0.10.0"}
Se você quiser usar o RiveScript em um aplicativo Spring Boot, consulte a seção Spring Boot Starter.
Quando usado como biblioteca para escrever seu próprio chatbot, a sinopse é a seguinte:
import com.rivescript.Config;import com.rivescript.RiveScript;// Crie um novo bot com as configurações padrão.RiveScript bot = new RiveScript();// Para ativar o modo UTF-8, você teria inicializado o bot como :RiveScript bot = new RiveScript(Config.utf8());// Carrega um diretório cheio de documentos RiveScript (arquivos .rive)bot.loadDirectory("./replies");// Carrega um indivíduo file.bot.LoadFile("./testsuite.rive");// Classifique as respostas após carregá-las!bot.sortReplies();// Obtenha uma resposta.String respond = bot.reply("user", "Hello bot !");
A distribuição rivescript-core
também inclui um shell interativo para testar seu bot RiveScript. Execute-o com o caminho para uma pasta no disco que contém seus documentos RiveScript. Exemplo:
java com.rivescript.cmd.Shell [options] </path/to/documents>
O construtor com.rivescript.RiveScript
usa uma instância opcional Config
. Aqui está um exemplo completo com todas as opções suportadas. Você só precisa fornecer valores para opções de configuração diferentes dos padrões.
Bot RiveScript = novo RiveScript(Config.newBuilder() .throwExceptions(false) // Se o lançamento de exceção está habilitado.strict(true) // Se a verificação de sintaxe estrita está habilitada.utf8(false) // Se o modo UTF-8 está habilitado.unicodePunctuation("[.,!?;: ]") // O padrão de pontuação unicode.forceCase(false) // Se forçar os gatilhos para letras minúsculas está habilitado.concat(ConcatMode.NONE) // O modo concat.profundidade(50) // O limite de profundidade de recursão .sessionManager(sessionManager) // O gerenciador de sessão para o usuário variáveis.errorMessages(errors) // Mapa de mensagens de erro personalizadas.build());
Por conveniência, você pode usar atalhos:
// O construtor padrão usa uma configuração básica.RiveScript bot = new RiveScript();// Isso é semelhante a:RiveScript bot = new RiveScript(Config.basic());// Para usar a configuração básica com modo UTF-8 uso habilitado: RiveScript bot = new RiveScript(Config.utf8());
O suporte UTF-8 no RiveScript é considerado um recurso experimental. Ele está desabilitado por padrão.
Por padrão (sem o modo UTF-8 ativado), os gatilhos podem conter apenas caracteres ASCII básicos (sem caracteres estrangeiros), e a mensagem do usuário é despojada de todos os caracteres, exceto letras, números e espaços. Isso significa que, por exemplo, você não pode capturar o endereço de e-mail de um usuário em uma resposta do RiveScript, por causa dos caracteres @ e . personagens.
Quando o modo UTF-8 está ativado, essas restrições são suspensas. Os gatilhos são limitados apenas a não conter certos metacaracteres, como a barra invertida, e a mensagem do usuário só é despojada de barras invertidas e colchetes angulares HTML (para proteger contra XSS óbvio se você usar RiveScript em um aplicativo da web). Além disso, os caracteres de pontuação comuns são eliminados, sendo o conjunto padrão [.,!?;:]
. Isso pode ser substituído fornecendo uma nova string regexp ao método Config.Builder#unicodePunctuation()
. Exemplo:
// Crie um novo bot com o modo UTF-8 habilitado e substitua os caracteres de pontuação que são retirados da mensagem do usuário.RiveScript bot = new RiveScript(Config.Builder.utf8() .unicodePunctuation("[.,!?;:]") .construir());
As tags <star>
no RiveScript capturarão a entrada "bruta" do usuário, para que você possa escrever respostas para obter o endereço de e-mail do usuário ou armazenar caracteres estrangeiros em seu nome.
Adicione a dependência rivescript-spring-boot-starter
ao seu projeto:
Maven :
<dependência> <groupId>com.rivescript</groupId> <artifactId>rivescript-spring-boot-starter</artifactId> <versão>0.10.0</versão> </dependency>
Gradil :
dependências { compilar "com.rivescript:rivescript-spring-boot-starter:0.10.0"}
O starter adicionará automaticamente a dependência rivescript-core
ao seu projeto e acionará a configuração automática para criar a instância do bot RiveScript
.
Embora a configuração automática use padrões sensatos para criar a instância do bot, as seguintes propriedades podem ser especificadas dentro do seu arquivo application.properties
/ application.yml
(ou como opções de linha de comando) para personalizar o comportamento da configuração automática:
rivescript: enabled: true # Habilita o RiveScript para a aplicação. source-path: classpath:/rivescript/ # A lista separada por vírgulas de arquivos e/ou diretórios de origem do RiveScript. extensões de arquivo: .rive, .rs # A lista separada por vírgulas de extensões de arquivo RiveScript a serem carregadas. throw-exceptions: false # Habilita exceções de lançamento. strict: true # Ativa a verificação estrita de sintaxe. utf8: false # Ativa o modo UTF-8. unicode-punctuation: [.,!?;:] # O padrão de pontuação unicode (usado apenas quando o modo UTF-8 está ativado). force-case: false # Habilita forçar gatilhos para letras minúsculas. concat: none # O modo concat (none|newline|space). profundidade: 50 # O limite de profundidade da recursão. mensagens de erro: # A mensagem de erro personalizada é substituída. Por exemplo `rivescript.error-messages.deepRecursion=Mensagem personalizada de detecção de recursão profunda` manipuladores de objetos: # A lista separada por vírgulas de nomes de manipuladores de objetos a serem registrados (atualmente suportados: `groovy`, `javascript`, `ruby`).
Para registrar automaticamente sub-rotinas Java personalizadas e/ou manipuladores de objetos não padrão suportados na instância de bot RiveScript
criada, defina beans apropriados no contexto do seu aplicativo, como:
@Beanpublic Map<String, Subroutine> subroutines() {// A chave é o nome da macro do objeto Java para registrar.Map<String, Subroutine> subroutines = new HashMap<>();subroutines.put("subroutine1", new Subroutine1());subroutines.put("subroutine2", new Subroutine2());return subrotinas; }@Beanpublic Map<String, ObjectHandler> objectHandlers() {// A chave é o nome da linguagem de programação a ser registrada.Map<String, ObjectHandler> objectHandlers = new HashMap<>();objectHandlers.put("handler1", new ObjectHandler1());objectHandlers.put("handler2", new ObjectHandler2());return objectHandlers; }
Para compilar, testar e construir todos os jars e documentos, execute:
./gradlew build
Para instalar todos os jars em seu cache local do Maven, execute:
./gradlew install
A pasta /samples
contém vários exemplos de implementações de bot Java RiveScript.
rsbot
- O RSBot.java
é uma implementação simples usando o com.rivescript.cmd.Shell
.
Estes comandos podem ser usados no prompt de entrada no 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 executar RSBot
para começar a conversar com a execução de demonstração baseada em Eliza:
./gradlew :rivescript-samples-rsbot:runBot --console plain
spring-boot-starter-rsbot
- Este exemplo usa o RiveScript Spring Boot Starter para configurar automaticamente a instância do bot RiveScript
.
Para começar a conversar com o bot de demonstração, execute:
./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.