|

Решение ошибки API Nano Banana 2 для изображений: 3 шага для перехода на правильный формат вызова generateContent

Примечание автора: Подробное объяснение основной причины ошибки not supported model for image generation в API генерации изображений Nano Banana 2, а также как переключиться с формата OpenAI на нативный формат Google generateContent для правильного вызова.

При использовании Nano Banana 2 для генерации изображений столкнулись с ошибкой not supported model for image generation? Это одна из самых частых проблем, с которой сталкиваются разработчики при вызове API изображений Gemini. В этой статье мы разберем основную причину ошибки и правильный способ вызова, чтобы вы могли быстро исправить проблему с API изображений Nano Banana 2.

Основная ценность: Прочитав эту статью, вы поймете разницу в вызове API между моделями генерации изображений Gemini и Imagen, освоите правильное использование конечной точки generateContent и решите проблему с ошибкой за 3 шага.

nano-banana-2-api-error-fix-generatecontent-guide-ru 图示


Основная причина ошибки API изображений Nano Banana 2

Ключевой момент Объяснение Решение
Сообщение об ошибке not supported model for image generation, only imagen models are supported Переключиться на конечную точку generateContent
Основная причина Конечная точка формата OpenAI поддерживает только модели Imagen, но не модели генерации изображений Gemini Использовать нативный формат API Google
Правильная конечная точка /v1beta/models/{MODEL}:generateContent Заменить /v1/images/generations
Обязательные параметры responseModalities: ["TEXT", "IMAGE"] Установить в generationConfig

Подробное объяснение ошибки API изображений Nano Banana 2

Когда вы используете конечную точку /v1/images/generations в формате, совместимом с OpenAI, для вызова Nano Banana 2 (gemini-3.1-flash-image-preview) или Nano Banana Pro (gemini-3-pro-image-preview), система возвращает следующую ошибку:

not supported model for image generation, only imagen models are supported
(request id: 20260315043447253411115cvUiXJMF)
new_api_error convert_request_failed, 500

Основная причина этой ошибки заключается в том, что модели генерации изображений Gemini и Imagen — это две совершенно разные архитектуры.

  • Модели Imagen (например, imagen-3.0-generate-001) — это специализированные модели для генерации изображений, использующие конечные точки /v1/images/generations или :predict
  • Модели генерации изображений Gemini (серия Nano Banana) — это мультимодальные языковые модели, способные одновременно выводить текст и изображения, и они должны использовать конечную точку :generateContent

Проще говоря, вы используете "специальный канал для генерации изображений по тексту" для вызова "мультимодальной диалоговой модели", и из-за несоответствия формата возникает ошибка.

nano-banana-2-api-error-fix-generatecontent-guide-ru 图示


Правильный формат вызова API для генерации изображений Nano Banana 2

Сравнение неправильного и правильного вызова

Критерий сравнения ❌ Неправильный способ (формат OpenAI) ✅ Правильный способ (формат generateContent)
Конечная точка API /v1/images/generations /v1beta/models/{МОДЕЛЬ}:generateContent
Структура запроса Параметры prompt + size + n Структура contents + generationConfig
Формат ответа URL изображения Встроенные данные изображения в Base64
Поддерживаемые модели DALL-E, серия Imagen Модели генерации изображений Gemini (серия Nano Banana)
Выходные данные Только изображение Текст + изображение (мультимодальный вывод)

Пример неправильного запроса к API изображений Nano Banana 2

Вот пример вызова, который приведёт к ошибке:

# ❌ Ошибка: использование формата OpenAI для вызова Nano Banana 2
curl -X POST https://api.apiyi.com/v1/images/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-flash-image-preview",
    "prompt": "Милый рыжий кот, дремлющий на солнце",
    "size": "1024x1024",
    "n": 1
  }'
# Возвращает: not supported model for image generation

Пример правильного запроса к API изображений Nano Banana 2

Вот правильный способ вызова в формате generateContent:

# ✅ Правильно: использование нативного формата Google generateContent
curl -X POST https://api.apiyi.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{
      "parts": [
        {"text": "Милый рыжий кот, дремлющий на солнце"}
      ]
    }],
    "generationConfig": {
      "responseModalities": ["TEXT", "IMAGE"]
    }
  }'

🎯 Техническая подсказка: При вызове Nano Banana 2 через платформу APIYI apiyi.com не требуется отдельная настройка аккаунта Google Cloud. Вы можете напрямую использовать конечную точку generateContent с единым API-ключом.


Быстрый старт с API для генерации изображений Nano Banana 2

3 шага для исправления ошибок API изображений Nano Banana 2

Шаг 1: Измените конечную точку API

Переключите URL запроса с формата OpenAI на формат generateContent:

# Неправильная конечная точка
https://api.apiyi.com/v1/images/generations

# Правильная конечная точка (Nano Banana 2)
https://api.apiyi.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent

# Правильная конечная точка (Nano Banana Pro)
https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent

Шаг 2: Измените структуру тела запроса

Перейдите от параметров OpenAI prompt + size к нативной структуре Google contents + generationConfig. Ключевые параметры:

  • contents.parts.text: Текстовое описание изображения
  • generationConfig.responseModalities: Обязательно установите в ["TEXT", "IMAGE"]

Шаг 3: Обработка данных ответа

Изображение, возвращаемое generateContent, представляет собой встроенные данные в кодировке Base64, а не URL. Вам нужно извлечь и декодировать изображение из ответа.

Минималистичный пример на Python

import requests
import base64

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.apiyi.com"  # Единый интерфейс APIYI

response = requests.post(
    f"{BASE_URL}/v1beta/models/gemini-3.1-flash-image-preview:generateContent",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    },
    json={
        "contents": [{"parts": [{"text": "Милый рыжий кот, дремлющий на солнце"}]}],
        "generationConfig": {"responseModalities": ["TEXT", "IMAGE"]}
    }
)

result = response.json()
for part in result["candidates"][0]["content"]["parts"]:
    if "inlineData" in part:
        img_data = base64.b64decode(part["inlineData"]["data"])
        with open("output.png", "wb") as f:
            f.write(img_data)
        print("Изображение сохранено как output.png")
    elif "text" in part:
        print("Описание модели:", part["text"])

Показать полный код реализации (с обработкой ошибок и настройкой соотношения сторон)
import requests
import base64
import os
from typing import Optional

def generate_image(
    prompt: str,
    model: str = "gemini-3.1-flash-image-preview",
    aspect_ratio: str = "1:1",
    output_path: str = "output.png",
    api_key: Optional[str] = None
) -> dict:
    """
    Генерация изображения с использованием конечной точки generateContent Nano Banana 2

    Args:
        prompt: Описание изображения
        model: Название модели
        aspect_ratio: Соотношение сторон (1:1, 16:9, 9:16, 4:3, 3:4)
        output_path: Путь к выходному файлу
        api_key: API-ключ

    Returns:
        Словарь, содержащий путь к файлу и описание модели
    """
    api_key = api_key or os.getenv("APIYI_API_KEY")
    base_url = "https://api.apiyi.com"  # Единый интерфейс APIYI

    response = requests.post(
        f"{base_url}/v1beta/models/{model}:generateContent",
        headers={
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        },
        json={
            "contents": [{"parts": [{"text": prompt}]}],
            "generationConfig": {
                "responseModalities": ["TEXT", "IMAGE"],
                "imageConfig": {"aspectRatio": aspect_ratio}
            }
        },
        timeout=60
    )

    if response.status_code != 200:
        raise Exception(f"Ошибка запроса API: {response.status_code} - {response.text}")

    result = response.json()
    candidates = result.get("candidates", [])
    if not candidates:
        raise Exception("Не возвращено действительных результатов")

    output = {"text": "", "image_path": ""}
    for part in candidates[0]["content"]["parts"]:
        if "inlineData" in part:
            img_data = base64.b64decode(part["inlineData"]["data"])
            with open(output_path, "wb") as f:
                f.write(img_data)
            output["image_path"] = output_path
        elif "text" in part:
            output["text"] = part["text"]

    return output

# Пример использования
result = generate_image(
    prompt="Пейзаж в стиле китайской живописи тушью, вдали виднеются горы, окутанные лёгким туманом",
    model="gemini-3.1-flash-image-preview",
    aspect_ratio="16:9",
    output_path="landscape.png"
)
print(f"Изображение сохранено: {result['image_path']}")
print(f"Описание модели: {result['text']}")

Рекомендация: Получите API-ключ через APIYI apiyi.com. Платформа предоставляет бесплатные тестовые лимиты и поддерживает вызовы generateContent для обеих моделей генерации изображений Gemini: Nano Banana 2 и Nano Banana Pro.


Сравнение моделей API для генерации изображений Nano Banana 2

Понимание различий в способах вызова API для разных моделей генерации изображений поможет вам избежать похожих ошибок в формате:

Модель Кодовое имя Конечная точка API Формат вызова Доступные платформы
Nano Banana 2 gemini-3.1-flash-image-preview :generateContent Нативный формат Google APIYI и другие платформы
Nano Banana Pro gemini-3-pro-image-preview :generateContent Нативный формат Google APIYI и другие платформы
Imagen 3 imagen-3.0-generate-001 /v1/images/generations или :predict Совместимый с OpenAI формат APIYI и другие платформы
DALL-E 3 dall-e-3 /v1/images/generations Формат OpenAI APIYI и другие платформы

Описание ключевых параметров API для изображений Nano Banana 2

nano-banana-2-api-error-fix-generatecontent-guide-ru 图示

Конечная точка generateContent поддерживает богатый набор параметров для генерации изображений:

Параметр Описание Обязательный? Пример значения
contents.parts.text Промпт с описанием изображения ✅ Обязательно "Рыжий кот на солнце"
responseModalities Настройка модальностей ответа ✅ Обязательно ["TEXT", "IMAGE"]
imageConfig.aspectRatio Соотношение сторон изображения Опционально "1:1", "16:9", "9:16"
contents.parts.inlineData Эталонное изображение (изображение-в-изображение) Опционально Данные изображения в Base64

💡 Важное замечание: responseModalities должен содержать одновременно "TEXT" и "IMAGE". Установка только ["IMAGE"] приведёт к ошибке запроса. Это связано с тем, что модель генерации изображений Gemini является мультимодальной и всегда выводит одновременно текстовое описание и изображение.


Часто задаваемые вопросы

Вопрос 1: Почему Nano Banana 2 нельзя вызывать в формате OpenAI?

Nano Banana 2 (gemini-3.1-flash-image-preview) — это мультимодальная языковая модель на основе Gemini. Её способность генерировать изображения реализована через механизм "генерации в диалоге", а не через специализированный "интерфейс текст-в-изображение". Конечная точка /v1/images/generations в формате OpenAI предназначена специально для моделей генерации изображений, таких как DALL-E и Imagen, и не может обрабатывать мультимодальную структуру запросов Gemini. При вызове через платформу APIYI apiyi.com необходимо выбирать соответствующий формат конечной точки в зависимости от типа модели.

Вопрос 2: В чём разница между API для изображений Nano Banana 2 и Nano Banana Pro?

Обе модели используют конечную точку generateContent, и формат вызова у них полностью идентичен. Основные отличия:

  • Nano Banana 2 (Flash-версия): Генерирует быстрее, примерно за 3-5 секунд. Подходит для пакетной генерации и быстрого прототипирования.
  • Nano Banana Pro: Обеспечивает более высокое качество изображений, точность рендеринга текста достигает 94%. Подходит для детализированного дизайна и коммерческого использования.

На платформе APIYI apiyi.com доступны обе модели. Для переключения достаточно изменить имя модели в URL конечной точки.

Вопрос 3: Как обрабатывать данные изображения, возвращаемые generateContent?

В отличие от формата OpenAI, который возвращает URL изображения, generateContent возвращает встроенные (inline) данные изображения в кодировке Base64. Шаги обработки:

  1. В ответе JSON найдите часть, содержащую inlineData, в candidates[0].content.parts.
  2. Получите строку Base64 из поля inlineData.data.
  3. Декодируйте её с помощью base64.b64decode() и сохраните как файл изображения.
  4. Поле inlineData.mimeType подскажет формат изображения (обычно image/png).

Итог

Ключевые моменты по ошибкам API изображений Nano Banana 2:

  1. Причина ошибки ясна: Использование конечной точки /v1/images/generations (формат OpenAI) для вызова модели генерации изображений Gemini вызывает ошибку "not supported model".
  2. Переключитесь на generateContent: Правильная конечная точка — /v1beta/models/gemini-3.1-flash-image-preview:generateContent.
  3. Настройте responseModalities: В generationConfig обязательно должен быть указан ["TEXT", "IMAGE"], иначе изображение не сгенерируется.

Если вы столкнулись с ошибкой API Nano Banana 2, суть решения можно выразить одной фразой: замените конечную точку генерации изображений OpenAI на нативную конечную точку Google generateContent.

Рекомендуем быстро протестировать Nano Banana 2 и Nano Banana Pro через платформу APIYI apiyi.com. Платформа предоставляет бесплатный лимит, поддерживает прямой вызов в формате generateContent и не требует настройки аккаунта Google Cloud.

📚 Справочные материалы

  1. Документация по генерации изображений Google Gemini: Официальное руководство по генерации изображений в Gemini API

    • Ссылка: ai.google.dev/gemini-api/docs/image-generation
    • Описание: Полное описание параметров и примеры использования для конечной точки generateContent
  2. Справочник по API Google generateContent: Документация по интерфейсу генерации контента Gemini API

    • Ссылка: ai.google.dev/api/generate-content
    • Описание: Подробное описание структуры запроса и ответа для конечной точки generateContent
  3. Документация по совместимости Google Gemini с OpenAI: Объяснение совместимости форматов Gemini и OpenAI

    • Ссылка: ai.google.dev/gemini-api/docs/openai
    • Описание: Узнайте, какие функции поддерживают формат, совместимый с OpenAI, а какие требуют нативного формата

Автор: Техническая команда APIYI
Техническое обсуждение: Приглашаем обсудить вопросы вызова API для генерации изображений Nano Banana 2 в комментариях. Больше материалов можно найти в документации APIYI docs.apiyi.com

Похожие записи