Экспертиза · Автоматический контент
Поток, который сам ищет темы дня, пишет статью, переводит её на девятнадцать языков и публикует — но только после прохождения ворот проверки, которые, когда не могут проверить, ничего не публикуют.
Движок написан, полностью, и находится прямо в репозитории этого сайта: восемь этапов, 1.706 строк, системный таймер, который запускается ежедневно в 00:30 UTC. Важна не генерация, а ворота: пять локальных проверок, десять запрещённых выражений и дополнительная проверка, которая ищет имена клиентов без согласия, выдуманные цифры и награды, которых у нас нет. Если ворота не могут запуститься, ничего не публикуется.
Уже построено«delivered», потому что работа существует как файлы, которые вы можете открыть, а не как описание: `scripts/content-engine/` в репозитории megapromoting.com, 17 файлов, 1.706 строк TypeScript, unit systemd с таймером, восемь связанных этапов и журналы запусков. С оговоркой, которую говорим мы, а не узнаёте вы: **единственный полный запуск в журналах не опубликовал ни одной статьи.** Ворота остановили все три — два раза потому, что проверка вообще не смогла выполниться, в третий раз из-за отсутствующего поля в заголовке. `publish` остался пустым, IndexNow получил ноль адресов. Запуск был локальным, на рабочей станции, и длился два с половиной часа, то есть больше лимита в 60 минут, заданного в unit systemd, — значит, на сервере он был бы остановлен. Мы не можем подтвердить извне, что движок сегодня работает на сервере, и не утверждаем этого.
Автоматизация, которая сама пишет и публикует, — это место, где проще всего пообещать то, что нельзя сделать. Модель пишет тысячу убедительных слов о чём угодно, в том числе о том, чего не было, и делает это так же бегло. Если между моделью и кнопкой публикации ничего нет, вы построили машину для размещения ошибок в интернете, на двадцати языках, каждую ночь. Вся работа — в том, что находится между ними.
Наш поток состоит из восьми этапов. Он собирает темы из открытых источников, даёт им оценку от 0 до 100 за релевантность, отбрасывает всё ниже 50, выбирает первые N по правилу разнообразия, чтобы не получилось десять статей об одном и том же, пишет статью на румынском, переводит её на девятнадцать языков, пропускает через ворота и только потом публикует. Каждый этап записывает свои затраты и результат в журнал, чтобы запуск можно было восстановить позже.
У ворот два слоя. Первый — локальный и ничего не стоит: заголовок должен существовать и содержать title, description и keywords; текст должен быть длиннее 1.200 слов; в нём должно быть не менее трёх подзаголовков, не менее трёх внутренних ссылок и раздел вопросов минимум с тремя парами; и он не должен содержать ни одного из десяти маркетинговых выражений, которые мы внесли в чёрный список. Второй слой — это модель, которая ищет другое: имя клиента без доказательства согласия, выдуманную статистику, неверные утверждения о том, что можем мы, и награды, которых у нас нет — список реальных написан в проверке, а всё остальное помечается.
В цепочке есть человеческое утверждение, и мы говорим об этом как об аргументе, а не как об оправдании. Статьи, не прошедшие жёсткие проверки, отбрасываются, а не публикуются. Те, что прошли жёсткую проверку, но получили пометки от второй проверки, сохраняются с отметками, чтобы человек мог посмотреть. А если проверка не может выполниться — например, потому что служба моделей не отвечает, — статья считается не прошедшей. Fail-closed, а не fail-open. Так и произошло при единственном полном запуске в журналах, поэтому ничего не было опубликовано.