AIFreeAPI Logo

GPT Image 2: как исправить Unknown parameter: 'style'

A
4 min readAI Development

Поле style могло остаться от DALL·E 3 или добавиться внутри модуля автоматизации. Разбираемся, что удалить из запроса, где искать скрытую настройку и как получить файл изображения после исправления.

Схема исправления запроса GPT Image 2: описание внешнего вида переносится в промпт

Ошибка Unknown parameter: 'style' при обращении к GPT Image 2 означает, что API не принимает поле style в отправленном запросе. Удалите сам ключ style, а желаемый стиль изображения опишите в prompt. Значения "natural" и "vivid" относятся к параметру DALL·E 3: замена одного на другое здесь не поможет.

Если в редакторе запроса этого поля уже нет, проверьте тело HTTP-запроса после обработки библиотекой, модулем автоматизации или шлюзом. Настройка могла сохраниться в старом шаблоне и добавляться при отправке. Ниже — порядок проверки, позволяющий отделить такую проблему от ошибок генерации и сохранения картинки.

Что именно нужно изменить

В справочнике OpenAI Create image параметр style разрешён только для dall-e-3. Для прямого запроса к Images API с моделью gpt-image-2 его следует исключить.

Например, после замены имени модели в старом запросе могло получиться такое тело:

json
{ "model": "gpt-image-2", "prompt": "Натюрморт с керамической чашкой", "style": "natural" }

Минимальный исправленный вариант:

json
{ "model": "gpt-image-2", "prompt": "Натюрморт с керамической чашкой. Реалистичная предметная фотография, мягкий дневной свет, спокойные естественные цвета." }

Так вы сохраняете художественную задачу, но выражаете её через описание изображения. Если нужен более выразительный результат, уточните в промпте насыщенность цветов, освещение, технику и настроение. У текстовых описаний нет обещанного взаимно однозначного соответствия прежним режимам natural и vivid; результат зависит от всего промпта.

Для диагностики именно удалите поле, а не присваивайте ему null или пустую строку. В обоих случаях ключ остаётся в JSON. Нет оснований рассчитывать, что сервер будет считать такой запрос запросом без параметра.

Если поле удалено, а ошибка осталась

Смотрите на то, что фактически уходит на сервер. Исходный объект, форма настройки и окончательное тело запроса могут различаться: например, функция объединяет ваши аргументы с общими значениями по умолчанию.

Схема прохождения настроек через модуль до тела HTTP-запроса со скрытым полем style
Схема прохождения настроек через модуль до тела HTTP-запроса со скрытым полем style
Где собирается запросЧто проверитьСледующее действие
Собственный скриптОбъект непосредственно перед сериализацией в JSONУдалить style после объединения общих и пользовательских настроек
Обёртка над SDKНастройки модели, аргументы функции и дополнительные поляУбедиться, что обёртка не дописывает старые параметры DALL·E
Make или другой конструкторТип модуля, сохранённый шаблон и данные выполненияСопоставить их с минимальным запросом без style
API-шлюзАдрес запроса и документацию именно этого поставщикаПроверить, как шлюз передаёт параметры выбранной модели

В собственном коде полезно посмотреть список полей непосредственно перед отправкой. Например, для словаря payload в Python:

python
payload.pop("style", None) print("Поля запроса:", sorted(payload.keys()))

Этот фрагмент удаляет ключ без ошибки, если его не было. Но он не защищает от другой функции, которая добавит поле позже. Поэтому размещение проверки важнее самого вызова pop: между ним и отправкой не должно быть незамеченного добавления параметров.

Для сравнения оставьте тот же API-адрес, модель и учётные данные, а тело сократите до model и prompt. Не включайте ключ авторизации или приватный промпт в публичный отчёт. Если минимальный запрос проходит, добавляйте необходимые параметры по одному. Если снова появляется ошибка именно о style, ищите место, где ключ возвращается, либо выясняйте у поставщика, как он преобразует запрос.

Обновление SDK само по себе не делает style допустимым для GPT Image 2. Оно может помочь, если меняет поведение клиента при сборке запроса. Без такого изменения повторная отправка того же JSON оставляет исходную причину ошибки на месте.

Особенность старых модулей автоматизации

В обсуждении на форуме Make пользователь сообщил о такой ошибке, хотя вручную поле не заполнял. В обсуждении предложили заменить старый модуль; затем возник отдельный вопрос о получении файла вместо URL. Успешный результат там описывался для GPT Image 1, поэтому это пример диагностики модуля, а не подтверждённое испытание GPT Image 2.

Практический вывод: пустая настройка в интерфейсе ещё не доказывает отсутствие поля при отправке. Сначала проверьте данные выполнения и используемый модуль. Если конструктор позволяет отправить HTTP-запрос вручную, минимальное тело выше поможет отделить настройки готового модуля от самого вызова API. Для конкретного клиента нельзя назвать исправляющую версию, пока неизвестны его название и текущая версия.

Не переносите остальные параметры DALL·E вслепую

После удаления style старый шаблон может остановиться на следующем несовместимом поле. Это не означает, что исправление не сработало: сервер теперь сообщает о другой части запроса. До возврата расширенных настроек сравните их с текущей спецификацией.

Поле старого запросаКак поступить для прямого GPT Image API
styleУдалить; внешний вид описать в prompt
quality: "hd" или "standard"Использовать поддерживаемые значения low, medium, high, auto, если параметр нужен
response_format: "url"Удалить: GPT Image не поддерживает response_format
Ожидание data[0].urlЧитать изображение из data[0].b64_json и декодировать Base64
Требование определённого формата файлаУказать output_format: png, jpeg или webp

Здесь output_format отвечает за формат изображения, а не за способ его доставки по ссылке. Например, выбор webp не превращает поле ответа с Base64 в URL. Эти различия описаны в справочнике параметров OpenAI.

Шлюз или сторонняя интеграция могут предоставлять собственные ссылки и дополнительные поля. Тогда сверяйтесь с документацией этого сервиса: его способ выдачи файла нельзя автоматически переносить в прямой запрос к OpenAI. Для выбора общего способа подключения пригодится отдельное руководство по GPT Image 2 API.

Пример Python: от запроса без style до PNG-файла

Путь от ответа API через декодирование Base64 к сохранённому изображению
Путь от ответа API через декодирование Base64 к сохранённому изображению

Следующий пример использует стандартную библиотеку Python и прямой Images API. Ключ должен быть заранее задан в переменной окружения OPENAI_API_KEY. Код составлен по руководству OpenAI по генерации изображений; это не отчёт о выполнении запроса в вашей среде.

python
import base64 import json import os import urllib.error import urllib.request from pathlib import Path payload = { "model": "gpt-image-2", "prompt": ( "Натюрморт с керамической чашкой. " "Реалистичная предметная фотография, мягкий дневной свет, " "спокойные естественные цвета." ), "output_format": "png", } request = urllib.request.Request( "https://api.openai.com/v1/images/generations", data=json.dumps(payload).encode("utf-8"), headers={ "Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}", "Content-Type": "application/json", }, method="POST", ) try: with urllib.request.urlopen(request, timeout=300) as response: result = json.load(response) except urllib.error.HTTPError as error: raise SystemExit(f"API вернул HTTP {error.code}; проверьте ответ локально.") items = result.get("data") or [] if not items or not items[0].get("b64_json"): raise SystemExit("В ответе нет изображения в data[0].b64_json") image_bytes = base64.b64decode(items[0]["b64_json"], validate=True) if not image_bytes.startswith(b"\x89PNG\r\n\x1a\n"): raise SystemExit("Полученные данные не имеют сигнатуры PNG") output = Path("gpt-image-2-result.png") output.write_bytes(image_bytes) print(f"Файл сохранён: {output.resolve()}")

Здесь намеренно нет style и response_format. Проверка Base64 отсекает некорректную кодировку, проверка сигнатуры — данные, не похожие на выбранный PNG. Сигнатура ещё не доказывает целостность всей картинки: откройте сохранённый файл в просмотрщике изображений.

Если хотите сохранить JPEG или WebP, согласованно измените output_format, расширение и проверку формата. Простое переименование файла не перекодирует его. В автоматизации передавайте декодированные байты как файл либо загрузите их в используемое хранилище, если следующий модуль требует ссылку.

Как понять, что исправление завершено

Проверяйте результат по этапам. В отправляемом теле больше нет style; API не возвращает прежний отказ; ответ содержит изображение; декодированный файл открывается. Успешный HTTP-ответ или сохранённый JSON отдельно не подтверждают последний этап.

Если вместо ошибки параметра появился отказ в доступе, это уже другая задача. Если запрос принят, но следующий модуль ждёт отсутствующий URL, исправляйте обработку b64_json. А если картинка открывается, но выглядит иначе, чем хотелось, уточняйте описание сцены и техники в промпте. На этом этапе задача действительно касается стиля изображения.