Как отличить тренд от мусора: архитектура умного скоринга

Когда скоринг тренда встречается с фактами: как мы научили компьютер различать шум и сигнал
Всё началось с простого вопроса в проекте trend-analisis: как отличить действительно важный тренд от того, что просто много раз переписали в интернете? Первый скоринг работал, но был примитивен — считал кол-во источников и всё. А если один агрегатор новостей переиндексировал статью сто раз? Тогда по его логике это уже суперважный тренд, хотя на деле — просто мусор.
Поэтому решили пойти в наступление. Нужна была система со вкусом, которая бы понимала разницу между настоящей значимостью тренда и просто шумом в информационном поле. Так родилась идея Scoring V2.
Архитектура получилась трёхслойной. Первый слой — это urgency (срочность) и quality (качество), оба по шкале 0–100. Urgency отражает, насколько свежее и горячее событие, а quality говорит о том, из скольких разных реальных источников (не агрегаторов!) пришла информация. На основе этой пары метрик система выдаёт одну из четырёх рекомендаций: ACT_NOW (кидай в новости прямо сейчас), MONITOR (держим под контролем), EVERGREEN (медленный, долгоиграющий тренд) и IGNORE (это просто шум).
Второй слой — интеграция с Tavily API. Это платформа для работы с новостями, которая даёт не просто список источников, а полный граф цитирований. TavilyAdapter в нашем коде считает unique domain count — то есть сколько разных доменов процитировали друг друга. Если один агрегатор (New Feed, Hacker News агрегатор — словили паттерны в AGGREGATOR_PATTERNS) выплюнул эту новость, мы его фильтруем. Остаются только оригинальные источники.
Реальная магия произошла в методе fetch_news() с порогом цитирования. Мы выставили границу: если тренд цитируется меньше чем из пяти уникальных доменов, он недостаточно «реален», чтобы его считать. Просто фантом информационного поля.
На фронте всё стало нагляднее. Добавили RecommendationBadge с крупным значком рекомендации и UrgencyQualityIcons — двойной индикатор, как в мобильных приложениях. Но главное изменение — источники больше не просто цифры (5 sources), теперь это кликабельные ссылки на URL. Пользователь может сразу прыгнуть на оригинальный источник вместо того, чтобы видеть размытую статистику.
На бекенде настроился enrichment loop в Crawler: при обработке трендов с Hacker News, GitHub и arXiv теперь подтягиваются tavily_citations — полный профиль цитирований. Все константы вынесли в Config: TAVILY_CITATION_BASELINES (пороги для разных источников) и AGGREGATOR_PATTERNS (чёрный список перепечатанок).
Самое интересное из истории Tavily: эта платформа появилась как ответ на хаос с информационной надёжностью. Её создатели заметили, что в эпоху AI-генерируемого контента источники становятся таким же валютой, как золото в разведке. Поэтому они решили сделать источники прозрачными и проверяемыми прямо из API.
На выходе получилась система, которая по-настоящему различает сигнал и шум. CHANGELOG.md с чёткой историей всех изменений, SCORING_V2_PLAN.md с логикой расчётов (на будущее, чтобы кто-то не сломал), и TAVILY_CITATION_APPROACH.md с подводными камнями (коих оказалось немало). Всё задокументировано, чтобы следующий разработчик не потратил неделю на обратный инжиниринг.
Что дальше? Теперь можно экспериментировать с весами urgency и quality, обучать модель на реальных данных пользователей. А Scoring V2 — это просто фундамент. Крепкий, надёжный, проверенный фундамент.
😄 Комментарий в коде: «Это должно работать» — убеждение из четырёх слов, которое разработчик дал самому себе вчера в 23:00, и он не особо в это верил.
Метаданные
- Branch:
- feat/scoring-v2-tavily-citations
- Dev Joke
- VS Code: решение проблемы, о существовании которой ты не знал, способом, который не понимаешь.
Часть потока:
Разработка: trend-analisis