Данный репозиторий представляет собой открытый исходный код для телеграм чатбота: @AutoRegressorBot.
Функционал бота следующий:
- Использует Openai API;
- Учитывает историю диалога, которую хранит в Redis. Если диалог не продолжить в течение часа, автоматически удаляет сообщение, используя Time-to-live cache;
- Работает асинхронно, использует такие фреймворки как: aiohttp, aiogram, async.redis.
- Нет цензуры. вместо этого запрос обрабатывается собственной моделью, в которой не заложена этическая политика Openai;
Цель проекта заключается в том, чтобы реализовать полноценного чатбота с открытым исходным кодом и процессом деплоя на русском языке. Таким образом, чтобы каждый мог ознакомится и переиспользовать готовые решения для своих целей. В частности решают следующие задачи, которые сложно найти в интернете:
- Как быстро и просто настроить Openai API с aiogram (config/openai_config.py, utils/generation.py);
- Как просто установить и поднять бота с использованием webhook на aiohttp и aiogram;
- Как быстро подключить Redis к aiogram (config/dp_config.py);
- Как за'деплоить aiogram бота с помощью Docker (Dockerfile, docker-compose.yaml);
- Имплементация CI/CD процесса для чатбота.
В будущем планируется реализовать такие функции как:
- Распознание речи в текст для того, чтобы бот мог отвечать на голосовые сообщения (Данная функция уже реализована, код находится в репо (utils/stt.py). Однако из-за слабой мощности существующего хоста фича деактивирована на проде);
- Генерация ответа по чанкам;
- Ускорение ответов на аналогичные вопросы с использованием векторных БД;
- Увеличение качества ответов на основе истории: DPO, RLHF(AI) (без и с дообучения модели);
- Обучение и деплой собственного ML-сервиса на собранных данных;
Чтобы поднять aiogram чатбота на webhook необходимо пройти несколько этапов:
- Установить статический IP на хосте;
- Получить публичный (статический) IP своего роутера; В моем случае мне пришлось связываться с ISP и подключать данную услугу;
- Пробросить порты (port-forwarding) со своего роутера c публичным IP на ваш хост;
- Установить reverse proxy на свой хост;
- Так как телеграмм работает только по протоколу HTTPS, то необходимо получить сертификаты или сгенерировать свой собственный;
- Поднять nginx и пробросить порт с 443 на свой aiohttp сервис.
- Запустить свой aiohttp сервис.
Пример кода можно для настройки и поднятия webhook сервиса найти в файле: config/webhook_config/py
Пример настройки reverse proxy на nginx — nginx-example.conf
Подробную инструкцию по генерации собственных сертификатов можно посмотреть по [ссылке](https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-in-ubuntu-18-04)
*В дальнейшем я планирую добавить детальную инструкцию от и до реализации каждого из указанных шагов*