Такие дыры я разбираю у себя регулярно - когда собираю очередной цех и когда чиню то, что уже сломалось. Если интересно смотреть на это в реальном времени, а не только в виде готового разбора, - заглядывайте в канал.
Что случилось в первом живом прогоне
Коротко: текст на 1865 знаков получил от проверки голоса оценку 100 из 100 без единого замечания и содержал выдуманную цитату.
Пост описывал случай, разобранный днём раньше: карточку-обложку, на которой вместо макета отрисовалась страница ошибки браузера. Текст утверждал: «вместо заголовка вылезло английское this site can't be reached». На самом деле программа распознавания текста на картинке - Vision - прочитала на скриншоте русское «Не удается получить доступ к сайту» и код ошибки ERR_INVALID_URL. Английской фразы не было нигде - ни в исходном брифе задания, ни на самой картинке. Рядом сидела вторая выдумка: текст утверждал, что файл открыли руками «через час», хотя проверка шла сразу после генерации.
Обе детали звучали как естественная часть истории. Ни одна не была правдой.
Что вообще измеряет оценка голоса
Коротко: проверка голоса меряет девять признаков формы. Это длина текста, наличие эмодзи, как звучит первая строка, как заканчивается текст, есть ли тире не на месте - и ещё несколько похожих формальных правил.
Все девять текст прошёл честно. Длина в норме, эмодзи там, где положено, первая строка цепляет, финал закрывает мысль. По форме это был хороший текст. Проблема в том, что ни один из девяти признаков не отвечает на вопрос, было ли это на самом деле.
Почему форма не связана с правдой
Коротко: девять зелёных признаков формы ничего не говорят о содержании - они и не должны, это разные измерения одного текста.
Форма отвечает на один вопрос: звучит ли это как я. Содержание отвечает на другой: было ли это на самом деле. Текст может идеально попасть в голос и при этом наврать в фактах - собственно это и произошло. Оценка 100 из 100 создавала ложное спокойствие: девять зелёных галочек выглядели как подтверждение, что текст в порядке, хотя честно проверяли только одну его сторону.
Что такое фактчек и чем он отличается от проверки стиля
Коротко: отдельный скрипт fact_check.py проверяет текст по существу. Он вытаскивает цифры, цитаты в кавычках и латинские фразы и сверяет каждую с брифом задания и с файлом фактов.
Проверка голоса и проверка фактов у меня - два отдельных механизма. Один живёт в voice_check и смотрит на форму. Второй живёт в fact_check.py и сверяет источник. Если в тексте появилась цифра, цитата или иностранная фраза, которой нет ни в брифе задания, ни в facts.md, она помечается для человека - решение публиковать или переписать текст остаётся за мной, но незамеченной такая деталь мимо меня не проходит.
Как фактчек нашёл именно ту выдумку
Коротко: на том самом тексте с оценкой 100 из 100 фактчек отработал с первого запуска и указал ровно на выдуманную английскую фразу.
Скрипт нашёл в тексте английскую фразу this site can't be reached в кавычках, проверил её по брифу задания и по facts.md - и не нашёл подтверждения ни там, ни там. Пометка ушла мне на проверку вместе с остальным текстом.
Если хотите посмотреть, как устроены похожие механизмы на других моих проектах - на витрине кейсов собраны мои разработки.
Правило, которое я вынес из этого случая
Коротко: у каждой автоматической проверки нужно точно знать, что именно она измеряет - иначе пройденная проверка создаёт спокойствие там, где его быть не должно.
Запрет в промпте генерации - «НЕ выдумывать цифры, названия, кейсы и цитаты» - там был написан прямым текстом. Он не сработал: правило, живущее только в промпте, - это намерение, а не механизм. Промпт можно прочитать и всё равно ошибиться при его выполнении. Скрипт либо находит цитату в брифе, либо нет.
Тот же принцип сработал в другом цехе завода
Коротко: проверка, что файл создался и весит сколько надо, доказывает лишь, что что-то отрисовалось.
За день до истории с цитатой я столкнулся с похожей ловушкой в цехе обложек. Карточки к постам у меня собираются вёрсткой по шаблону, а не генератором изображений - так текст на карточке всегда набран верно. Первый прогон отдал файл нужного размера 1920 на 1080 с кодом успеха. На самой картинке при этом была страница ошибки браузера ERR_INVALID_URL: в рендер ушёл относительный путь вместо абсолютного. Проверка размера файла этого не видела - окно ошибки браузера ровно такого же размера, как нужная карточка.
Поймали это чтением текста с готовой картинки через тот же Vision. Скрипт теперь после рендера читает карточку обратно и требует, чтобы на ней нашлось слово из заголовка и не нашлось примет окна ошибки. Файл может появиться и весить сколько нужно - это ещё не доказывает, что на нём то, что заказано.
Где эта проверка стоит в общем конвейере
Коротко: фактчек - один шаг из нескольких в очереди идея → материалы → одобрение → публикация → метрика, и он не единственная страховка.
Материал не уходит на публикацию сам. Он проходит цеха, попадает на одобрение, и только после этого - на публикацию. Publish-desk, который разносит готовые материалы в Сетку и TenChat, я проверил репетицией. В репозитории над цехами параллельно работают два агента - это тоже требует чёткого критерия готовности: когда результат действительно готов, а когда скрипт просто отработал без ошибок.
Та же система дала мне другой урок, не про факты. 5 сентября черновики утекли через Vercel, и я снёс деплой. Разные классы ошибок, один и тот же корень: то, что выглядит рабочим - опубликовалось, отрендерилось, задеплоилось, - ещё не значит проверенным.
Как это применить к своему процессу с текстами от нейросети
Коротко: постройте отдельную проверку фактов рядом с проверкой стиля, а не внутри неё, и не давайте ей блокировать публикацию.
Порядок, который сработал у меня. Сначала честно назвать, что уже проверяет ваша текущая оценка - длину, тон, структуру, эмодзи - и признать, что это форма, а не содержание. Затем собрать отдельный список того, что нельзя выдумывать: цифры, цитаты в кавычках, названия, иностранные фразы. Затем сверять каждый такой элемент с исходным брифом или базой фактов, а не с общим ощущением правдоподобия. И финальное решение важно оставлять за человеком: проверка лишь помечает подозрительное место, а публиковать или переписывать текст решаю я сам.
Что эта проверка не ловит
Коротко: фактчек находит то, чего нет в источнике, но не подтверждает, что источник сам по себе верен, и не ловит логические ошибки без цитат и цифр.
Если в facts.md или в брифе задания уже стоит неверное число, скрипт его пропустит - он сверяет текст с базой, а не базу с реальностью. Пересказ без прямых цитат, обобщение без цифр, оценочное суждение - тоже мимо этого механизма, там просто нечего сверять построчно. Это не повод отказаться от проверки, а повод помнить её границу: она закрывает один конкретный класс ошибок. Полную правдивость текста она не подтверждает и не обязана.
Источники
Мои рабочие записи по проекту - записи от 24 и 25 августа 2026 года, где разобраны оба прогона: цеха обложек и цеха текста.
Если собираете похожий конвейер у себя - на витрине кейсов можно посмотреть другие мои проекты.
