TL;DR
- ContentCombine — мультинишевое ядро для сбора контента из RSS, Telegram и сайтов, с нормализацией, скорингом и склейкой повторов в сюжеты.
- При переносе с игр на SEO и AI вылезли entity blobs, старые статьи под видом свежих, молчащие фиды и ложные тренды.
- LLM-недетерминизм в проде требует дополнительной фильтрации: без неё дайджест превращается в шум.
Разбор
ContentCombine стартовал как движок для игровых новостей: собирал RSS, Telegram-каналы и сайты, нормализовал заголовки и даты, считал скор (по свежести, авторитетности источника и частоты упоминаний), склеивал дубли в сюжеты. Всё работало — до переноса на SEO и AI. Первая проблема: entity blobs. В игровых новостях сущности чёткие (названия игр, студий), а в SEO/AI — размытые («алгоритмы Google», «нейросети»). Алгоритм начал склеивать статьи про разные обновления одного сервиса в один сюжет. Решение — добавить взвешенное эмбеддинг-сравнение с порогом 0.85 по cosine similarity, но это увеличило latency на 30%.
Вторая: старые статьи под видом свежих. Многие SEO-блоги перепубликуют контент с обновлённой датой. ContentCombine детектил это по хэшу контента и мета-полям lastmod — если разница между created и lastmod > 3 дней, статья помечалась как «рецикл» и получала пониженный скор. Команда: if (lastmod - created > 3 days) { score *= 0.5 }. Третья: молчащие фиды. Некоторые Telegram-каналы по AI выдают 0 постов неделями, а потом — 50 за час. Пришлось ввести адаптивный polling с backoff (если пусто > 3 циклов — увеличить интервал до 6 часов, после всплеска — вернуть 15 минут).
Ложные тренды — отдельная боль. Например, всплеск упоминаний «ChatGPT-5» оказался фейком от одного агрегатора. Фильтр: если >80% упоминаний из одного источника — тренд блокируется. LLM-недетерминизм в проде (GPT-4 для суммаризации дайджеста) давал разные результаты на одинаковых данных. Решение — seed фиксация и temperature=0.2, но даже так иногда вылетают абсурдные заголовки. Пришлось добавить post-hoc валидацию regexp на ключевые слова.
Выводы
- Мультинишевое ядро требует не только смены источников, но и адаптивной фильтрации сущностей и дат — иначе дайджест забивается шумом.
- LLM-недетерминизм в продакшене решается seed-фиксацией и валидацией, но не на 100% — нужен fallback на rule-based суммаризацию.
- Ложные тренды и молчащие фиды — типовые грабли для контент-агрегаторов, их лучше обрабатывать на уровне скоринга, а не постфактум.
Нужна такая автоматизация? Обсудить проект в Telegram: https://t.me/Cvister0