Григорий - бот в Телеграме для удобного заказа продуктов и общения на естественном
языке.
Бот имеет собственную базу рекомендаций продуктов на основе заказов пользователя, сделанных через него, поэтому бот
интегрируется в любой маагазин (главное - наличие необходимого API). Система рекомендаций самая примитивная — продается
товар, который пользователь покупает чаще всего в каждой категории.
Сначала бот ищет запрос в заранее написанной таблице вопрос-ответ, затем если он есть, то совершает соответствующие действия и отвечает, иначе подключает GPT-2 для генерации ответа.
В первую очередь при получении запроса он прогоняется через neuralintents с таблицей сущностей, написанной заранее.
Если там есть необходимый запрос (например, как дела?, расскажи анекдот и т.д.), то пользователю идет соответствующий
ответ. При чем если запрос касается действий с магазином (заказать продукты, показать корзину и т.д.), то выполняются
нужные действия и лишь затем идет ответ пользователю, что очевидно.
Однако если модуль не нашел в таблице запрос, то подключается модель GPT-2, обученная на моих личным переписках, и
генерирует ответ. Стоит также отметить недочеты в этой части:
- модель обученая на моих личных переписках, поэтому
- может выдать мои данные
- может отправить ссылку или какой-то кусок кода, который я кому-либо отправлял
- слишком мало данных для обучения (всего 97 тыщ строк)
В проекте реализован сервер-затычка, написанный на Go. В нем есть минимальный API (показать данные продукта, добавить в
корзину и т.д.). Общение с сервером идет через защищенное базовой аутентификацией http соединение.
Развернуты два PostgreSQL (для магазина и для бота). Для магазина там таблицы пользователей и продуктов, для бота -
пользователей и рекомендаций.
- все держится на моем домашнем сервере (и бот, и магазин, и постгрес), поэтому если что-то сломалось и не отвечает, то
самое просто решение — написать мне, чтобы я подрубил, если что выключил
ось - проект создан для конкурса "Уроки Настоящего" за ~1 месяц
- впервые работал с
- постгрес
- нейронки вообще
- вместо GPT и neuralintents изначально планировалось использовать косинусное сравнение (?) и индексированию по словам — отвечал примерно связно, но мало на что находился ответ, поэтому идея была заморожена