Hubot — одна из самых известных платформ для создания ботов в Интернете, потому что github упростил ее создание. Если вы можете определить свои команды в параметре RegExp, по сути, с Hubot вы сможете делать что угодно. Это большой вклад в культуру ChatOps.
Вдохновленные этим, мы хотели предоставить нашему сообществу такую же простоту в разработке чат-ботов, которые действительно могут обрабатывать естественный язык и выполнять задачи, так же просто, как создание ботов, ориентированных на RegExp.
Итак, мы нашли действительно очаровательный проект, который можно начать с робота Digital Ocean's Heartbot , который принесет вам любовь к вашему любимому чат-клиенту =)
На основе Heartbot мы представили некоторые возможности НЛП от команды NaturalNode — впечатляющую коллекцию библиотек обработки естественного языка, предназначенных для использования в NodeJS.
И вот, волшебство происходит...
Добро пожаловать в HubotNatural , новую захватывающую структуру чат-ботов, основанную на библиотеках Hubot и NaturalNode, с простой и расширяемой архитектурой, разработанной командой HeartBot Digital Ocean и созданной с любовью и заботой командой Rocket.Chat.
Мы надеемся, что вам понравится проект и вы найдете время внести свой вклад.
HubotNatural создан для того, чтобы его было легко тренировать и расширять. Итак, что вам нужно в основном понять, так это то, что у него есть корпус YAML, в котором вы можете проектировать взаимодействие своих чат-ботов, используя только нотацию YAML.
Все взаимодействия YAML, разработанные в корпусе, могут иметь свои собственные параметры, которые будут обрабатываться классом событий.
Классы событий дают возможность расширять HubotNatural. Написав свои собственные классы событий, вы можете дать своему чат-боту навыки взаимодействия с любыми необходимыми вам сервисами.
Файл YAML загружается в scripts/index.js
, анализируется и передается в связывание чат-бота, которое будет находиться в scripts/bot/index.js
, коре бота, где программируются все потоки информации и управление.
Корпус YAML расположен в training_data/corpus.yml
, и его базовая структура выглядит следующим образом:
trust : .85
interactions :
- name : salutation
expect :
- hi there
- hello everyone
- what's up bot
- good morning
answer :
- - Hello there $user, how are you?
- Glad to be here...
- Hey there, nice to see you!
event : respond
Что означает этот синтаксис:
trust
: минимальный уровень уверенности, который должен быть возвращен классификатором для запуска этого взаимодействия. Значение от 0 до 1 (от 0% до 100%). Если классификатор возвращает значение уверенности, меньшее trust
, боты отвечают узлом взаимодействия с ошибкой.interactions
: вектор с множеством узлов взаимодействия, которые будут проанализированы. Каждое взаимодействие, предназначенное для вашего чат-бота, должно находиться в объектной структуре Interaction.node.name
: это уникальное имя взаимодействия, по которому оно будет идентифицировано. Не создавайте более одного взаимодействия с одним и тем же атрибутом node.name
.expect
: это предложения, которые будут даны при обучении ботов. Это могут быть строки или векторы ключевых слов, например ['consume','use']
.answer
: сообщения, которые будут отправлены пользователю, если классификаторы будут классифицированы выше уровня доверия. node.message
будет проанализирован и отправлен классом событий. Чтобы использовать многострочные строки внутри вашего YAML, вы должны следовать синтаксису многострочных строк YAML. Вы можете указать переменные в сообщении. По умолчанию HubotNatural поставляется с переменными $user
, $bot
и $room
.event
: имя CoffeeScript или класса JavaScript внутри scripts/events
без расширения файла.Можно написать классы событий, чтобы расширить навыки чат-бота. Они получают объект взаимодействия и анализируют сообщение следующим образом:
class respond
constructor : (@interaction) ->
process : (msg) =>
sendMessages(stringElseRandomKey(@interaction.answer), msg)
module.exports = respond
Его базовым конструктором является узел @interaction
, поэтому вы можете получить доступ ко всем атрибутам внутри взаимодействия, просто используя @interaction.attribute
. Здесь вы можете парсить тексты, вызывать API, читать файлы, получать доступ к базам данных и все остальное, что вам нужно.
Вы можете использовать функцию stringElseRandomKey
для получения случайного элемента списка, если его параметром является список, и использовать функцию sendMessages
для отправки сообщений пользователю.
Библиотека NaturalNode поставляется с двумя видами классификаторов: наивным байесовским классификатором, известным как BayesClassifier
, и функциями LogisticRegressionClassifier
. По умолчанию HubotNatural использует LogisticRegressionClassifier
. Просто в наших тестах он показал лучшие результаты.
Существует также более одного вида стеммеров. Вам следует установить стеммер для определения вашего языка. По умолчанию мы используем PorterStemmerPt для португальского языка, но вы можете найти английские, русские, итальянские, французские, испанские и другие стеммеры в библиотеках NaturalNode или даже написать свои собственные на их основе.
Просто проверьте внутри node_modules/natural/lib/natural/stemmers/
.
Чтобы изменить язык стеммеров, просто установите переменную среды HUBOT_LANG
как pt
, en
, es
и любое другое языковое завершение, соответствующее файлу стеммера в указанном выше каталоге.
У нас есть Dockerfile, который создает облегченный образ на базе Linux Alpine со всем содержимым репозитория, поэтому вы можете загрузить этот образ в реестр докеров и развернуть оттуда своего чат-бота. Он находится в папке docker
.
Вы также можете использовать файл docker-compose.yml
для загрузки локального экземпляра сервисов Rocket.Chat, MongoDB и HubotNatural, где вы можете изменить параметры, если необходимо.
Файл docker-compose выглядит следующим образом:
version : ' 2 '
services :
rocketchat :
image : rocketchat/rocket.chat:latest
restart : unless-stopped
volumes :
- ./uploads:/app/uploads
environment :
- PORT=3000
- ROOT_URL=http://localhost:3000
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
- MAIL_URL=smtp://smtp.email
# - HTTP_PROXY=http://proxy.domain.com
# - HTTPS_PROXY=http://proxy.domain.com
depends_on :
- mongo
ports :
- 3000:3000
mongo :
image : mongo:3.2
restart : unless-stopped
volumes :
- ./data/db:/data/db
# - ./data/dump:/dump
command : mongod --smallfiles --oplogSize 128 --replSet rs0
mongo-init-replica :
image : mongo:3.2
command : ' mongo mongo/rocketchat --eval "rs.initiate({ _id: '' rs0 '' , members: [ { _id: 0, host: '' localhost:27017 '' } ]})" '
depends_on :
- mongo
hubot-natural :
build : .
restart : unless-stopped
environment :
- HUBOT_ADAPTER=rocketchat
- HUBOT_NAME='Hubot Natural'
- HUBOT_OWNER=RocketChat
- HUBOT_DESCRIPTION='Hubot natural language processing'
- HUBOT_LOG_LEVEL=debug
- HUBOT_CORPUS=corpus.yml
- HUBOT_LANG=pt
- RESPOND_TO_DM=true
- RESPOND_TO_LIVECHAT=true
- RESPOND_TO_EDITED=true
- LISTEN_ON_ALL_PUBLIC=false
- ROCKETCHAT_AUTH=password
- ROCKETCHAT_URL=rocketchat:3000
- ROCKETCHAT_ROOM=GENERAL
- ROCKETCHAT_USER=botnat
- ROCKETCHAT_PASSWORD=botnatpass
- HUBOT_NATURAL_DEBUG_MODE=true
volumes :
- ./scripts:/home/hubotnat/bot/scripts
- ./training_data:/home/hubotnat/bot/training_data
depends_on :
- rocketchat
ports :
- 3001:8080
Вы можете изменить атрибуты переменных и томов в соответствии с вашими конкретными потребностями и запустить docker-compose up
в терминале, чтобы запустить службу RocketChat по адресу http://localhost:3000
. ВНИМАНИЕ: Вы должны помнить, что у Hubot должен быть создан настоящий пользователь RocketChat для входа в систему. Таким образом, при первом запуске вы должны сначала зайти в RocketChat и создать нового пользователя для Hubot, изменить переменные ROCKETCHAT_USER
и ROCKETCHAT_PASSWORD
в файле docker-compose.yml, а затем перезагрузить службы, используя docker-compose stop && docker-compose up
, чтобы начать все сначала.
Если вы хотите запустить только службуhubot-natural для подключения уже работающего экземпляра Rocket.Chat, вам просто нужно не забыть установить для ROCKETCHAT_URL
правильное значение, например https://open.rocket.chat
.
Чтобы правильно использовать Hubot Natural, после запуска команды docker-compose up
необходимо выполнить некоторые шаги по настройке. Для этого есть два основных варианта:
Первый — вручную выполнить действия, описанные в документации по конфигурации бота.
Второй вариант — выполнить скрипт bot_config.py
, расположенный в корневом каталоге проекта. Это автоматически настроит бота на основе следующих переменных, определенных в скрипте: admin_name, admin_password, bot_name
и bot_password
. Важно помнить о том, что значения этих переменных должны быть правильно установлены в соответствии с контекстом. Значения, используемые в bot_name
и bot_password
должны быть такими же, как определены в docker-compose.yml для переменных ROCKETCHAT_USER
и ROCKETCHAT_PASSWORD
соответственно. А значения, определенные в переменных admin_name
и admin_password
должны быть учетными данными уже существующего пользователя в RocketChat, имеющего права администратора.
Чтобы автоматически создать пользователя-администратора, перед выполнением служб просто определите переменные ADMIN_USERNAME
и ADMIN_PASS
для службы RocketChat в docker-compose.yml
.
Чтобы развернуть HubotNatural, сначала вам необходимо установить Hubot-генератор:
npm install -g yo generator-hubot
Затем вы клонируете репозиторий HubotNatural:
git clone https://github.com/RocketChat/hubot-natural.git mybot
Измените «mybot» в приведенной выше команде git clone на любое имя вашего бота и установите двоичные файлы Hubot, не перегружая какие-либо файлы внутри папки:
cd mybot
npm install
yo hubot
_____________________________
/
// | Extracting input for |
//// _____ | self-replication process |
////// /_____ /
======= | [^_/ _ ] | /----------------------------
| | _ | ___@@__ | __
+===+/ /// _
| | _ /// HUBOT/ \
| ___/ / / / \
/ +---+
_ ___/ | |
| // | +===+
/ / | xx |
? Owner Diego < [email protected] >
? Bot name mybot
? Description A simple helpful chatbot for your Company
? Bot adapter rocketchat
create bin/hubot
create bin/hubot.cmd
conflict Procfile
? Overwrite Procfile ? do not overwrite
skip Procfile
conflict README.md
? Overwrite README.md ? do not overwrite
skip README.md
create external-scripts.json
create hubot-scripts.json
conflict .gitignore
? Overwrite .gitignore ? do not overwrite
skip .gitignore
conflict package.json
? Overwrite package.json ? do not overwrite
skip package.json
create scripts/example.coffee
create .editorconfig
Теперь, чтобы запустить чат-бота в оболочке, вам нужно запустить:
bin/hubot
подождите минуту, пока идет процесс загрузки, а затем вы сможете поговорить с mybot.
Обратите внимание на адаптеры для запуска вашего бота на других платформах.
Hubot Natural можно настроить так, чтобы он перенаправлял разговор на реального человека в те моменты, когда бот не может помочь пользователям в той степени, в которой это необходимо. Чтобы активировать и настроить функцию Live Transfer
, выполните действия, описанные в документации по настройке Live Transfer.
В окне терминала запустите:
export HUBOT_ADAPTER=rocketchat
export HUBOT_OWNER=RocketChat
export HUBOT_NAME= ' Bot Name '
export HUBOT_DESCRIPTION= ' Description of your bot '
export ROCKETCHAT_URL=https://open.rocket.chat
export ROCKETCHAT_ROOM=GENERAL
export LISTEN_ON_ALL_PUBLIC=false
export RESPOND_TO_DM=true
export RESPOND_TO_LIVECHAT=true
export ROCKETCHAT_USER=catbot
export ROCKETCHAT_PASSWORD= ' bot password '
export ROCKETCHAT_AUTH=password
export HUBOT_LOG_LEVEL=debug
export HUBOT_CORPUS= ' corpus.yml '
export HUBOT_LANG= ' en '
bin/hubot -a rocketchat --name $HUBOT_NAME
Для получения более подробной информации вы можете проверить проект адаптера Hubot-Rocketchat.
Как разработчики NodeJS, мы полюбили Process Manager PM2 и настоятельно рекомендуем вам его использовать.
npm install pm2 -g
Создайте файл mybot.json
и установите его содержимое следующим образом:
{
"apps" : [{
"name" : " mybot " ,
"interpreter" : " /bin/bash " ,
"watch" : true ,
"ignore_watch" : [ " client/img " ],
"script" : " bin/hubot " ,
"args" : " -a rocketchat " ,
"port" : " 3001 " ,
"env" : {
"ROCKETCHAT_URL" : " https://localhost:3000 " ,
"ROCKETCHAT_ROOM" : " general " ,
"RESPOND_TO_DM" : true ,
"ROCKETCHAT_USER" : " mybot " ,
"ROCKETCHAT_PASSWORD" : " 12345 " ,
"ROCKETCHAT_AUTH" : " password " ,
"HUBOT_LOG_LEVEL" : " debug "
}
}
]
}
Вы также можете создать экземпляр более одного процесса с помощью PM2, если вы хотите, например, запустить более одного экземпляра вашего бота:
{
"apps" : [{
"name" : " mybot.0 " ,
"interpreter" : " /bin/bash " ,
"watch" : true ,
"ignore_watch" : [ " client/img " ],
"script" : " bin/hubot " ,
"args" : " -a rocketchat " ,
"port" : " 3001 " ,
"env" : {
"ROCKETCHAT_URL" : " https://localhost:3000 " ,
"ROCKETCHAT_ROOM" : " general " ,
"RESPOND_TO_DM" : true ,
"ROCKETCHAT_USER" : " mybot " ,
"ROCKETCHAT_PASSWORD" : " 12345 " ,
"ROCKETCHAT_AUTH" : " password " ,
"HUBOT_LOG_LEVEL" : " debug "
}
}, {
"name" : " mybot.1 " ,
"interpreter" : " /bin/bash " ,
"watch" : true ,
"ignore_watch" : [ " client/img " ],
"script" : " bin/hubot " ,
"args" : " -a rocketchat " ,
"port" : " 3002 " ,
"env" : {
"ROCKETCHAT_URL" : " https://mycompany.rocket.chat " ,
"ROCKETCHAT_ROOM" : " general " ,
"RESPOND_TO_DM" : true ,
"ROCKETCHAT_USER" : " mybot " ,
"ROCKETCHAT_PASSWORD" : " 12345 " ,
"ROCKETCHAT_AUTH" : " password " ,
"HUBOT_LOG_LEVEL" : " debug "
}
}
]
}
И, конечно же, вы можете сходить с ума, настраивая конфигурации для разных платформ, таких как Facebook Mensenger, Twitter или Telegram ;P.
Hubot поставляется как минимум с 38 адаптерами, включая, конечно же, адаптер Rocket.Chat.
Чтобы подключиться к вашему экземпляру Rocket.Chat, вы можете установить переменные env, наш файл конфигурации pm2 json.
Для получения дополнительной информации ознакомьтесь с другими адаптерами Hubot.
В Rocket.Chat мы настолько любим то, что делаем, что не можем забыть поблагодарить всех, кто сделал это возможным!
Спасибо, ребята, за этот замечательный фреймворк, Hubots живет в самом сердце Rocket.Chat, и мы рекомендуем всем посетить https://hubot.github.com и узнать гораздо больше о Hubot!
Команде NaturalNode выражаем самое искреннее «СПАСИБО БОЛЬШОЕ! Нам понравился ваш проект, и мы рады внести в него свой вклад!».
Оформите заказ https://github.com/NaturalNode/natural и позвольте себе взорваться!
Мы не можем не поблагодарить Digital Ocean не только за этот прекрасный проект HeartBot, но и за все замечательные учебные пособия и весь вклад в движение OpenSource.
И, наконец, что не менее важно, спасибо нашему большому сообществу участников, тестировщиков, пользователей, партнеров и всех, кто любит Rocket.Chat и сделал все это возможным.