moderation: low ничего не меняет и какой метод позволяет найти слово-триггер примерно за 20 вызовов.
Случай: веб-приложение отображает, API возвращает ошибку о сексуальном содержании
Клиент использовалgpt-image-2.5-sunburst для генерации листа персонажа (крупный план лица слева, развороты спереди / сбоку / сзади справа). Запрос:
Я понимаю, что дело в безопасности контента, но в веб-приложении ChatGPT тот же запрос работает. Объясните, почему веб-приложение его пропускает.В промпте нет ничего откровенного. Это всего лишь «гламурная женщина + разворот + белый фон». Для обращения в формате «Я не написал ничего плохого, но запрос заблокировали» нужен совершенно иной подход, чем для обращения «Я написал что-то плохое, и запрос заблокировали».
Сначала: какой уровень блокирует запрос?
У моделей изображений есть два защитных уровня. Они срабатывают по-разному, и диагностировать их нужно по-разному:Почему веб-приложение проходит проверку
Это та же мысль, что и в разделе Как получать удовлетворительные изображения: веб-приложение — это агент, а API — один атомарный вызов.- Веб-приложение ChatGPT не передаёт ваш текст модели изображений дословно. Сначала чат-модель переписывает и расширяет prompt, обычно самостоятельно добавляя одежду, окружение и освещение. Именно это описанное ниже действие «добавить одежду» выполняется за вас.
- API отправляет ваш prompt как есть. Вы не указали, что на ней надето, поэтому модель решает сама. При условиях «гламурный образ + разворот в полный рост + белый фон» она склоняется к облегающему или минималистичному наряду — именно так часто выглядит лист персонажа, — и результат пересекает допустимую границу.
- Если вдобавок учесть случайную модерацию на стороне результата, ситуация «веб-приложение один раз прошло проверку, а API один раз не прошло» не является противоречием.
Абляция слов: изменяйте по одному параметру за раз
Такой промпт содержит дюжину прилагательных и ограничений макета. Угадывать, какое из них стало причиной, медленно. Эффективный подход — абляция: удаляйте или заменяйте ровно один блок слов в каждом варианте, оставляя всё остальное идентичным на уровне байтов, и наблюдайте, какой вариант меняет результат.Перечислите подозрительные блоки слов
Изменяйте ровно один блок в каждом варианте
Повторно запустите каждый вариант, изменивший результат, 2–3 раза
Вносите минимальное изменение
Вывод и рекомендуемое исправление
Механизм: слово «гламурный» склоняет модель к чувственной визуализации, а «поворотный лист персонажа в полный рост + белый фон» — это классическая компоновка листа персонажа. Вместе они создают изображения, которые классификатор на стороне вывода помечает как сексуальные. Ни одно слово в промпте само по себе не является нарушением. Рекомендуемое исправление: сохраните весь исходный промпт и добавьте одну явную фразу об одежде сразу после описания персонажа. Этот вариант успешно прошёл 3 из 3 запусков и сохранил как внешний вид, так и компоновку, которые требовались заказчику:
Same prompt with one clothing phrase added: 3 of 3 calls passed, with the face close-up and the front / side / back turnaround all delivered
Почему moderation: low не помог
Параметрmoderation (см. таблицу параметров text-to-image) принимает значения auto / low и снижает строгость модерации со стороны промпта. Передача low здесь всё равно вернула ошибку 400, поскольку блокировка происходит на стороне выходных данных, которой этот параметр не управляет.
За пределами шлюза мы не можем определить, «параметр не был передан» или «параметр был передан, но не возымел эффекта», однако вывод в обоих случаях один и тот же: при блокировке на стороне выходных данных изменение параметров ничего не даёт; измените промпт.
Общий чек-лист
Ошибка вернулась мгновенно или после долгого ожидания?
Ошибка вернулась мгновенно или после долгого ожидания?
Доверили ли вы модели выбор одежды?
Доверили ли вы модели выбор одежды?
Вы изменяли только одно слово за раз?
Вы изменяли только одно слово за раз?
Тарифицируются ли заблокированные запросы?
Тарифицируются ли заблокированные запросы?
Краткая справка
- Используйте задержку, чтобы определить уровень сбоя: мгновенная ошибка 400 указывает на уровень промпта; ошибка 400, получение которой заняло столько же времени, сколько и рендеринг, означает, что классификатор на стороне результата отклонил изображение.
- Блокировки на стороне результата носят стохастический характер: один и тот же промпт иногда проходит, а иногда завершается ошибкой, поэтому единичный результат ничего не доказывает. Повторите запрос 2–3 раза.
- Успешное выполнение в веб-приложении не означает, что API строже: веб-приложение переписывает и расширяет промпт (добавляя одежду и обстановку), тогда как API отправляет его без изменений.
- Поочерёдное исключение слов: изменяйте по одному блоку в каждом варианте, запускайте варианты параллельно и сохраняйте правку с наименьшим изменением смысла. В данном случае триггером было слово «гламурный».
- Явно указывайте одежду в промптах персонажей: одна добавленная фраза об одежде при полном сохранении остальных частей прошла в 3 случаях из 3;
moderation: lowне влияет на блокировки на стороне результата.