Это библиотека-интерпретатор RiveScript, написанная для языка программирования Java. RiveScript — это язык сценариев для чат-ботов, позволяющий легко писать пары триггер/ответ для повышения интеллекта бота.
RiveScript — это язык сценариев для создания чат-ботов. Он имеет очень простой синтаксис, его легко читать и быстро записывать.
Простой пример того, как выглядит RiveScript:
+ hello bot
- Hello human.
Это соответствует сообщению пользователя «Привет, бот» и отвечает «Привет, человек». Или для немного более сложного примера:
+ my name is *
* == => >Wow, we have the same name!
* != undefined => >Did you change your name?
- >Nice to meet you, !
Официальный сайт RiveScript — https://www.rivescript.com/.
Чтобы протестировать RiveScript в своем веб-браузере, попробуйте RiveScript Playground.
Также посетите вики-сайт сообщества RiveScript , где вы найдете распространенные шаблоны проектирования, а также советы и рекомендации по RiveScript.
Добавьте зависимость rivescript-core
в свой проект:
Мейвен :
< dependency >
< groupId >com.rivescript groupId >
< artifactId >rivescript-core artifactId >
< version >0.10.0 version >
dependency >
Градл :
dependencies {
compile " com.rivescript:rivescript-core:0.10.0 "
}
Если вы хотите использовать RiveScript в приложении Spring Boot, см. раздел Spring Boot Starter.
При использовании в качестве библиотеки для написания собственного чат-бота краткий обзор выглядит следующим образом:
import com . rivescript . Config ;
import com . rivescript . RiveScript ;
// Create a new bot with the default settings.
RiveScript bot = new RiveScript ();
// To enable UTF-8 mode, you'd have initialized the bot like:
RiveScript bot = new RiveScript ( Config . utf8 ());
// Load a directory full of RiveScript documents (.rive files)
bot . loadDirectory ( "./replies" );
// Load an individual file.
bot . LoadFile ( "./testsuite.rive" );
// Sort the replies after loading them!
bot . sortReplies ();
// Get a reply.
String reply = bot . reply ( "user" , "Hello bot!" );
Дистрибутив rivescript-core
также включает в себя интерактивную оболочку для тестирования вашего бота RiveScript. Запустите его, указав путь к папке на диске, содержащей ваши документы RiveScript. Пример:
java com.rivescript.cmd.Shell [options]
Конструктор com.rivescript.RiveScript
принимает необязательный экземпляр Config
. Вот полный пример со всеми поддерживаемыми опциями. Вам нужно только указать значения для параметров конфигурации, которые отличаются от значений по умолчанию.
RiveScript bot = new RiveScript ( Config . newBuilder ()
. throwExceptions ( false ) // Whether exception throwing is enabled
. strict ( true ) // Whether strict syntax checking is enabled
. utf8 ( false ) // Whether UTF-8 mode is enabled
. unicodePunctuation ( "[.,!?;:]" ) // The unicode punctuation pattern
. forceCase ( false ) // Whether forcing triggers to lowercase is enabled
. concat ( ConcatMode . NONE ) // The concat mode
. depth ( 50 ) // The recursion depth limit
. sessionManager ( sessionManager ) // The session manager for user variables
. errorMessages ( errors ) // Map of custom error messages
. build ());
Для удобства можно использовать ярлыки:
// The default constructor uses a basic configuration.
RiveScript bot = new RiveScript ();
// This is similar as:
RiveScript bot = new RiveScript ( Config . basic ());
// To use the basic configuration with UTF-8 mode enabled use:
RiveScript bot = new RiveScript ( Config . utf8 ());
Поддержка UTF-8 в RiveScript считается экспериментальной функцией. По умолчанию он отключен.
По умолчанию (без включения режима UTF-8) триггеры могут содержать только основные символы ASCII (без иностранных символов), а сообщение пользователя удаляется из всех символов, кроме букв, цифр и пробелов. Это означает, что, например, вы не можете записать адрес электронной почты пользователя в ответ RiveScript из-за @ и . персонажи.
При включении режима UTF-8 эти ограничения снимаются. Триггеры ограничены только тем, что не содержат определенных метасимволов, таких как обратная косая черта, а сообщение пользователя очищается только от обратной косой черты и угловых скобок HTML (для защиты от очевидного XSS, если вы используете RiveScript в веб-приложении). Кроме того, общие символы пунктуации удаляются, а значением по умолчанию является [.,!?;:]
. Это можно переопределить, предоставив новую строку регулярного выражения методу Config.Builder#unicodePunctuation()
. Пример:
// Make a new bot with UTF-8 mode enabled and override the punctuation
characters that get stripped from the user 's message.
RiveScript bot = new RiveScript ( Config . Builder
. utf8 ()
. unicodePunctuation ( "[.,!?;:]" )
. build ());
Теги
в RiveScript фиксируют «необработанный» ввод пользователя, поэтому вы можете писать ответы, чтобы получить адрес электронной почты пользователя, или сохранять иностранные символы в его имени.
Добавьте зависимость rivescript-spring-boot-starter
в свой проект:
Мейвен :
< dependency >
< groupId >com.rivescript groupId >
< artifactId >rivescript-spring-boot-starter artifactId >
< version >0.10.0 version >
dependency >
Градл :
dependencies {
compile " com.rivescript:rivescript-spring-boot-starter:0.10.0 "
}
Стартер автоматически добавит зависимость rivescript-core
в ваш проект и запустит автоматическую настройку для создания экземпляра бота RiveScript
.
Хотя при автоматической настройке для создания экземпляра бота application.yml
использоваться разумные значения по умолчанию, в файле application.properties
можно указать следующие свойства (или в качестве переключателей командной строки), чтобы настроить поведение автоматической настройки:
rivescript:
enabled: true # Enable RiveScript for the application.
source-path: classpath:/rivescript/ # The comma-separated list of RiveScript source files and/or directories.
file-extensions: .rive, .rs # The comma-separated list of RiveScript file extensions to load.
throw-exceptions: false # Enable throw exceptions.
strict: true # Enable strict syntax checking.
utf8: false # Enable UTF-8 mode.
unicode-punctuation: [.,!?;:] # The unicode punctuation pattern (only used when UTF-8 mode is enabled).
force-case: false # Enable forcing triggers to lowercase.
concat: none # The concat mode (none|newline|space).
depth: 50 # The recursion depth limit.
error-messages: # The custom error message overrides. For instance `rivescript.error-messages.deepRecursion=Custom Deep Recursion Detected Message`
object-handlers: # The comma-separated list of object handler names to register (currently supported: `groovy`, `javascript`, `ruby`).
Чтобы автоматически регистрировать пользовательские функции Java и/или поддерживаемые не по умолчанию обработчики объектов в созданном экземпляре бота RiveScript
, определите соответствующие bean-компоненты в контексте вашего приложения, например:
@ Bean public Map < String , Subroutine > subroutines () { // The key is the name of the Java object macro to register. Map < String , Subroutine > subroutines = new HashMap <>(); subroutines . put ( "subroutine1" , new Subroutine1 ()); subroutines . put ( "subroutine2" , new Subroutine2 ()); return subroutines ; } @ Bean public Map < String , ObjectHandler > objectHandlers () { // The key is the name of the programming language to register. Map < String , ObjectHandler > objectHandlers = new HashMap <>(); objectHandlers . put ( "handler1" , new ObjectHandler1 ()); objectHandlers . put ( "handler2" , new ObjectHandler2 ()); return objectHandlers ; }
Чтобы скомпилировать, протестировать, собрать все jar-файлы и документы, запустите:
./gradlew build
Чтобы установить все jar-файлы в локальный кеш Maven, выполните:
./gradlew install
Папка /samples
содержит различные примеры реализаций ботов Java RiveScript.
rsbot
— RSBot.java
— это простая реализация с использованием com.rivescript.cmd.Shell
.
Эти команды можно использовать в командной строке 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.
Чтобы запустить RSBot
и начать общение с помощью демонстрационного запуска на базе Eliza:
./gradlew :rivescript-samples-rsbot:runBot --console plain
spring-boot-starter-rsbot
— в этом примере используется RiveScript Spring Boot Starter для автоматической настройки экземпляра бота RiveScript
.
Чтобы начать общение с демо-ботом, запустите:
./gradlew :rivescript-samples-spring-boot-starter-rsbot:bootRun --console plain
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.