Это библиотека-интерпретатор RiveScript для JavaScript. RiveScript — это язык сценариев для чат-ботов, позволяющий легко писать пары триггер/ответ для повышения интеллекта бота.
Эту библиотеку можно использовать как в веб-браузере, так и в качестве модуля Node. Примеры см. в папке eg/
.
RiveScript v2.0.0 включает масштабный рефакторинг кодовой базы для полной реализации современных функций Async/Await. Рефакторинг теперь позволяет использовать такие функции, как «хранение пользовательских переменных непосредственно в Redis» или «использование асинхронных макросов в условных выражениях».
Но обязательно пришлось нарушить некоторую обратную совместимость — слегка! -- путем превращения ранее синхронных функций, таких как reply()
в асинхронные, которые возвращают промисы, как это сделал replyAsync()
.
См. документ Upgrading-v2 для получения информации об изменениях и о том, как исправить код для новой версии.
Для nodejs и других подобных движков JavaScript вы можете установить этот модуль в свой проект через npm:
$ npm install rivescript
Для Интернета вы можете использовать unpkg:
< script src =" https://unpkg.com/rivescript@latest/dist/rivescript.min.js " > </ script >
Репозиторий git для этого проекта включает исходный код ES2015+. Для сборок ES5, ориентированных на старые браузеры и версии Node, проверьте вкладку «Релизы». Скомпилированный дистрибутив включает каталог lib/
с исходными кодами ES5 для использования с узлом <= 6, а также каталог dist/
содержащий «просматриваемый» скрипт, который можно использовать на веб-странице.
Для использования в Интернете просто загрузите dist/rivescript.min.js
с тегом <script>
, как обычно.
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 ) ;
}
В дистрибутив RiveScript.js входит интерактивная оболочка командной строки под названием riveshell для тестирования вашего бота RiveScript. В качестве аргумента он принимает путь (относительный или абсолютный) к «мозгу» — папке, содержащей ваши документы RiveScript (файлы .rive ).
npm install rivescript
), вы можете запустить оболочку с помощью npx , находясь в папке вашего проекта. Пример: $ npx riveshell /path/to/brain
npm install -g rivescript
), вы можете запустить оболочку откуда угодно. Пример: $ riveshell /path/to/brain
shell.js
в корне проекта, используя node. Пример использования мозга по умолчанию, который находится в папке eg/ : $ node shell.js /eg/brain
Внутри оболочки вы можете общаться с ботом, используя файлы RiveScript в этом каталоге. Для простой отладки вы можете ввести /eval
для запуска отдельных строк кода JavaScript. Дополнительную информацию см. в /help
Оболочка принимает несколько параметров командной строки:
--debug
: включает подробное ведение журнала отладки.--watch
: отслеживать изменения в папке ответов и автоматически перезагружать бота при изменении файлов.--utf8
: включает режим UTF-8.--case
: включить отправку сообщений пользователя с учетом регистра. В папке docs генерируется Markdown и HTML-документация модулей. Основной модуль находится в Rivescript.
Также посетите вики-сайт сообщества RiveScript , где вы найдете распространенные шаблоны проектирования, а также советы и рекомендации по RiveScript.
В каталоге eg/ этого проекта на GitHub доступны примеры, показывающие, как взаимодействовать с ботом RiveScript различными способами, например, через веб-браузер или сервер telnet, а также другие фрагменты кода и полезные приемы.
Чтобы протестировать и поделиться фрагментами RiveScript, использующими реализацию JavaScript, посетите RiveScript Playground.
Это веб-приложение в стиле JSFiddle, позволяющее играть с RiveScript в веб-браузере и делиться кодом с другими.
https://play.rivescript.com/
Версия 1.0.5 добавляет экспериментальную поддержку UTF-8 в документах RiveScript. По умолчанию он отключен. Включите его, передав true
значение для опции utf8
в конструкторе.
По умолчанию (без включения режима UTF-8) триггеры могут содержать только основные символы ASCII (без иностранных символов), а сообщение пользователя удаляется из всех символов, кроме букв, цифр и пробелов. Это означает, что, например, вы не можете записать адрес электронной почты пользователя в ответ RiveScript из-за @ и . персонажи.
При включении режима UTF-8 эти ограничения снимаются. Триггеры ограничены только тем, что не содержат определенных метасимволов, таких как обратная косая черта, а сообщение пользователя очищается только от обратной косой черты и угловых скобок HTML (для защиты от очевидного XSS, если вы используете RiveScript в веб-приложении). Кроме того, общие символы пунктуации удаляются, при этом по умолчанию используется /[.,!?;:]/g
. Это можно переопределить, предоставив новый объект RegExp
в качестве атрибута rs.unicodePunctuation
. Пример:
// 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 ) ;
Теги <star>
в RiveScript фиксируют «необработанный» ввод пользователя, поэтому вы можете писать ответы, чтобы получить адрес электронной почты пользователя, или сохранять иностранные символы в его имени.
До сих пор это тестировалось только при запуске под Node. При обслуживании через веб-сервер обратите особое внимание на то, чтобы ваш сервер отправлял правильную кодировку содержимого с исходными файлами RiveScript ( Content-Type: text/plain; charset=utf-8
).
Одно предостережение, на которое следует обратить внимание в режиме UTF-8, заключается в том, что знаки пунктуации не удаляются из сообщения пользователя, поэтому, если они содержат запятые или восклицательные знаки, это может повлиять на способность сопоставления ваших триггеров (вы абсолютно не должны писать явный знак препинания). на стороне вашего триггера. Триггеры НЕ должны содержать такие символы, как ?
или ,
даже при включенном режиме UTF-8, и хотя это может работать прямо сейчас, будущее обновление, вероятно, будет строго обеспечивать это).
Я использую сценарии запуска npm для выполнения различных задач сборки.
npm run build
— компилирует исходные коды ES2015+ из src/
с помощью Babel и выводит их в lib/
npm run test
— собирает исходный код с помощью Babel, как описано выше, создает тестовые сценарии ES2015+ в test/
и выводит их в test.babel/
, а затем запускает на нем nodeunit
.npm run dist
— создает полную распространяемую сборку. Исходный код собирается с помощью Babel, а затем передается в веб-пакет и преобразуется для сборки браузера.npm run webpack
— создает dist/rivescript.js
из исходников ES2015+ непосредственно из src/
(с помощью babel-loader
). Эта команда не зависит от npm run build
и может быть запущена, не оставляя без внимания какой-либо код ES5.npm run uglify
— минимизирует dist/rivescript.js
до dist/rivescript.min.js
npm run clean
— очистить все файлы сборки.Если ваша локальная версия Node >= 7 (поддерживает Async/Await), вы можете запускать исходные коды ES2015+ напрямую, без необходимости запуска каких-либо сценариев npm. Для этой цели у меня есть Makefile.
make setup
— настраивает среду разработки, устанавливает зависимости и т. д.make run
— запускает shell.js
указанный в примере мозга. Этот сценарий изначально запускается в исходных кодах ES2015+, никаких действий по сборке не требуется.make test
— запускает nodeunit
на исходных кодах тестов ES2015+ напрямую, без их сборки, как это делает npm run test
.Я столкнулся с этим в Fedora 37/узле 18.7.0; ответ из webpack/webpack#14532:
export NODE_OPTIONS=--openssl-legacy-provider
Шаги для сопровождающего npm этого модуля:
package.json
и src/rivescript.js
Changes.md
npm run dist
чтобы собрать исходные коды ES5 и запустить модульные тесты.npm install ../rivescript-js
).npm login
если это первый раз в новой системе, и npm publish
, чтобы опубликовать модуль в NPM.rm -rf .git node_modules
, чтобы удалить мусор из новой папки.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.
Официальный сайт RiveScript http://www.rivescript.com/.