Mainly, this bot is for using Sber's free tokens, which is why everything is in Russian. Sber is a Russian cloud provider, and SberSpeech is their top-tier speech-to-text engine for Russian
Telegram бот для создания краткого содержания из голосовых сообщений и видео-кружочков.
Теперь поддерживает и другие мессенджеры через плагины.
Повтор попыток через очередь, ротация токенов Сбера, резевные модели в OpenRouter.
Коротко: Go, Sber Speech, OpenRouter, Telegram, ffmpeg.
Никаких зависимостей, никаких docker, никаких баз данных.
Для запуска на сервере нужен лишь бинарь и конфиг.
В основе лежит канал taskQueue через который проходят все операции:
- Receive → Telegram (и другие) сообщения попадают в taskQueue
- Download → Загрузка файла из Telegram + конвертация видео в аудио (если нужно)
- STT → Speech-to-Text преобразование
- Summarize → OpenRouter создает краткое содержание
- Send → Результат возвращается пользователю
Каждый компонент работает независимо и общается только через taskQueue.
-
Создайте бота в Telegram через @BotFather и получите токен.
Для других мессенджеров что-то подобное будет.
-
Получите API ключи:
- Sber: client_secret (может быть парой client_id:secret в base64, либо укажите client_id отдельно)
- OpenRouter: API ключ и выберите модель для суммаризации
Для поддержки видео-кружочков нужен установленный ffmpeg (по умолчанию используется бинарь из PATH).
-
Скопируйте
recap.example.distвrecap.yamlи обновите его: -
Вы можете собрать сами или скачать бирань на свой сервер
wget https://github.com/ploginoff/recap_bot/releases/download/v2.2/recap_x64.tar.gz
tar xfz recap_x64.tar.gz
./recap
Состояние токенов в yaml формате.
- OpenRouter модели — перебираются в порядке списка
openrouter.models. Для каждой модели запрашивается доступ вstate.Store. Если модель на паузе, берём следующую. При успешном ответе записываем фактическое время запроса. Ошибка или достижение лимита переводит модель на паузуcooldownи обнуляет счётчик. - Sber токены — используются последовательно в порядке
sber.tokens. Для каждого токена выполняются те же проверки вstate.Store. Если токен на паузе, пропускаем его и двигаемся дальше, пока не найдём доступный. По итогам запроса время распознавания добавляется в счётчик, при ошибке или превышении лимита токен ставится на паузу.
Таким образом, бот автоматически выбирает первый доступный ресурс из приоритетного списка и не обращается к ресурсам, которые недавно вернули ошибку или превысили лимит времени. Настройки cooldown и limit настраиваются отдельно для каждой модели или токена.
Для работы бота в группах необходимо:
- Добавить бота в группу как администратора с правами на чтение сообщений
- Настроить приватность группы:
- В настройках группы выбрать "Приватность и безопасность"
- В разделе "Кто может присылать сообщения" выбрать "Все участники"
Бот будет отвечать на голосовые сообщения и видео-кружочки в группе, как и в личных сообщениях.
Для других мессенджеров настройки групп могут отличаться. Но часто нужны права на чтение сообщений.
main.go- точка входа, настройка и запускbot.go- основная логика бота, обработчики сообщенийconfig.go- конфигурация и типыlogger.go- настройка логированияworker.go- обработка задач в воркерахmessenger.go- интерфейсы мессенджеров (плагинная архитектура)messenger_telegram.go- работа с Telegram APImessenger_*- прочие мессенджерыmedia.go- конвертация медиафайловyandex.go- интеграция с Yandex SpeechKitsber.go- интеграция с Sber SpeechKitopenrouter.go- интеграция с OpenRouterrecognizer.go- интерфейс распознавания речиstore.go- управление состоянием и лимитамиbuild.sh- скрипт сборкиtest/- тестовое приложение для проверки промтов
Для тестирования различных промтов создано отдельное приложение в директории test/.
Оно позволяет прогнать набор тестовых фраз через OpenRouter с разными вариантами системных промтов и сравнить результаты.
cd test
go run main.goЭтот проект следует принципам ответственной разработки ИИ-инструментов.
Каждая сгенерированная строка должна быть проверена человеком перед использованием.
- ограничения на размер войса в минутах (конфиг)
- лимиты по вермению на юзера/группу (в памяти)
- новый слой Bot, отделить мессенджер от текство и промптов