Телеграм бот с использованием языковой модели с huggingface, натренированный на чате.
Было решено тренировать модель на чате тренировок яндекса, так как этот чат содержит много диалогов, и сам чат модерировался организаторами.
Детали обучения можно изучить в ipynb ноутбуке
Для написания телеграм бота была выбрана библиотека pyrogram
в виду своей эффективности и протокола MTProto
В ходе тестов было выявлено, что модель в среднем тратит > 15 секунд на генерацию ответа пользователю. Если пользователь будет спамить сообщениями, вся вычислительная мощность будет тратиться только исключительно на него, не давая возможности другим людям пообщаться. По этой причине пока модель отвечает на текущее сообщение пользователя, все последующие игнорируются.
Для независимости бота от модели (блокирования работы бота из-за синхронной генерации ответа моделью) было решено их разделить на 2 сервиса и соединить при помощи RabbitMQ
. Бот отправляет кладет запросы на генерацию ответов в очередь, RabbitMQ
равномерно распределяет их между несколькими запущенными Docker
ами с моделью, которые таким же образом отправляют ответ назад боту. Таким образом легко горизонтально масштабировать текущее решение, просто запустив больше Docker
ов с моделью.
Я подумал, что будет скучно делать просто телеграм бота, и поэтому решил сделать user-bot
а. Иначе говоря, бота, который будет отвечать от моего имени. Pyrogram
имеет довольно простой интерфейс для его создания, а людям веселее общаться с моей второй личностью.
Запустить можно при помощи команды
docker compose up --build -d
Для увеличения пропускной способности, можно увеличить количество серверов в docker-compose.yml
По вышеописанным причинам, попробовать можно прямо в чате со мной
Поддерживаемые команды:
/help
- вывод сообщения с помощью/delete_history
- очистить контекст/set_context_length <NUMBER>
- изменить длину контекстаТимоха, <MESSAGE>
- активировать генерацию ответа моделью