Простая платформа чат-бота, написанная на Go, с конфигурациями в YAML. Целью этого проекта является создание очень простых текстовых чат-ботов с использованием нескольких файлов конфигурации.
Источником вдохновения для этого проекта послужил Flottbot и мой опыт использования Rasa.
Установка
Документация
Ваш первый бот
Файл clf.yml
Файл fsm.yml
Запустите своего бота
Взаимодействуйте со своим ботом
Использование
интерфейс командной строки
Докер Составление
Кубернетес
Импорт
Примеры
go get -u github.com/jaimeteb/chatto
Через Докер:
docker pull jaimeteb/chatto:latest
См. примеры , руководства по настройке и справочную информацию в документации .
Chatto сочетает в себе согласованность конечного автомата с гибкостью машинного обучения. Он состоит из трех основных компонентов: классификатора, конечного автомата и расширений.
Самая базовая структура каталогов Chatto будет следующей:
. └──data ├── clf.yml └── fsm.yml
Начните с создания каталога data
, а также файлов YAML.
mkdir datatouch data/clf.yml data/fsm.yml
Файл clf.yml определяет, как пользовательские сообщения будут классифицироваться по командам (намерениям). Начните с этой очень простой конфигурации:
классификация: - команда: "turn_on"текст: - «включи» - «включи» - команда: "turn_off"текст: - «выключить» - «выключить»
Файл fsm.yml определяет переходы между состояниями, команды, осуществляющие эти переходы, и ответы, которые будут отправляться в них. Начните с содержимого этого файла:
переходы: - от: - "initial"into: "on"команда: "turn_on"ответы: - текст: «Включение». - от: - "on"into: "initial"команда: "turn_off" отвечает: - текст: «Выключение». - текст: "" по умолчанию: неизвестно: "Не могу этого сделать."
Чтобы запустить бота, запустите:
чатто --путь к данным/
Если вы используете Docker, запустите:
запуск докера -это -e CHATTO_DATA=./данные -v $PWD/данные:/данные хайметеб/чатто: последнее чатто --путь к данным
Чтобы взаимодействовать с вашим ботом, запустите:
chatto cli
Вот и все! Теперь вы можете сказать «включить» или «включить» , чтобы перейти во включенное состояние, и «выключить» или «выключить» , чтобы вернуться в исходное состояние . Однако вы не можете перейти ни из on в on , ни из начального в начальное .
Вот диаграмма этого простого конечного автомата:
Вы можете интегрировать своего бота с Telegram, Twilio, Slack и всем, что захотите.
Запустите chatto
в каталоге, где находятся ваши YAML-файлы, или укажите путь к ним с помощью флага --path
:
chatto --path ./ваши/данные
Для запуска в Docker используйте:
запуск докера -п 4770:4770 -e CHATTO_DATA=./ваши/данные -v $PWD/ваши/данные:/данные хайметеб/чатто
Вы можете использовать инструмент Chatto chatto cli
, загрузив его. Интерфейс командной строки позволяет легко тестировать взаимодействие ваших ботов.
чатто cli --url 'http://mybot.com' -порт 4770
Вы также можете использовать Chatto в Docker Compose. docker-compose.yml
будет выглядеть так:
версия: "3" сервисы:chatto:image: jaimeteb/chatto:${CHATTO_VERSION}env_file: .envports: - объемы «4770:4770»: - ${CHATTO_DATA}:/datadependents_on: - расширение - Redis ext:image: odise/busybox-curl # Занятая ячейка с сертификатамикоманда: ext/extexpose: - 8770томов: - ${CHATTO_DATA}/ext:/ext redis:image: bitnami/redis:6.0environment: - REDIS_PASSWORD=${STORE_PASSWORD} раскрывает: - 6379
Для этого требуется, чтобы файл .env
содержал необходимые переменные среды:
# Chatto configuration CHATTO_VERSION=latest CHATTO_DATA=./your/data # Extension configuration CHATTO_BOT_EXTENSIONS_EXTENSION_NAME_URL=http://ext:8770 # Redis CHATTO_BOT_STORE_HOST=redis CHATTO_BOT_STORE_PASSWORD=pass # Logs CHATTO_BOT_DEBUG=true
Структура каталогов со всеми файлами будет выглядеть так:
. ├── data │ ├── ext │ │ ├── ext │ │ └── ext.go │ ├── bot.yml │ ├── chn.yml │ ├── clf.yml | └── fsm.yml ├── docker-compose.yml └── .env
Наконец, запустите:
docker-compose up -d redis ext docker-compose up -d чатто
Сервер расширений должен выполняться в соответствии со своим языком.
Для этого файлаdocker-compose.yml
вам сначала необходимо создать расширение Go:
go build -o data/ext/ext data/ext/ext.go
Сервер расширений должен быть запущен до инициализации Chatto.
В каталоге deploy/kubernetes
вы можете найти пример развертывания:
Добрый | Имя | Описание |
---|---|---|
Секрет | chatto-config-secrets | Содержит токены, которые Chatto будет использовать для авторизации. |
Карта конфигурации | chatto-config-envs | Содержит переменные среды для файла bot.yml. |
Карта конфигурации | chatto-config-files | Содержит файлы clf.yml и fsm.yml. |
Развертывание | chatto | Развертывание Chatto на основе образа Docker jaimeteb/chatto |
Услуга | chatto-service | Сервис для развертывания chatto |
Вход | chatto-ingress | Ingress для сервиса chatto-service |
Запустите следующую команду для развертывания в Kubernetes:
kubectl apply -f ./deploy/kubernetes/
Предоставляется импортируемый бот-сервер и клиентский пакет, позволяющий встроить его в ваше собственное приложение.
Чтобы встроить сервер:
package mainimport( "flag""github.com/jaimeteb/chatto/bot")func main() { port := flag.Int("port", 4770, "Укажите порт для использования.") path := flag.String («путь», «.», «Путь к файлам YAML.») flag.Parse() server := bot.NewServer(*path, *port) server.Run() }
Чтобы встроить клиент:
package myserviceimport ( "log""github.com/jaimeteb/chatto/bot")type MyService struct {chatto bot.Client}func NewMyService(строка URL, порт int) *MyService { return &MyService{chatto: bot.NewClient(url, порт)} }func (s *MyService) Submit(question *query.Question) error { ответы, ошибка := s.chatto.Submit(вопрос) if err != nil { return err } // Выводим ответы на стандартный вывод for _, ответ := диапазон ответов { fmt.Println(answer.Text) } вернуть ноль}
Я предоставил несколько файлов конфигурации в примерах . Клонируйте репозиторий и chatto
с указанием -path
нужного примера, чтобы протестировать их (для тех, кто использует расширения, сначала запустите соответствующие расширения).
Подробнее об этих примерах в документации.
Mood Bot — чат-версия Mood Bot от Rasa. Поприветствуйте бота, чтобы начать разговор.
Поиск покемонов — поиск покемонов по имени или номеру.
Викторина по викторине . Введите начало быстрой викторины.