Промпт был правильный: семь дефектов, которые живут не в формулировке
Коротко. За месяц работы над конвейером персональных книг мы нашли у себя семь дефектов генерации. Ни один из них не был ошибкой формулировки: промпт был написан верно, а до модели доезжало другое — слово «объект» вместо сюжета, пустая скобка вместо описания, поле, которое читалось и не использовалось. Все семь молчали: ничего не падало, книга собиралась, результат был гладким и не тем.
Почему это отдельный класс дефектов
Текст промпта — единственная часть системы, которую читают люди. Его вычитывают, спорят о формулировках, переписывают по десять раз. А путь от анкеты до этого текста проходит через десяток функций, и на этом пути нет ни читателя, ни падений: подстановка объекта вместо строки не роняет сборку, пустое поле не роняет запрос, неиспользованная переменная не роняет вообще ничего.
Получается тихий отказ. Книга собралась, картинки нарисовались, текст связный — и только человек, который держит в голове, что просил веснушки, замечает, что их нет. В нашем случае таких человек был один: владелец, вычитывающий каждую книгу перед выдачей.
Семь случаев
Сюжет книги игнорировался: получалась гладкая история не про то
До модели доезжало: «[object Object]» вместо двенадцати сюжетных битов
Биты лежат массивом объектов, а в текст промпта подставлялись как строка. Язык честно превратил объект в слово «объект» — ошибки не было ни одной, промпт собрался, запрос ушёл, модель получила бессмыслицу и вежливо написала что-то своё.
Починено: Сборка промпта из битов вынесена в отдельную функцию с тестом, который читает получившийся текст и требует найти в нём содержание каждого бита.
28 июля 2026
Веснушки и очки, отмеченные в анкете, на рисунке не появлялись
До модели доезжало: Ничего: признак молча исчезал по дороге
В анкете это галочки, то есть булево значение, а генератор ждал строку с описанием. Пустая строка — это ложь в булевом смысле, и ветка «добавить в промпт» не выполнялась ни разу.
Починено: Признаки переводятся в текст в одном месте и с явным словарём: галочка «веснушки» превращается во фразу, а не в true.
28 июля 2026
У второго героя без описания внешности пропадали волосы
До модели доезжало: «(волосы: , глаза: )»
Внешность второго героя необязательна — у кота или «друга со двора» цвета глаз может не быть. Шаблон подставлял пустые значения, и модель читала пустую скобку не как «неизвестно», а как «нет». Это худший вид дефекта: он выглядит как выполненная инструкция.
Починено: Неуказанное не попадает в промпт вовсе. Пустое поле должно исчезать, а не подставляться пустым.
3 августа 2026
Бабушка выходила девочкой с седыми волосами
До модели доезжало: «girl, about 68 years old»
Возраст мы починили, а подлежащее осталось прежним: в промпте всегда стояло girl или boy, потому что портрет строился тем же путём, что и главный герой. Промпт противоречил сам себе, и в таком случае модель слушает существительное, а не число.
Починено: Существительное считается от возраста вместе с самим возрастом, и роль («бабушка или дедушка») задаёт оба. Проверено картинками до и после — двенадцать рублей.
16 августа 2026
Цвет волос и глаз держался только на референсе и плыл в половине сцен
До модели доезжало: Ничего: поле приходило в генератор и не использовалось
Описание внешности честно доезжало до функции, которая собирает сцену, и там не читалось ни разу. Такой дефект не ловится ни тестом промпта, ни глазами: в коде переменная есть, в промпте её нет, и заметно это только на десятке готовых книг.
Починено: Внешность уходит в промпт каждой из двенадцати сцен и страхует лицо там, где модель достраивает его сама.
6 августа 2026
Праздник, ради которого заказывали книгу, в тексте не упоминался
До модели доезжало: Ничего: повод терялся между лендингом и промптом
Слаг повода писался в заказ в одном написании, а искался в другом. Совпадения не было, ветка «вплести праздник в сцены» не выполнялась, книга получалась хорошей и не про день рождения.
Починено: Один словарь поводов на всех и функция приведения к канону: любое написание, включая старое, читается одинаково.
3 августа 2026
Мини-сказка про девочку писалась в мужском роде
До модели доезжало: Ничего: переключатель пола не уходил в тело запроса
Форма показывала выбор пола, и он никуда не отправлялся. Модель по-русски вынуждена выбрать род сама — и выбирала мужской, потому что шаблон-заготовка был написан в нём.
Починено: Пол уходит в запрос, роут принимает его схемой и задаёт роду явную строку в промпте.
16 августа 2026
Три вывода, которые мы забрали себе
Первый: пустое поле должно исчезать, а не подставляться пустым. «(волосы: , глаза: )» — это не отсутствие информации, а утверждение об отсутствии волос. Модель читает шаблон буквально, и хуже всего то, что такой дефект выглядит как выполненная инструкция: в промпте есть скобка, в скобке есть двоеточие, всё на месте.
Второй: когда число спорит со словом, побеждает слово. Промпт «girl, about 68 years old» давал девочку с седыми волосами — описание внешности доезжало, а возраст нет. Мы проверили это двумя картинками за двенадцать рублей вместо часа рассуждений о том, как оно должно работать.
Третий: проверять надо получившийся текст, а не код. Тест «функция вызвана» пропустил бы шесть случаев из семи. Тест, который читает собранный промпт и ищет в нём слово «веснушки», не пропустил бы ни одного. Все наши промпты теперь закрыты такими проверками — они читают текст ровно так, как его прочтёт модель.
Чего в этом списке нет
Дефектов самой формулировки — они у нас тоже были, но живут в другом разборе. Там про то, что запрет в промпте работает как подсказка (написали «без паспарту» и получили серию кадров в паспарту), и про то, что описание настроения вместо техники заставляет модель рисовать носитель: холст на стене внутри лесной сцены. Это исследование про похожесть лица, раздел «что ломалось по дороге».
Наш вывод
Если генерация выдаёт связный результат не про то, о чём просили, — начинать надо не с переписывания промпта. Надо напечатать текст, который реально ушёл в модель, и прочитать его глазами. В шести случаях из семи мы находили ответ в первой же строке.
Что из этого получается в итоге, видно бесплатно: превью героя и обложки собирается по фотографии до всякой оплаты.
Собрать превью по фотоСоседние исследования: сколько стоит собрать книгу и один эпизод для четырёх и для восьми лет. Все данные — в разделе «Данные и исследования».