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

от автора

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

Итог: семь воркфлоу — семь точек отказа. И каждый ломается по-своему.

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

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

Вот как это вышло.


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

Я не программист в классическом смысле. Еще год назад я впервые узнал о n8n и no-code системах. Я строил различные автоматизации такие как Rag системы, автоматизация получения различных данных, обработка картинок, личные ассистенты и многое другое.

Затем я захотел построить свою новостную систему, создал канал, начал делать воркфлоу, сделал один, второй, третий, добавил генерацию картинок для каждой новости, потом я понял что так не очень хорошо получается и доработал воркфлоу так, чтобы он сначала парсил новости и тянул оттуда оригиналы картинок а затем уже если не нашел то запускал генерацию по смыслу. Так я создал полноценную систему для своего Telegram-канала @news_all_ai и постепенно обрастал воркфлоу.

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

Они работали. Проблема в другом: когда что-то ломалось — было порой сложновато что-то нормально настроить и добиться стабильности. Допустим, n8n показывает что ворфлоу «выполнен успешно» но результат на выходе пустой, итог вся система сыпется из-за одной проблемы.


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

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

Всё это это время я параллельно всё обсуждал с Perplexity. Использую его — когда нужно разобраться в архитектурном решении или понять, как работает технология.

В целом первая рабочая Новостная система появилась когда я решил в очередной раз попробовать Claude Code. Кстати я был очень удивлен и доволен результатом.

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

«Вот мои семь воркфлоу. Они сейчас работают на моем сервере n8n, все это работает но постоянно происходят сбои, ты можешь перегнать эти воркфлоу в питон и запустить проект в контейнере на моем сервере.»

Клод задал мне несколько уточняющих вопросов, предложил архитектуру, и приступил к выполнению задачи. Буквально в течение часа он запустил готовый проект.
Затем я просто попросил его прогнать систему целиком и вот тут-то я был удивлен насколько всё это работает быстрее и без задержек.

Итог: один проект вместо семи и полностью работающая система но пока только с ручным утверждением. Этот момент мы с ним обсудили на этапе вопросов.

Что самое интересное — все сделал ИИ и я не написал нистрочки кода.


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

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

Использовать облачные 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 — она достаточно шустрая и неплохо с этим справляется.

image_worker — ищет и выдергивает картинки, а в случае отсутствия запускается генерация.

publisher — публикует по расписанию.

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

hitl (Human-in-the-loop) — флагует посты, которые требуют ручной проверки.

Админка  —  наблюдаю за работой Веркеров

Админка  —  наблюдаю за работой Веркеров

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

Поток в реальном времени:

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

Каждый этап — отдельный статус в базе. Если что-то застревает я могу это увидеть сразу и на каком именно шаге. Стало реально проще понимать в чем проблема и что нужно поправить.

Админка - наблюдаю за этапами прохождения новостей.

Админка — наблюдаю за этапами прохождения новостей.

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

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

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

  1. relevance_score ≥ 80 (ai_filter)

  2. LLM-редактор проверяет и ставит approved или needs_review

  3. Pipeline Manager распределяет по слотам

В таблице источников видно pass rate по каждому:

Источник

Собрано (7 дн.)

Pass rate

Anthropic News

2

100%

MarkTechPost

10

50%

The Next Web

80

21%

iXBT.com

509

14%

TechCrunch

138

13%

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

Админка - список rss источников.

Админка — список rss источников.

Pass rate помогает мне понять какие источники оставить а какие отключить. Уже в первую неделю стало ясно что порядка 20 источников совсем пустые и можно безопасно их отключить.


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

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

  • Утро (08:00–11:00) — 2 поста

  • День (12:00–16:00) — 2 поста

  • Вечер (18:00–22:00) — 2 поста

  • Ночь (00:00–06:00) — 2 поста

Почему 8 постов в день? Раньше было 28 — это был шум, люди читали последние 1-2 новости а выше не листали.. Теперь меньше, но каждый проходит отбор и теперь меньше шансов что его пропустят.

Админка - очередь ожидания публикации

Админка — очередь ожидания публикации

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

Я изначально когда проектировал эту систему принял решение что на сервере просто бэкэнд а решение о публикации кто-то должен принять. Сначала это делал я каждый день и не очень системно. Затем появился OpenClaw — он как раз был тогда на пике восхождения.

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

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

Сейчас 5 агентов работают именно с новостной системой включая аналитика:

Агент

Роль

Расписание

AgentLLMEditor

Переработка текстов под формат канала

каждые 20 минут

AgentPipelineManager

Менеджер потока: наблюдение → решение → действие → лог

4 раза в сутки

AgentSourceAuditor

Аудит источников, отключение мёртвых

еженедельно

AgentAnalyst

Аналитика: очередь, срезы, темы

вечер 21:05

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

«Координатор, снизь, пожалуйста, лимит публикаций в пайплайне до 8 в день»

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

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

Прошу Координатора скинуть список источников новостей

Прошу Координатора скинуть список источников новостей
Ответ координатора по количеству Агентов которые работают с новостной системой

Ответ координатора по количеству Агентов которые работают с новостной системой

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

Дашборд появился практически сразу после запуска системы и постепенно рос вместе с ней. Сначала я добавил просто статусы воркеров. Потом еще появлялись идеи и потребности в метриках. В итоге постепенно у меня получился полноценный интерфейс для анализа работы моего пайплайна.

Сейчас мы имеем следующие вкладки: обзор, агент, источники, очередь, воркеры, слоты, опубликованные, настройки, GitHub Discovery.

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

Админка - опубликованные новости

Админка — опубликованные новости
Админка GitHub Discovery.

Админка GitHub Discovery.

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

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

Всё это работает само. Пока я занимаюсь своими делами или сплю.

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

Рабочая группа с 8 агентами.

Рабочая группа с 8 агентами.

Что важно:

Есть много хороших инструментов, а в текущее время все это стало на столько доступно что теперь создать реально что то интересное достаточно легко. Можно без знания того же программирования создать полноценно работающий продукт.
Perplexity, Claude, Cursor — это всё инструменты и разобраться в них сейчас сможет практически каждый, степень вхождения опустилась до минимума.

И да, я не написал ни строчки кода, я только ставил задачи, обсуждал, принимал решения и оркестрировал.

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

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


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

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

ссылка на оригинал статьи https://habr.com/ru/articles/1023446/