↑↓ выбор · ENTER перейти · ESC закрыть

АвтоматизацияИнтеграции

Tech Radar: фильтр сигнала из потока сообщений разработчиков

Что это было
Собственный сервис: собирает сообщения из профессионального сообщества, отсеивает шум объяснимыми правилами и собирает дайджест. Работает на моём сервере.
Моя роль
Постановка, архитектура, разработка, эксплуатация — один
Период
2026, развивается
Результат
7 627 сообщений от 581 автора в архиве; сервис работает без вмешательства.

Контекст и исходная проблема

Сообщество разработчиков, где обсуждают новые библиотеки, инструменты и цены на API. Ценность есть, но она размазана по сотням сообщений в день, и читать всё вручную невозможно.

Бизнес-задача

Не пропускать полезное, не читая всё. Получать короткую сводку за сутки вместо ленты, и уметь объяснить, почему сообщение попало в сводку.

Ограничения и неизвестные

  • Один сервер 2 CPU / 4 ГБ, без GPU
  • Сообщения чужие: архив не публикуется, в выдачу идут только ссылки и фрагменты
  • Решение должно работать без присмотра — я занят другими задачами
  • Ноль платных API

Моя ответственность

Всё: сбор через Telethon, схема базы, правила отбора, дайджест, systemd-юнит, тесты, эксплуатация.

Ключевые решения и компромиссы

  • Сырой архив неприкосновенен: обработка ничего не удаляет из items, все производные выводы лежат отдельно в item_analysis. Правила отбора можно переписать и прогнать заново по всей истории.
  • Сначала детерминированные правила, только потом LLM. Правила дёшевы, воспроизводимы и объясняют своё решение списком причин; модель на 2 ядрах без GPU медленная и объяснить себя не может.
  • LLM вынесен за интерфейс ItemAnalyzer, а не вписан в код обработки. Добавить локальную модель можно новой реализацией того же протокола, не трогая пайплайн.
  • Инкрементальный сбор по курсору: перезапуск не перечитывает историю заново.
  • Наблюдаемость с первого дня — каждый прогон коллектора пишется со статусом, включая аварийное завершение.

Что получилось

  • 7 627 сообщений от 581 автора собрано за период с марта по август 2026
  • Дедупликация по нормализованному тексту и по канонизированным ссылкам, с удалением tracking-параметров
  • Дайджест выдаёт оценку, категорию и список причин, по которым сообщение отобрано
  • Сервис живёт под systemd и переживает перезагрузку сервера без ручного вмешательства
  • 1 148 строк собственного кода, четыре внешние зависимости, три набора тестов

Границы публикации

Следующий шаг для похожей задачи

Похожая задача — вытащить сигнал из потока сообщений, писем или заявок. Начнём с того, что считать сигналом.

Связаться

Обсудим вашу задачу?

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