Skip to main content

Краткий ответ

Три предложения:
  1. «Can see images» и «can make images» — это две разные возможности. Почти каждая современная chat-модель умеет читать изображения (именно это обычно и означает «multimodal»), но она не может генерировать изображения — это отдельный класс специализированных image-моделей.
  2. Только семейство Gemini для изображений по-настоящему возвращает текст и изображение из одного endpointgemini-3-pro-image (Nano Banana Pro), gemini-3.1-flash-image (Nano Banana 2) и другие модели чередуют текстовые и image-части в одном ответе.
  3. Всё остальное — это orchestration: chat-модель плюс отдельный image endpoint работают вместе, либо gpt-5.5 с нативным инструментом Responses image_generation, чтобы модель сама решала, когда рисовать.

Сначала отделите входящие изображения от исходящих

Большая часть путаницы связана со словом «multimodal» — в контексте API по умолчанию оно относится к стороне входных данных, то есть «вы можете подать модели изображение», а не «модель может создать изображение для вас». Эти два сценария используют разные пулы моделей, разные эндпоинты и разную тарификацию:
Так что если кто-то спрашивает: «у вас есть multimodal chat API»: если ему нужно загрузить изображение, чтобы модель его проанализировала, ответ — «это поддерживают почти все». Если же он хочет, чтобы модель нарисовала изображение, это совершенно другой набор моделей. Один такой уточняющий вопрос экономит большую часть последующего разговора.

Четыре способа получить изображение

Самый стандартный, дешевый и простой для отладки вариант. GPT-Image, FLUX, Seedream и Grok Imagine находятся здесь.
FLUX и Seedream обычно возвращают data[0].url; семейство GPT-Image возвращает data[0].b64_json. Этот маршрут вообще не возвращает разговорный текст — это не chat endpoint.Полная таблица моделей: Модели для генерации изображений и видео. Различия в endpoint, timeout и формате вывода для каждой модели: Примечания и лучшие практики для Image API.
Серия Nano Banana (gemini-3-pro-image, gemini-3.1-flash-image и так далее) использует нативный Gemini-эндпоинт, а candidates[0].content.parts — это гетерогенный массив: он может содержать только часть изображения, а может чередовать текстовые части с частями изображения. Это та семья, которая действительно дает вам и то, и другое в одном вызове.Один важный нюанс, который стоит знать заранее: ни количество частей, ни их порядок не гарантируются. В тестировании было обнаружено три варианта:Поэтому жесткое задание parts[0] или parts[1] будет периодически давать сбой. Правильный подход — фильтровать по наличию поля и брать последний inlineData (для сложных prompt модель возвращает несколько изображений, и последнее — финальная версия):
Полные подробности: Руководство разработчика серии Nano Banana.
Вызовите POST /v1/responses с gpt-5.5 и подключите нативный инструмент для генерации изображений:
Модель сама решает, рисовать ли, а изображение возвращается в base64 внутри элемента image_generation_call в массиве ответа output, вместе с обычным текстовым выводом. Это ближе всего к «чат-модели, которая рисует» на стороне OpenAI.
Стоимость: этот маршрут добавляет фиксированную плату примерно $0.20 за изображение за вызов инструмента, поверх тарификации по использованию, тогда как у маршрута A /v1/images/generations тарификация только по использованию. Используйте его только когда ваш pipeline должен проходить через Responses (например, агент, который автономно принимает решения рисовать / не рисовать). Если вам нужно просто изображение, используйте маршрут A.
См. Генерация изображений с помощью нативного инструмента.
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»: рекомендуемая схема

Что большинству агентов и продуктов на самом деле нужно, — это не один волшебный эндпоинт, а четкая цепочка оркестрации:
1

Пусть chat-модель определяет намерение

Используйте chat-модель, которую вы уже используете (gpt-5.5, claude-opus-5, gemini-3-pro и так далее), чтобы обработать ввод пользователя и определить, является ли этот ход диалогом или запросом на генерацию изображений. При необходимости можно вернуть структурированный флаг.
2

Пусть chat-модель сформирует prompt для генерации изображений

Этот шаг окупается сам по себе. Пользователь говорит «Сделай мне постер»; модели генерации изображений нужно полное визуальное описание. Если chat-модель перепишет неформальный запрос в хорошо сформированный prompt, качество результата становится заметно более стабильным.
3

Вызовите эндпоинт для генерации изображений

Используйте /v1/images/generations маршрута A. Возьмите возвращенный url или b64_json и сохраните его в вашем собственном object storage.
4

Верните изображение обратно в диалог

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

Как проверить, принимает ли модель изображения

1

1. Проверьте страницу с подробностями модели

Откройте /models/<model-name> и посмотрите на строку Модальности ввода в таблице характеристик вверху — если там указано «image», модель поддерживает работу с изображениями. Это самый быстрый способ проверки.
2

2. Если сомневаетесь, протестируйте

Отправьте минимальный запрос с изображением и посмотрите на ответ:
3

3. Распознайте строку ошибки

Текстовые модели явно возвращают ошибку. Исходное сообщение выглядит так: Model do not support image input (грамматика у них такая, это не опечатка). Когда вы видите эту строку, модель не принимает изображения — переключитесь на другую модель.
Известные исключения, работающие только с текстом (по состоянию на 2026-08-20): deepseek-v4-pro, deepseek-v4-flash, glm-5.2.Это меньшинство среди «современных моделей, которые всё ещё не принимают входные изображения», и они часто подводят пользователей. Этот список меняется по мере изменения каталога моделей — возможности также различаются между поколениями одного и того же поставщика. Всегда считайте строку «Модальности ввода» на странице модели и результат собственного теста источником истины, а не постоянным списком.

Пять распространённых заблуждений

Неверно. В контексте API multimodal по умолчанию означает возможность на стороне ввода. gpt-5.5 может прочитать макет дизайна, который вы отправляете, но не может самостоятельно сгенерировать изображение — чтобы получить его, нужен вызов tool (route C) или отдельный вызов к image endpoint (route A).
Неверно. У image models нет общей conversational способности — не ставьте gpt-image-2 за support chatbot. Даже варианты -all / -vip, которые принимают chat endpoint (route D), внутри всё равно остаются image models.
Обратное неверно. Указание responseModalities: ["TEXT", "IMAGE"] не гарантирует текстовую часть в ответе; модель может вернуть только изображение. Однако обратное направление полезно: явное указание ["IMAGE"] уменьшает количество лишних текстовых частей.
Это не так. Эти два подхода с жёстко заданным индексом взаимодополняющие — изображение всегда попадает в [0] или [1], поэтому какой бы вариант вы ни выбрали, часть запросов его не найдёт. Изменение индекса лишь меняет, какие запросы будут завершаться неудачей. Стабильна только фильтрация по наличию поля.
Неверно, и ошибка происходит без уведомления. Grok Imagine — самый наглядный пример: передача 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).

Связанная документация

Vision (понимание изображений) API

Полное руководство по стороне ввода: поддерживаемые модели, URL и base64, ввод нескольких изображений, распространённые ошибки

Модели для генерации изображений и видео

Полная таблица моделей для стороны вывода с ценами — место, где можно проверить, какие модели могут генерировать изображения

Руководство для разработчиков серии Nano Banana

Как правильно вызывать семейство изображений Gemini: обход parts, вывод нескольких изображений, обработка mimeType

Генерация изображений с помощью нативного инструмента

Использование инструмента image_generation в Responses, чтобы модель сама создавала изображение, включая дополнительную плату за вызов инструмента

Примечания и лучшие практики по Image API

Матрица endpoint, timeout и формата вывода для моделей image

Как выбрать подходящую модель ИИ?

Выбор модели по сценарию использования, стоимости и скорости