kravtsov / lab
open for work
kravtsov / lab

Как я собрал автономный AI новостную систему за полтора месяца

7 апреля 2026 г. · 7 мин

Полтора месяца назад у меня было семь воркфлоу в n8n для новостного пайплайна. Каждый делал что-то своё. На бумаге красиво. На практике — постоянные затыки. Где-то новость застряла, непонятно где. Исправляешь одно — ломается другое.

Семь воркфлоу — семь точек отказа. Каждая ломается по-своему.

Сегодня та же задача решена иначе: 160 уникальных источников, 7127 записей в базе, 11 воркеров, 5 AI-агентов, локальная LLM на домашнем мини-ПК — и оркестратор, которому я просто пишу задачу в Telegram.

Без n8n. Без ручного управления. Почти без моего участия.

Вот как это получилось.


Всё началось с хаоса в n8n

Я не программист в классическом смысле. Начинал с n8n, Make, no-code. Строил новостной пайплайн для своего Telegram-канала @news_all_ai и постепенно обрастал воркфлоу.

Один тянул новости с источников. Второй чистил дубли. Третий переводил. Четвёртый генерировал картинки. Пятый, шестой, седьмой.

Работали. Проблема в другом: когда что-то ломалось — я ведь не знал где. n8n показывал “выполнен успешно”, а новость в канале не появлялась. Каждое изменение — квест: что именно сломал?


Инструменты, которые изменили подход

Начинал в Cursor. Он же настраивал домашний мини-ПК: Ubuntu, llama.cpp, Vulkan, оптимизация под архитектуру железа. Прокси, VPN, база данных, первые версии пайплайна — тоже там.

Perplexity шёл рядом на каждом этапе. Для меня это лучший исследовательский инструмент — когда нужно разобраться в архитектурном решении или понять как работает технология, иду туда первым делом. Глубже него я ничего не видел.

Потом попробовал Claude Code. Это изменило всё.

Я скинул ему все семь воркфлоу и написал примерно так:

“Вот мои семь воркфлоу. Они делают новостной пайплайн. Мне кажется это можно сделать лучше. Сделай.”

Ждал вопросов, уточнений, долгих итераций. Ничего такого.

Он на одном дыхании предложил архитектуру и написал Python-пайплайн, который заменил все семь воркфлоу. Один проект вместо семи. Честно — сильнейшее, что я видел в работе с AI.

Я не читаю этот код как книгу. Но вижу что работает. И могу описать что хочу изменить — и получаю изменение.


Мини-ПК как часть системы

Отдельная история с переводом.

Использовать облачные API для каждой новости из 160 источников каждые 15 минут — дорого. Поэтому перевод работает на локальной LLM: Qwen 3.5 (qwen3.5-9b-q5_k_m.gguf) через llama.cpp на домашнем мини-ПК.

Cursor настроил всё под железо: Vulkan, оптимизация под архитектуру процессора. Перевод работает быстро, бесплатно, локально — данные никуда не уходят. По-моему, это и есть правильный способ работать с локальными моделями: не как с игрушкой, а как с частью инфраструктуры.

На том же мини-ПК живёт OpenClaw — о нём дальше.


Архитектура: 11 воркеров, каждый знает своё место

Пайплайн сейчас выглядит так:

collector → scraper → deduplicator → ai_filter → translator (локальный Qwen)
    → llm_editor → image_worker → publisher

Плюс фоновые: github_discovery, video_discovery, video_cleanup, hitl.

Каждый воркер — отдельный Python-процесс с одной задачей. Никаких “семь в одном”.

collector собирает сырые новости из RSS и API примерно 160 источников: Arxiv, TechCrunch, The Verge, Wired, Anthropic Blog, OpenAI Blog, Habr, VC.ru, GitHub и ещё полторы сотни. Каждые 15 минут.

scraper вытаскивает полный текст там, где RSS даёт только анонс. Раньше использовал облачный Jina Reader — у него 10 млн бесплатных токенов, но на таком объёме они улетают быстро. Когда перенёс пайплайн на Python, подняли свой инстанс Jina на сервере. Теперь без лимитов.

deduplicator убирает дубли по семантическому сходству — не по точному тексту. Это важно: один и тот же релиз с пяти источников не пройдёт пять раз.

ai_filter оценивает каждую новость: relevance_score от 0 до 100. Ниже 75 — в архив. Это, собственно, главный фильтр во всей цепочке.

translator переводит на русский через локальный Qwen 3.5 на мини-ПК.

llm_editor форматирует под стиль канала: заголовок с эмодзи по категории, структурированный текст, атрибуция. Основной режим — MiniMax M2.7, локальный Qwen как резерв.

image_worker генерирует обложку, publisher публикует по расписанию.

github_discovery мониторит GitHub на новые AI-репозитории: новые релизы, резкий рост звёзд.

hitl флагует посты, которые требуют ручной проверки. Human-in-the-loop — иногда без меня всё же не обходится.

Снимок экрана 2026-03-30 в 23.57.31.png


Что происходит с каждой новостью

Вот как это выглядит в реальном времени:

18 собрано (новые)
  → 58 в filter queue
    → pending selection
      → 4 translation queue (локальный Qwen)
        → 48 text approval
          → image queue
            → 2 final approval
              → опубликовано

Каждый этап — отдельный статус в базе. Застряло — видно сразу и на каком шаге. Именно этого мне не хватало в n8n. Там всё либо “ок”, либо непонятно.

Снимок экрана 2026-03-30 в 23.46.54.png


Из 160 источников — 8 постов в день

Пайплайн не постит всё подряд.

За неделю система собирает тысячи материалов. На выходе — 8 постов в день, прошедших несколько уровней отбора:

  1. relevance_score ≥ 80 (ai_filter)
  2. LLM-редактор проверяет, ставит approved или needs_review
  3. Pipeline Manager распределяет по слотам

Видно же по таблице, где реально есть сигнал, а где просто объём:

ИсточникСобрано (7д)Pass rate
Anthropic News2100%
MarkTechPost1050%
The Next Web8021%
iXBT.com50914%
TechCrunch13813%

iXBT пишет много, но большинство не по теме канала. Anthropic пишет мало — зато каждый материал попадает в цель.

Снимок экрана 2026-03-30 в 23.51.52.png


Расписание: слоты вместо “постить когда накопилось”

Публикации идут по четырём слотам:

  • Утро (08:00-11:00) — 2 поста
  • День (12:00-16:00) — 2 поста
  • Вечер (18:00-22:00) — 2 поста
  • Ночь (00:00-06:00) — 2 поста

Итого: 8 постов в день. Раньше было 28. Это был шум, а не канал.

Снимок экрана 2026-03-30 в 23.57.23.png


OpenClaw и агенты: оркестрация вместо ручного управления

Воркеры — исполнители. Агенты — те, кто принимает решения. Разница, по-моему, ключевая. Без неё это просто автоматизация, а не система.

OpenClaw — платформа для AI-агентов с доступом к инструментам. Агент не просто отвечает текстом: он вызывает API, меняет настройки, запускает процессы. Живёт на том же домашнем мини-ПК.

Координатор — оркестратор внутри OpenClaw. Он управляет всеми остальными агентами пайплайна: раздаёт задачи, следит за выполнением, реагирует на сбои.

Сейчас в пайплайне 5 агентов плюс аналитик:

АгентРольРасписание
AgentEditorШеф-редактор: выбор кандидатов по слотам, approve-text/approve-final07/13/19/01 ВЛАД
AgentLLMEditorПереработка текстов под формат каналакаждые 20 мин
AgentPipelineManagerМенеджер потока: наблюдение → решение → действие → лог4 раза в сутки
AgentSourceAuditorАудит источников, отключение мёртвыхеженедельно
AgentAnalystАналитика: очередь, срезы, темывечер 21:05

Координатор управляет ими всеми. Я пишу ему в Telegram:

“Снизь лимит публикаций до 8 в день”

Он смотрит в API, меняет настройку, отвечает: “Готово, max_per_day = 8”.

Без терминала. Без кода.

Снимок экрана 2026-03-30 в 23.59.10.png

Снимок экрана 2026-03-31 в 00.23.22.png


Дашборд: всё видно сразу

Дашборд рос вместе с системой. Сначала просто статусы воркеров. Потом метрики. Потом полноценный интерфейс — с обзором, агентами, источниками, очередью, воркерами, слотами, опубликованными, настройками, GitHub Discovery.

Когда что-то ломается — вижу сразу. Не гадаю где застряло. Открываю дашборд — всё на экране.

Снимок экрана 2026-03-30 в 23.58.10.png

Снимок экрана 2026-03-30 в 23.58.31.png


Что работает без меня

Сбор из 160 источников каждые 15 минут. Фильтрация и дедупликация. Перевод через локальный Qwen — бесплатно. LLM-редактура. Генерация картинок. Публикация по расписанию. Мониторинг GitHub. Ежедневная аналитика и отчёты.

Мне остаётся: посмотреть дашборд раз в день, написать Координатору если нужно что-то поменять, иногда одобрить пост вручную через HITL. Всё.

Снимок экрана 2026-03-31 в 00.01.59.png


Главный инсайт

Начинал в Cursor. Perplexity помогал разобраться в архитектуре. Но по-настоящему понял, что значит “описать задачу и получить работающую систему” — только когда пересел на Claude Code.

Я не пишу код. Я принимаю решения и ставлю задачи.

Семь воркфлоу в n8n превратились в единый Python-пайплайн с агентами за полтора месяца. Хаос — в систему, которую видно насквозь.

Если бы не попробовал — до сих пор чинил бы воркфлоу номер восемь.


Канал: @news_all_ai — посмотреть что выдаёт система на выходе.

Вопросы про архитектуру, OpenClaw, локальные LLM или как именно это строилось — пишите в комментарии, отвечу.


Теги: AI, автоматизация, Python, агенты, Telegram, новостной пайплайн, Claude Code, OpenClaw, локальные LLM, llama.cpp