← Все работы

Chat Digest

Итоги чата и живые ответы: текст, голос, фото и видео

Состав проекта
Telegram-бот, обработка медиа, память и дайджесты
Материалы
По запросуКод в закрытом репозитории

Задача

Помочь участникам следить за разговором в групповом чате: собрать главное за день и ответить по контексту, когда бота зовут по имени, отмечают или отвечают на его сообщение.

Решение

Разработал бота на Python. Он сохраняет переписку в SQLite, расшифровывает голосовые и звук из видео, описывает фото и ключевые кадры мультимодальной моделью и удаляет исходные файлы после анализа. В полночь модель получает ленту дня, память чата и прошлые выпуски и пишет итог. По имени, упоминанию или ответу на его сообщение бот включается в разговор с учётом недавних реплик. Отдельный проход LLM ведёт память: сленг, мемы и подтверждённые факты об участниках.

Сложности

Не путать авторов реплик, не повторять темы прошлых выпусков и вовремя промолчать: если день был тяжёлым, выпуск не выходит, а пропуск записывается в журнал.

Результат

Бот публикует итог дня по расписанию и коротко отвечает, когда к нему обращаются по имени. Тесты и регрессия промпта работают без внешних API, а предпросмотр собирает итог на копии базы без отправки в чат.

Возможности

Голос, видео и фото

Whisper расшифровывает речь, FFmpeg извлекает кадры, мультимодальная модель описывает изображения.

Память чата

Факты привязываются к Telegram ID участника; неподтверждённые отбрасываются.

Учёт прошлых выпусков

Модель видит предыдущие итоги и использованные темы, чтобы не повторять одни и те же шутки.

Ответы в чате

Короткий ответ по имени, упоминанию или reply с учётом авторов, недавних реплик и обработанных медиа.

Устройство

  1. Telegram Bot APIприём сообщений, файлов и обращений к боту
  2. FFmpegкадры и звук из видео
  3. PolzaWhisper, зрение и Gemini 3.1 Flash Lite
  4. SQLiteсообщения, очередь медиа, память и журнал выпусков
  5. systemdзапуск на сервере

Стек

Презентация

Превью презентации Chat Digest
Презентация Chat DigestОткрыть отдельно ↗
Все работыОбсудить задачу