Краткий ответ
- «Can see images» и «can make images» — это две разные возможности. Почти каждая современная chat-модель умеет читать изображения (именно это обычно и означает «multimodal»), но она не может генерировать изображения — это отдельный класс специализированных image-моделей.
- Только семейство Gemini для изображений по-настоящему возвращает текст и изображение из одного endpoint —
gemini-3-pro-image(Nano Banana Pro),gemini-3.1-flash-image(Nano Banana 2) и другие модели чередуют текстовые и image-части в одном ответе. - Всё остальное — это orchestration: chat-модель плюс отдельный image endpoint работают вместе, либо
gpt-5.5с нативным инструментом Responsesimage_generation, чтобы модель сама решала, когда рисовать.
Сначала отделите входящие изображения от исходящих
Большая часть путаницы связана со словом «multimodal» — в контексте API по умолчанию оно относится к стороне входных данных, то есть «вы можете подать модели изображение», а не «модель может создать изображение для вас». Эти два сценария используют разные пулы моделей, разные эндпоинты и разную тарификацию:Четыре способа получить изображение
A. Отдельный image-эндпоинт — выбирайте это почти для всего
A. Отдельный image-эндпоинт — выбирайте это почти для всего
data[0].url; семейство GPT-Image возвращает data[0].b64_json.
Этот маршрут вообще не возвращает разговорный текст — это не chat endpoint.Полная таблица моделей: Модели для генерации изображений и видео.
Различия в endpoint, timeout и формате вывода для каждой модели:
Примечания и лучшие практики для Image API.B. Нативное семейство изображений Gemini — единственное, которое по-настоящему возвращает текст и изображение вместе
B. Нативное семейство изображений Gemini — единственное, которое по-настоящему возвращает текст и изображение вместе
gemini-3-pro-image, gemini-3.1-flash-image и так далее) использует нативный Gemini-эндпоинт,
а candidates[0].content.parts — это гетерогенный массив: он может содержать только часть изображения, а может
чередовать текстовые части с частями изображения. Это та семья, которая действительно дает вам и то, и другое в одном вызове.Один важный нюанс, который стоит знать заранее: ни количество частей, ни их порядок не гарантируются. В тестировании было
обнаружено три варианта:parts[0] или parts[1] будет периодически давать сбой. Правильный подход — фильтровать по наличию поля
и брать последний inlineData (для сложных prompt модель возвращает несколько изображений, и последнее
— финальная версия):C. Нативный инструмент image_generation в Responses — позвольте агенту самому решить, рисовать ли
C. Нативный инструмент image_generation в Responses — позвольте агенту самому решить, рисовать ли
POST /v1/responses с gpt-5.5 и подключите нативный инструмент для генерации изображений:image_generation_call в массиве ответа output, вместе с обычным текстовым выводом.
Это ближе всего к «чат-модели, которая рисует» на стороне OpenAI.См. Генерация изображений с помощью нативного инструмента.D. Chat endpoint на image-модели — выглядит как диалоговый, но все еще image-модель
D. Chat endpoint на image-модели — выглядит как диалоговый, но все еще image-модель
gpt-image-2-all и gpt-image-2-vip можно вызывать через /v1/chat/completions, при этом изображение встраивается
как Markdown-ссылка внутри choices[0].message.content.Это выглядит как «один chat endpoint, который и разговаривает, и рисует», но это не chat model, которая умеет рисовать —
по сути это все еще image-модель, обернутая в chat-схему, без общей способности к диалогу.
Она также читает только image_url в последнем сообщении user как базовое изображение; изображения в истории assistant
игнорируются.Этот маршрут больше не рекомендуется — для новых интеграций следует использовать маршрут A.Создание продукта «chat and draw»: рекомендуемая схема
Что большинству агентов и продуктов на самом деле нужно, — это не один волшебный эндпоинт, а четкая цепочка оркестрации:Пусть chat-модель определяет намерение
gpt-5.5, claude-opus-5, gemini-3-pro и так далее), чтобы обработать ввод пользователя
и определить, является ли этот ход диалогом или запросом на генерацию изображений. При необходимости можно вернуть
структурированный флаг.Пусть chat-модель сформирует prompt для генерации изображений
Вызовите эндпоинт для генерации изображений
/v1/images/generations маршрута A. Возьмите возвращенный url или b64_json и сохраните его в вашем
собственном object storage.Верните изображение обратно в диалог
Как проверить, принимает ли модель изображения
1. Проверьте страницу с подробностями модели
/models/<model-name> и посмотрите на строку Модальности ввода в таблице характеристик вверху — если
там указано «image», модель поддерживает работу с изображениями. Это самый быстрый способ проверки.2. Если сомневаетесь, протестируйте
3. Распознайте строку ошибки
Model do not support image input
(грамматика у них такая, это не опечатка). Когда вы видите эту строку, модель не принимает изображения — переключитесь на другую модель.Пять распространённых заблуждений
1. Мультимодальная модель может генерировать изображения
1. Мультимодальная модель может генерировать изображения
gpt-5.5 может прочитать макет дизайна,
который вы отправляете, но не может самостоятельно сгенерировать изображение — чтобы получить его, нужен вызов tool (route C) или
отдельный вызов к image endpoint (route A).2. Image model можно использовать как chat model
2. Image model можно использовать как chat model
gpt-image-2 за support
chatbot. Даже варианты -all / -vip, которые принимают chat endpoint (route D), внутри всё равно остаются image models.3. Включение TEXT в responseModalities гарантирует текстовую часть
3. Включение TEXT в responseModalities гарантирует текстовую часть
responseModalities: ["TEXT", "IMAGE"] не гарантирует текстовую
часть в ответе; модель может вернуть только изображение. Однако обратное направление полезно: явное указание
["IMAGE"] уменьшает количество лишних текстовых частей.4. Переключение между parts[0] и parts[1] исправляет сломанное извлечение изображения
4. Переключение между parts[0] и parts[1] исправляет сломанное извлечение изображения
[0]
или [1], поэтому какой бы вариант вы ни выбрали, часть запросов его не найдёт. Изменение индекса лишь меняет,
какие запросы будут завершаться неудачей. Стабильна только фильтрация по наличию поля.5. Передача reference image в /v1/images/generations выполняет редактирование
5. Передача reference image в /v1/images/generations выполняет редактирование
image / image_url /
images в generation endpoint возвращает 200 с обычным изображением, но reference image silently
отбрасывается, и вы тратитесь как обычно — на выходе вы получаете обычный результат text-to-image.Image editing должно проходить через /v1/images/edits (а Grok Imagine там дополнительно требует
multipart/form-data — при отправке JSON возвращается жёсткий 400).