Четыре-шесть часов на одну статью для Яндекс.Дзен. Исследование темы, подбор семантики, написание текста на 3000–8000 знаков, редактура, корректура, обложка. При трёх публикациях в неделю это 12–18 часов — половина рабочей недели уходит на контент, который живёт один день в ленте.
Мы построили систему, которая делает то же самое за три минуты. Без человека в цикле. Telegram-бот на 297 строках, JSON-очередь без базы данных, мультиагентный промпт на 120KB с десятью AI-ролями. На выходе — HTML-статья, DOCX-документ, промпт для Midjourney и шесть коротких постов для соцсетей.
Почему не готовые инструменты
Рынок завален AI-райтерсами: Jasper, Writesonic, ChatGPT с промптом «напиши статью». Проблема в том, что все они выдают текст, а не продукт. Статья для Дзена — это не просто последовательность абзацев. Это SEO-структура с H2/H3, читаемые абзацы не длиннее четырёх предложений, грамотный CTA в конце, обложка 16:9 и отсутствие маркеров, по которым AI-фильтры платформы режут охваты.
SMM-панели вроде SMMplanner и Amplifr умеют автопостинг, но не генерацию. Редактор Дзена — ручной ввод. Ни один инструмент не закрывает полный цикл: Telegram → AI-конвейер → статья → экспорт → обложка. Мы закрыли.
Архитектура: никаких фреймворков
Вся система работает на локальной машине с RTX 4060 под Windows 10. Ни облаков, ни вебхуков, ни платных API кроме самой LLM. Вот как это устроено:
Telegram-бот на голом HTTP-polling
297 строк Python. Без python-telegram-bot, без Flask, без вебхуков. Бот опрашивает Telegram API через urllib.request каждую секунду и хранит состояние пользователей в оперативной памяти — словарь user_id → текущий шаг.
Ключевые решения:
- State machine в памяти: menu → topicgen → platform → menu. Сбрасывается при рестарте, восстанавливается через callback_data в кнопках.
- Proactive check: каждую секунду бот сканирует директорию
queue/на готовые файлы. Нашёл → отправил в Telegram → атомарно переместил вsent/. - Lock-файл на PID: защита от повторного запуска. При старте проверяет
hostname_dzen_bot.lock— если есть,sys.exit(0). - 3 ретрая на API-запросы: функция
ap()с exponential backoff — 2 секунды между попытками. После трёх неудач возвращает{}, не зацикливается.
Callback-диспетчер — 12 обработчиков на единой elif-цепочке. Выбор категории, темы, платформы, запуск конвейера, запрос обложки, мультипликация — всё через inline-клавиатуру.
JSON-очередь вместо Redis
Никаких брокеров сообщений. Четыре типа JSON-файлов в директории queue/:
gen_{id}.json— запрос на генерацию тем (статус: pending → processing → done)req_{id}.json— запрос на полную статью (этапы 2–10)cover_{id}.json— запрос на промпт для Midjourneymultiply_{id}.json— запрос на мультипликацию контента (1 лонгрид → 6 постов)
Cron-воркер проверяет очередь каждые две минуты. Файлы в статусе processing или done пропускаются — только pending. После обработки файл атомарно перемещается в sent/ через shutil.move(). Это гарантирует, что бот не отправит статью дважды: сначала перемещение, потом отправка. Если Telegram API упал — файл уже в sent/, дубликата нет.
10 AI-ролей в одном промпте
Сердце системы — промпт v4.4 на 120KB. Десять последовательных ролей, каждая получает JSON-выход предыдущей и передаёт свой следующей:
| # | Роль | Что делает |
|---|---|---|
| 1 | Стратег & Исследователь | 8 актуальных тем, рейтинг ⭐️⭐️⭐️, тренды |
| 2 | SEO-специалист | Семантика (ВЧ/СЧ/НЧ/LSI), интент, структура |
| 3 | Контент-менеджер | Редполитика, приоритизация, график |
| 4 | Копирайтер + Эксперт | Текст 3000–8000 знаков, факт-чек, HARD BANS |
| 5 | Редактор | 5-уровневая правка |
| 6 | Шеф-редактор | Вердикт (✅/🔄/❌), эхо-проверка |
| 7 | Корректор | Орфография, типографика, Quad-pass аудит |
| 8 | Дизайнер | Промпты Midjourney (обложка 16:9 + иллюстрация) |
| 9 | Мультипликатор | 1 лонгрид → 6 коротких постов с расписанием |
| 10 | Лид-магнит | 3–5 идей бесплатных продуктов |
Каждый этап — это не просто «действуй как редактор». Это детальные инструкции с конкретными критериями оценки, форматами вывода и чек-листами. Редактор делает 5-уровневую правку: структура → логика → факты → стиль → заголовок. Шеф-редактор выносит вердикт: ✅ утвердить, 🔄 на доработку, ❌ отклонить. Корректор проходит текст четырьмя проходами (Quad-pass) — орфография, пунктуация, типографика, стилистика.
28 гардов и 16 HARD BANS
AI-модели склонны к определённым паттернам: галлюцинации фактов, «контекстное загрязнение» (когда предыдущий ответ влияет на следующий), дрейф тона, злоупотребление штампами. Мы встроили защиту на каждом уровне:
- 28 AI-гардов: Data Hallucination → факт-чек на этапе копирайтера. Context Contamination → эхо-проверка на этапе шеф-редактора. Tone Drift → проверка консистентности стиля. Jargon Sprawl → проверка читаемости.
- 52 паттерна антидетекции: обход AI-фильтров Яндекс.Дзен. Вариативность длины предложений, естественные повторы, разговорные вставки, намеренно неидеальная структура абзацев.
- 16 HARD BANS: список конструкций, которые категорически запрещены в финальном тексте. «Не просто X, а Y», «в современном мире», «следует отметить», «является», «безусловно», «несомненно» и ещё десять маркеров машинного текста.
На выходе — 0 HARD BANS в финальном тексте и пять признаков человеческого письма: личный опыт, риторические вопросы, разговорные обороты, микро-отступление от темы, сторителлинг.
Оптимизация: с 5.5 минут до 3
Промпт на 120KB — это много. Каждый запрос к LLM с полным промптом занимал 5.5 минут. Анализ показал, что узкое место — не сама генерация, а передача контекста. Этап 1 (генерация тем) и Этап 8 (дизайнерские промпты) не требуют полного контекста редакционной цепочки.
Мы разделили промпт на четыре модуля:
- topic_generator.md (32KB) — только Этап 1. Правила генерации тем и заголовков. Отрабатывает за 10–20 секунд.
- multieagent_zen_polished.md (120KB) — этапы 2–10. Полный конвейер для статьи. 2–3 минуты.
- cover_generator.md (30KB) — только Этап 8. Промпты для Midjourney.
- multiply_generator.md (29KB) — только Этап 9. Мультипликация контента.
Результат: темы генерируются за 10–20 секунд вместо 5.5 минут. Статья — за 2–3 минуты. Полный цикл с десятью этапами (премиум-режим) — 5.5 минут. Пользователь не ждёт: бот работает асинхронно, уведомление приходит когда всё готово.
Экспорт: не просто текст
После генерации статья сохраняется локально в четырёх форматах:
- HTML — готовая к публикации страница с мобильной вёрсткой. Абзацы ≤4 предложений, H2/H3, CTA-блок. Поддерживает три площадки: Дзен, VC.ru, Telegram.
- DOCX — для редакторов, которым нужен документ в привычном формате.
- cover_{id}.txt — промпт для Midjourney. Обложка 16:9 в стиле статьи.
- multiply_{id}.txt — 6 коротких постов (пн–сб) для соцсетей. Каждый — самостоятельный микро-контент, не просто нарезка из лонгрида.
Всё сохраняется в output/articles/ с датой и темой в имени файла.
7 багов, которые стоили нервов
Ни одна система не работает с первого раза. Самые болезненные:
1. ap() возвращал {} при первой ошибке. Telegram API иногда отвечает 429 или 502. Функция ap() сразу возвращала пустой словарь, offset не обновлялся — бот зацикливался на одном апдейте и спамил запросами. Добавили 3 ретрая с паузой 2 секунды.
2. Дубль «Статья готова!» каждую секунду. Бот находил готовый файл в queue/, отправлял сообщение, но не перемещал файл в sent/ — на следующей итерации он находил его снова. Решение: shutil.move() до отправки сообщения.
3. Двойные ответы на /start. Два экземпляра бота запускались одновременно. Добавили lock-файл с PID процесса — при старте бот проверяет его的存在 и делает sys.exit(0) если файл уже есть.
Остальные четыре бага — пропуск апдейтов из цикла polling, Unicode-эмодзи в кнопках, двойной блок проверки req_, некорректная обработка offset = -1. Каждый — урок о том, что в реальном продакшене важно не только «работает», но и «не ломается».
Что в итоге
Цифры после отладки:
- 297 строк бота — без зависимостей, без фреймворков
- 2–3 минуты — полный цикл от темы до статьи
- 5.5 минут — с полными 10 этапами (премиум-режим)
- 7 760 знаков — средний объём статьи
- 0 HARD BANS в финальном тексте
- 20+ статей сгенерировано за тестовый период
- 5 признаков человеческого текста
Главный вывод не в цифрах. Главный вывод в том, что полноценный редакционный конвейер можно построить без облаков, без фреймворков и без команды редакторов. Один Python-скрипт, один промпт, одна видеокарта. Всё.
Почему это важно для бизнеса
Контент-маркетинг — один из немногих каналов, который не дорожает со временем. В отличие от контекстной рекламы, где ставки растут, качественная статья продолжает приносить трафик месяцами. Но узкое место — время производства.
Dzen Conveyor снимает это ограничение. Вы отправляете тему в Telegram, через три минуты получаете готовую статью. Не черновик, не «набросок, который надо допилить» — готовый к публикации материал с вёрсткой и обложкой.
Для агентств, ведущих десятки блогов, и для компаний с контент-стратегией это означает переход от модели «1 редактор = 3 статьи в неделю» к модели «1 оператор = 30 статей в неделю». Не увольнение редакторов — переключение их с рутины на стратегию и контроль качества.
Подробнее — в кейсе Dzen Conveyor.
Нужен конвейер контента для вашего бизнеса?
Проектируем, запускаем, обучаем вашу команду. Без облаков и подписок.