Мой блог
Как я перестал перечитывать десятки Telegram-каналов: локальный архив на Telethon, SQLite FTS5 и ИИ-дайджесты
Материал посвящён теме «Как я перестал перечитывать десятки Telegram-каналов: локальный архив на Telethon, SQLite FTS5 и ИИ-дайджесты». Ниже последовательно разберём главные вопросы, важные детали и практический контекст, чтобы легче ориентироваться в теме и понять логику дальнейшего изложения.
Зачем нужен персональный агрегатор Telegram-новостей
Мой рабочий день нередко начинается ближе к полудню, и к этому моменту в мессенджере успевает образоваться внушительный завал из публикаций. Попытка просмотреть всю ленту вручную превращается в рутину: свыше десятка ресурсов освещают одно и то же событие практически одинаковыми словами, отдельные уникальные заметки тонут в потоке информационного шума, а действительно важные детали легко пропустить.
При этом засорять основной аккаунт постоянными подписками ради разового интереса к конкретной теме — будь то свежие релизы нейросетей, профильные новости технологии или спортивные события — мне категорически не хотелось. Складывать десятки каналов «на всякий случай» означает превратить список чатов в непроходимую свалку.


Именно для решения этой личной бытовой проблемы я и разработал инструмент TelegramNewsAI. На данный момент я держу в постоянном фокусе порядка 25 каналов из своих личных подписок и еще около 10 открытых публичных ресурсов, которые программа считывает без необходимости подписываться на них. Главная идея заключается не в создании очередного примитивного бота для пересказа текста, а в построении надёжного локального конвейера: собрать посты за нужный промежуток времени, зафиксировать первоисточники и подготовить данные так, чтобы искусственный интеллект сформировал четкую и структурированную картину происходящего.
Что я хотел получить
Формулируя требования к финальному отчету, я выделил ключевой приоритет: максимальная концентрация проверенных фактов при полном отсутствии лишней «воды», глубоких аналитических рассуждений и сгенерированных прогнозов. Когда десяток информационных ресурсов публикует заметки об одном и том же инциденте, читателю не требуется читать десять схожих абзацев. Однако если в одном из источников приводятся дополнительные цифры, прямая цитата участника или важная поправка, эта деталь обязана попасть в итоговую выборку.
Аналогично дело обстоит и с противоречивыми сведениями. Если источники расходятся во мнениях или фактах, система должна наглядно подсветить расхождение и предоставить прямую ссылку на оригинал, а не пытаться угадать, какая версия является истинной.
Обычное суммирование массива сообщений «в лоб» с этой задачей не справляется. Мне требовалась не просто компрессия текста, а логически сгруппированная и структурированная картина. Представим ситуационный срез: за несколько часов в мониторинг поступает 200 постов. Из них шестьдесят дублируют пять основных инфоповодов, тридцать относятся к мелким новостям, а остальные представляют собой апдейты и реплики. Просто сжать этот поток до пары экранов текста недостаточно — необходимо сначала кластеризовать публикации по темам, отследить хронологию появления деталей и зафиксировать ключевые различия.

В результате я разбил всю архитектуру процесса на понятную последовательность: прямое извлечение постов из Telegram, сохранение в локальную базу данных, выгрузка в четко структурированный JSON-формат, передача данных нейросети и получении готового дайджеста. Программа TelegramNewsAI полностью берет на себя рутину по сбору, каталогизации и поиску исходников, а нейросеть подключается лишь на финальном этапе, работая по заранее прописанным мною правилам.
Почему Telethon
Для реализации сбора данных мне требовался инструмент, способный обращаться к публичным каналам от имени стандартной учетной записи Telegram, включая те ресурсы, на которые пользователь не подписан. По этой причине выбор пал на библиотеку Telethon. При первом старте утилиты пользователь задает собственные параметры Telegram API ID и API Hash, вводит номер телефона и разовый код подтверждения. В дальнейшем взаимодействие с сервисом происходит напрямую через Telegram API, а наличие установленного клиента Telegram Desktop на компьютере не является обязательным условием.
Добавлять публичные источники в систему можно в любом удобном виде: по юзернейму вида @username, по прямым ссылкам t.me или даже по URL конкретного поста. Кроме того, поддерживается пакетный ввод каналов через запятую. В моей практике это критически удобно: если меня начинает интересовать новая тема, я прошу нейросеть сформировать список релевантных публичных каналов, вношу их в TelegramNewsAI и моментально делаю тематическую выгрузку, не захламляя свою основную ленту в мессенджере.
Локальный архив вместо постоянного сервиса
С самого начала разработки я придерживался принципа полной локальности. У меня не было желания разворачивать отдельный выделенный сервер, привязываться к платной подписке сторонних сервисов, держать постоянный фоновый процесс или зависеть от конкретной нейросетевой модели. Приложение рассчитано на работу в среде Windows 10/11 и сохраняет всю историю в локальном файле SQLite. Утилиту не требуется держать запущенной круглосуточно: ее можно спокойно закрыть, а при следующем открытии она автоматически докачает пропущенный массив публикаций за весь доступный период.

Для персонального инструмента возможности SQLite оказались идеальными: вся база находится в одном файле, поддерживаются полноценные транзакции, индексы и стандартное резервное копирование без необходимости ставить и администрировать тяжелые службы БД. За поиск по архиву отвечает движок SQLite FTS5. Сбор полнотекстового индекса позволяет осуществлять мгновенную выборку по уже сохраненным данным. Если меня интересует конкретная проблема, я могу не генерировать общий дневной отчет, а выполнить точечный поиск по ключевым словам и передать нейросети узкоспециализированный JSON-файл.
Что оказалось самым трудным
Основная сложность проекта заключалась не в написании парсера для Telegram, а в тонкой настройке качества получаемого ИИ-дайджеста. Первая серьезная преграда — банальные повторы: одна и та же новость облетает десятки ресурсов с минимальными изменениями, и если передать их в нейросеть «как есть», итоговый результат получается перегруженным и нечитаемым.
Вторая проблема связана с гиперактивностью самих языковых моделей. Нейросети склонны додумывать контекст, выстраивать далёкие от реальности прогнозы и добавлять субъективные выводы. Мне же требовались конкретные ответы на практические вопросы: что именно произошло, какие новые данные появились, каковы цифры и факты, на кого ссылается источник и где именно данные разнятся.
В итоге мне пришлось жестко переписать системные инструкции для формирования дайджеста, сместив фокус на сухой фактаж и четкую структуру. Кроме того, требовалось гарантировать сохранение прямых ссылок на первоисточники. Если какой-либо факт вызывает сомнения, у пользователя должна оставаться возможность в один клик открыть оригинальный пост в Telegram и изучить контекст самостоятельно.
Как это выглядит в реальной жизни
Мой повседневный сценарий использования предельно прост: утром я запускаю TelegramNewsAI, выставляю временной интервал (обычно за последние 8 часов) и отправляю процесс на исполнение. Пока готовится кофе, утилита собирает посты, формирует итоговый файл и открывает его в системном Проводнике Windows. Мне остается лишь прикрепить свежий JSON-файл к диалогу с ChatGPT и отправить короткую команду: «Подготовь дайджест». Все необходимые инструкции по правилам анализа и форматирования уже зашиты внутри самого выгруженного файла, поэтому вводить длинный промпт вручную каждый раз не приходится.

Второй запуск я обычно делаю вечером. Если же в течение дня возникает необходимость разобрать конкретное событие, я применяю тематический режим: нахожу список каналов, добавляю их в программу, собираю посты по ключевым словам через FTS5 и получаю сфокусированный дайджест по интересующей теме — от мира ИИ и компьютерного железа до кинематографа.
Почему исходники хранятся отдельно от ИИ
Разделение хранилища данных и слоя искусственного интеллекта — мой фундаментальный инженерный принцип. Нейросеть может ошибиться, некорректно сформулировать мысль или сделать ошибочный вывод, однако первичные текстовые данные в локальной базе SQLite остаются нетронутыми. Если итоговый вариант меня не устраивает, я могу направить тот же самый JSON-файл в другую модель, попросить сократить объем, убрать аналитические сноски или сделать акцент на противоречиях в источниках.
Сам локальный архив полностью независим от внешних сервисов. Сегодня анализ выполняются через ChatGPT, а завтра их можно переложить на локальную LLM или любой другой сервис. Нейросеть выступает лишь легкозаменяемым финальным звеном, тогда как вся история и сырые посты находятся под моим полным контролем.
Безопасность
Поскольку TelegramNewsAI функционирует от имени личного аккаунта Telegram, защита файла сессии и API-ключей имеет первостепенное значение. Все учётные данные сохраняются исключительно локально, а критический файл credentials.bin зашифрован с использованием системного механизма Windows DPAPI. Файл базы данных, Telegram-сессия, текущие настройки, выбранные каналы и экспортированные дайджесты хранятся только на ПК пользователя.
В репозитории проекта предусмотрен отдельный документ SECURITY.md, а процессы автоматической сборки (CI) строго проверяют, чтобы файлы сессий, ключи и локальная база news.db ни при каких обстоятельствах не попали в публичный Git-репозиторий. При необходимости приложение вместе со всеми конфиденциальными данными удаляется путем простого удаления рабочей директории.
Что уже работает и что дальше
На текущий момент функционал TelegramNewsAI полностью закрывает мои потребности: программа выкачивает посты за заданное время, дозагружает пропущенную историю, обрабатывает сторонние публичные каналы без подписки, выполняет полнотекстовый поиск по SQLite, формирует выгрузку в JSON с прямыми ссылками на посты и передает подготовленный материал нейросети.
В дальнейших планах я рассматриваю создание Android-версии приложения для удобной работы с мобильных устройств, а также переводы интерфейса и документации на английский язык. При этом ключевая архитектурная концепция останется прежней — легкий, автономный и независимый от сторонних облаков локальный архив.
Итог
Утилита TelegramNewsAI создавалась как практичный личный инструмент для экономии времени. В результате мне удалось полностью избавиться от необходимости вручную листать бесконечные ленты новостей, сохраняя при этом доступ к первичным источникам и глубокой аналитической выборке.
Сформированная схема работы выглядит следующим образом: отслеживание порядка 35 каналов → сохранение в локальный архив SQLite → фильтрация по времени или ключевой теме → генерация JSON-структуры → обработка через ИИ → готовый понятный дайджест за чашкой утреннего кофе.
Источник: habr.com
