Skip to content

PLoginoff/recap_bot

Repository files navigation

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

Recap Bot

Telegram бот для создания краткого содержания из голосовых сообщений и видео-кружочков.

Теперь поддерживает и другие мессенджеры через плагины.

Повтор попыток через очередь, ротация токенов Сбера, резевные модели в OpenRouter.

Коротко: Go, Sber Speech, OpenRouter, Telegram, ffmpeg.

Никаких зависимостей, никаких docker, никаких баз данных.

Для запуска на сервере нужен лишь бинарь и конфиг.

Архитектура

В основе лежит канал taskQueue через который проходят все операции:

  1. Receive → Telegram (и другие) сообщения попадают в taskQueue
  2. Download → Загрузка файла из Telegram + конвертация видео в аудио (если нужно)
  3. STT → Speech-to-Text преобразование
  4. Summarize → OpenRouter создает краткое содержание
  5. Send → Результат возвращается пользователю

Каждый компонент работает независимо и общается только через taskQueue.

Настройка

  1. Создайте бота в Telegram через @BotFather и получите токен.

    Для других мессенджеров что-то подобное будет.

  2. Получите API ключи:

    • Sber: client_secret (может быть парой client_id:secret в base64, либо укажите client_id отдельно)
    • OpenRouter: API ключ и выберите модель для суммаризации

Для поддержки видео-кружочков нужен установленный ffmpeg (по умолчанию используется бинарь из PATH).

  1. Скопируйте recap.example.dist в recap.yaml и обновите его:

  2. Вы можете собрать сами или скачать бирань на свой сервер

wget https://github.com/ploginoff/recap_bot/releases/download/v2.2/recap_x64.tar.gz
tar xfz recap_x64.tar.gz
./recap

Формат state.txt

Состояние токенов в yaml формате.

Ротация моделей и токенов

  • OpenRouter модели — перебираются в порядке списка openrouter.models. Для каждой модели запрашивается доступ в state.Store. Если модель на паузе, берём следующую. При успешном ответе записываем фактическое время запроса. Ошибка или достижение лимита переводит модель на паузу cooldown и обнуляет счётчик.
  • Sber токены — используются последовательно в порядке sber.tokens. Для каждого токена выполняются те же проверки в state.Store. Если токен на паузе, пропускаем его и двигаемся дальше, пока не найдём доступный. По итогам запроса время распознавания добавляется в счётчик, при ошибке или превышении лимита токен ставится на паузу.

Таким образом, бот автоматически выбирает первый доступный ресурс из приоритетного списка и не обращается к ресурсам, которые недавно вернули ошибку или превысили лимит времени. Настройки cooldown и limit настраиваются отдельно для каждой модели или токена.

Работа в группах

Для работы бота в группах необходимо:

  1. Добавить бота в группу как администратора с правами на чтение сообщений
  2. Настроить приватность группы:
    • В настройках группы выбрать "Приватность и безопасность"
    • В разделе "Кто может присылать сообщения" выбрать "Все участники"

Бот будет отвечать на голосовые сообщения и видео-кружочки в группе, как и в личных сообщениях.

Для других мессенджеров настройки групп могут отличаться. Но часто нужны права на чтение сообщений.

Структура проекта

  • main.go - точка входа, настройка и запуск
  • bot.go - основная логика бота, обработчики сообщений
  • config.go - конфигурация и типы
  • logger.go - настройка логирования
  • worker.go - обработка задач в воркерах
  • messenger.go - интерфейсы мессенджеров (плагинная архитектура)
  • messenger_telegram.go - работа с Telegram API
  • messenger_* - прочие мессенджеры
  • media.go - конвертация медиафайлов
  • yandex.go - интеграция с Yandex SpeechKit
  • sber.go - интеграция с Sber SpeechKit
  • openrouter.go - интеграция с OpenRouter
  • recognizer.go - интерфейс распознавания речи
  • store.go - управление состоянием и лимитами
  • build.sh - скрипт сборки
  • test/ - тестовое приложение для проверки промтов

Тестирование промтов

Для тестирования различных промтов создано отдельное приложение в директории test/. Оно позволяет прогнать набор тестовых фраз через OpenRouter с разными вариантами системных промтов и сравнить результаты.

cd test
go run main.go

Позиция по GPT ("ИИ")

Этот проект следует принципам ответственной разработки ИИ-инструментов.

Каждая сгенерированная строка должна быть проверена человеком перед использованием.

TODO

  • ограничения на размер войса в минутах (конфиг)
  • лимиты по вермению на юзера/группу (в памяти)
  • новый слой Bot, отделить мессенджер от текство и промптов

About

simple bot for recap voices in telegram

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors