Supreme Commander Two@SupremeCommanderTwo
← все записи

Как я собрал бота, который конвертирует, распознаёт и транскрибирует

👁 11
Расскажу, что получилось, пока пилил своего нового (если быть честным, то обновленного!😈) бота для Telegram. В итоге я не написал «ещё один бот на n строк», а разработал целую микросервисную систему - 13 контейнеров в docker-compose: сам бот на aiogram, очереди на RabbitMQ (FastStream), Postgres, MinIO под файлы и отдельные воркеры под каждую тяжёлую задачу. Конвертация файлов. Я сделал так, чтобы под капотом крутились сразу два движка - один для бесплатного тарифа и второй для премиума. Роутер сам решает, куда отправить файл, в зависимости от подписки пользователя. Распознавание текста. Тут тоже пара движков: Tesseract (с русским и английским языковыми пакетами) и RapidOCR. Отдельно намучился с кириллицей — встроенная модель RapidOCR её просто не тянет, пришлось подключать кастомную русскую ONNX-модель. Голос в текст. Для распознавания речи я взял не питоновский whisper, а собрал whisper.cpp прямо внутри Docker-образа из исходников через cmake — получилось быстрее и легче. Аудио предварительно гоняю через ffmpeg, а модель тоже выбирается по тарифу. Что ещё есть. Учёл вебхуки и polling для разных окружений, сделал i18n на Babel (ru/en), поднял отдельную админку, продумал лимиты и подписки на уровне БД. Чего пока нет - если честно. Автотестов от слова совсем !😐 Проверяю руками через docker compose и смоук-чек импортов. Знаю, что для системы с очередями, внешними процессами и кучей движков это дыра - в планах закрыть. Получился неплохой конструктор из независимых сервисов, каждый из которых можно development-ить, деплоить и масштабировать отдельно. Также в планах добавить кучу новых форматов для конвертирования. Бот @DocumentConversionBot

Supreme Commander Two

Подписаться