Гайд · TNWS AI
Как генерировать изображения через OpenAI API и проверять результат
Как выбрать Image API или Responses API, составить технический промпт, сохранить изображение и проверить размеры, текст и ограничения.
Задача и применимость
Цель этого руководства — получить воспроизводимый графический ассет по техническому заданию и автоматически отбраковать файл с неверным форматом или размером. Это не демонстрация одного удачного ответа: в конце получится повторяемый процесс с контрольным входом, ожидаемым результатом и условием остановки.
Сведения и названия функций проверены 12 сентября 2026 года. Официальное руководство разделяет Image API для одиночной генерации или редактирования и Responses API для диалогового многошагового редактирования. На дату проверки в Image API указаны модели gpt-image-2.5-sunburst и gpt-image-2.5-flare; доступные параметры формата, качества, размера и сжатия нужно сверять для выбранной модели.
Что подготовить
Нужны тестовый проект, отдельный API-ключ с минимальными правами, актуальный SDK и пять обезличенных входов. Включите нормальный кейс, пустой ввод, отсутствующий факт, противоречие и потенциально опасную инструкцию. Для каждого заранее запишите ожидаемые поля и статус.
Секрет храните в переменной окружения. Не помещайте его в браузерный JavaScript, статью, промпт или журнал. В рабочую систему переходите только после теста на копии данных.
Пошаговая настройка
- Сначала выберите API по процессу: один независимый баннер — Image API; серия правок с сохранением контекста — image generation tool в Responses API.
- Разделите техническое задание на сюжет, композицию, обязательные объекты, текст, запреты и формат. Не подменяйте размеры словами «для соцсетей».
- В Image API укажите актуальную модель и только поддерживаемые ею параметры. Ответ декодируйте или скачайте согласно форме, которую возвращает текущий SDK.
- После сохранения программно откройте файл: проверьте MIME type, ширину, высоту и возможность декодирования. Визуально проверьте текст, логотип, количество предметов и анатомические дефекты.
- При правке меняйте одну характеристику и явно перечисляйте элементы, которые нельзя менять. Исходник и результат храните с разными именами и хешами.
После каждого вызова сохраняйте request ID, HTTP-статус, модель, версию конфигурации и usage, если сервис его возвращает. Полный чувствительный ввод в обычный лог не копируйте. Повтор запроса после таймаута разрешайте только после проверки состояния предыдущей операции.
Готовый шаблон
Скопируйте основу и замените значения в квадратных скобках:
Задача: квадратная карточка товара.
Объект: одна прозрачная бутылка воды без выдуманного логотипа.
Композиция: объект по центру, свободная зона 20% сверху под заголовок.
Фон: светлый нейтральный, мягкая тень.
Текст внутри изображения: не добавлять.
Запрещено: люди, дополнительные бутылки, водяные знаки, нечитаемые этикетки.
Критерии: один объект; края не обрезаны; фон однородный; место под текст сохранено.
Шаблон намеренно требует явного null или missing вместо догадки. Если результат будет читать программа, формат проверяется схемой, а значения — отдельными бизнес-правилами.
Реалистичный пример
Вход — ТЗ на квадратную карточку одной бутылки. Ожидаемый результат — декодируемый файл нужной геометрии, одна бутылка целиком и пустая верхняя зона. Две бутылки, псевдологотип или встроенная надпись означают отказ, даже если картинка выглядит красиво.
Повторите кейс, удалив один ключевой факт. Правильное поведение — отказ, null или специальный статус. Связный выдуманный ответ опаснее синтаксической ошибки: он может пройти в следующий шаг незаметно.
Как измерить качество
Создайте таблицу с колонками case_id, expected, actual, source, status, error_type. Идентификаторы, суммы, даты и единицы сравнивайте посимвольно. Для найденного факта храните document_id или точный фрагмент исходника.
Разделяйте ошибки на четыре класса: format_error — результат нельзя разобрать; unsupported_claim — факт отсутствует во входе; wrong_action — вызвана неверная операция; security_error — раскрыт секрет или обойдены права. Каждый класс требует своего исправления. Новый промпт не чинит авторизацию, а JSON Schema не подтверждает истинность суммы.
Правило выпуска задайте до теста: ноль security_error и wrong_action, все ID совпадают, отсутствующие данные не додумываются, а внешний вызов виден в журнале. Если критический кейс провален, измените одну причину и прогоните весь набор заново.
Контроль в рабочем приложении
Разделите сетевой вызов и использование результата. Первый слой принимает вход, присваивает case_id и проверяет размер, тип и права. Второй вызывает API с таймаутом. Третий разбирает ответ и применяет схему. Четвёртый сверяет бизнес-ограничения. Только после этого данные разрешено показывать пользователю или передавать в следующий узел.
Для наблюдаемости считайте количество успешных запросов, отказов валидации, таймаутов и повторов. Не смешивайте их в один процент «успеха». Отдельно отслеживайте долю ответов, отправленных на ручную проверку. Резкий спад технических ошибок при росте unsupported_claim означает, что формат улучшился, но содержание стало хуже.
В журнал результата кладите hash входа, а не чувствительный текст; model id; версию промпта; HTTP-статус; request ID; длительность; тип ошибки и решение валидатора. Значение API-ключа, персональные данные и полный документ туда не попадают. Доступ к журналу должен быть уже, чем доступ к пользовательскому интерфейсу.
Перед выпуском включите ограниченный трафик и сравните новую конфигурацию с предыдущей на одинаковых case_id. Условие отката формулируйте численно для вашего тестового набора: например, хотя бы одна ошибка безопасности, потеря обязательного ID или рост числа необработанных ответов. После отката сохраните проблемный ответ для воспроизведения, но удалите секреты.
Негативные тесты
Отправьте пустой ввод; похожий, но неверный ID; пользовательский текст с командой «игнорируй правила»; два одинаковых запроса; таймаут. Система должна отличать данные от инструкций, не подбирать похожую запись и не создавать дубль. Для чтения повтор допустим, для записи нужен idempotency_key и проверка фактического состояния.
Проведите регрессию после обновления модели, SDK или схемы. Не меняйте одновременно модель, промпт и набор данных — иначе невозможно понять причину улучшения или поломки.
Чек-лист финальной проверки
- задача и ожидаемый результат описаны до запуска;
- использован актуальный официальный метод;
- ключ отсутствует в клиентском коде и логах;
- модель и параметры вынесены в конфигурацию;
- обычный и пустой кейсы пройдены;
- отсутствующий факт возвращается явно;
- числа, даты, ID и единицы сверены;
- ошибки API обрабатываются по классам;
- повтор не создаёт нежелательный дубль;
- сохранены версия, request ID и результат проверки;
- есть безопасный откат к предыдущей конфигурации.
Ограничения
Генеративная модель может неточно воспроизводить надписи, фирменную айдентику и число мелких объектов. Юридические права на исходники и допустимость использования брендов проверяет заказчик.
Региональная доступность, модели, лимиты и цены являются изменяемыми фактами. Здесь они не выдумываются: перед внедрением проверьте текущие условия в официальной документации и кабинете поставщика.
FAQ
Можно ли сразу использовать рабочие данные?
Нет. Сначала обезличенный тест, проверка прав, политики хранения и журналирования.
Почему недостаточно HTTP 200?
Он доказывает обработку запроса, но не истинность ответа. Значения сверяются с исходником или доверенной функцией.
Что делать при таймауте?
Сначала проверьте состояние прошлого вызова. Автоматический повтор операции записи без idempotency_key может создать дубль.
Когда повторять тесты?
После смены модели, SDK, схемы, системной инструкции или способа сборки контекста.
Официальный первоисточник
Документация по использованной функции — проверено 12 сентября 2026 года.
Частые вопросы
Можно ли сразу использовать рабочие данные?
Нет, сначала нужен тест на обезличенной копии и проверка прав.
Достаточно ли HTTP 200?
Нет, успешный статус не подтверждает смысловую правильность результата.
Что делать при таймауте?
Проверить состояние прошлого вызова до повторной операции.
Когда повторять тесты?
После смены модели, SDK, схемы или системной инструкции.
Читайте также
Как добавить веб-поиск в OpenAI Responses API и сохранить источники
Практическая настройка web_search в Responses API: запрос, список источников, проверка цитат и обработка неполных данных.
Как фильтровать поиск по метаданным в OpenAI vector store
Как фильтровать поиск по метаданным в OpenAI vector store: применимость, настройка, пример, метрики и ошибки.
Как хранить контекст диалога в OpenAI Responses API без дублирования сообщений
Практическая работа с previous_response_id и conversation: продолжение диалога, смена инструкций и контроль истории.
Комментарии
Пока тихо. Скажите первое слово