|

解决 Nano Banana 2 图片API报错:3步切换 generateContent 正确调用格式

作者注:详解 Nano Banana 2 图片生成 API 报错 not supported model for image generation 的根本原因,以及如何从 OpenAI 格式切换到 Google 原生 generateContent 格式正确调用

使用 Nano Banana 2 生成图片时遇到 not supported model for image generation 报错?这是目前开发者最常遇到的 Gemini 图片 API 调用问题之一。本文将介绍报错的根本原因和正确的调用方式,帮助你快速修复 Nano Banana 2 图片 API 报错。

核心价值: 读完本文,你将理解 Gemini 图片模型和 Imagen 模型的 API 调用差异,掌握 generateContent 端点的正确用法,3 步解决报错问题。

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


Nano Banana 2 图片 API 报错核心原因

要点 说明 解决方案
报错信息 not supported model for image generation, only imagen models are supported 切换到 generateContent 端点
根本原因 OpenAI 格式端点只支持 Imagen 模型,不支持 Gemini 图片模型 使用 Google 原生 API 格式
正确端点 /v1beta/models/{MODEL}:generateContent 替换 /v1/images/generations
必需参数 responseModalities: ["TEXT", "IMAGE"] 在 generationConfig 中设置

Nano Banana 2 图片 API 报错详解

当你使用 OpenAI 兼容格式的 /v1/images/generations 端点调用 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 图示


Nano Banana 2 图片 API 正确调用格式

错误调用 vs 正确调用对比

对比项 ❌ 错误方式(OpenAI 格式) ✅ 正确方式(generateContent 格式)
API 端点 /v1/images/generations /v1beta/models/{MODEL}:generateContent
请求结构 prompt + size + n 参数 contents + generationConfig 结构
响应格式 图片 URL 内联 Base64 图片数据
支持模型 DALL-E、Imagen 系列 Gemini 图片模型(Nano Banana 系列)
输出内容 仅图片 文字 + 图片(多模态输出)

Nano Banana 2 图片 API 错误请求示例

以下是会导致报错的错误调用方式:

# ❌ 错误:使用 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

Nano Banana 2 图片 API 正确请求示例

以下是正确的 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"]
    }
  }'

🎯 技术提示: 通过 API易 apiyi.com 平台调用 Nano Banana 2,无需单独配置 Google Cloud 账号,使用统一的 API Key 即可直接调用 generateContent 端点。


Nano Banana 2 图片 API 快速上手

3 步修复 Nano Banana 2 图片 API 报错

第 1 步:更换 API 端点

将请求地址从 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"  # API易统一接口

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:
    """
    使用 Nano Banana 2 generateContent 端点生成图片

    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"  # API易统一接口

    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.com 获取 API Key,平台提供免费测试额度,支持 Nano Banana 2 和 Nano Banana Pro 两种 Gemini 图片模型的 generateContent 调用。


Nano Banana 2 图片 API 模型对比

了解不同图片生成模型的 API 调用方式差异,可以帮助你避免类似的格式错误:

模型 代号 API 端点 调用格式 可用平台
Nano Banana 2 gemini-3.1-flash-image-preview :generateContent Google 原生格式 API易等平台
Nano Banana Pro gemini-3-pro-image-preview :generateContent Google 原生格式 API易等平台
Imagen 3 imagen-3.0-generate-001 /v1/images/generations:predict OpenAI 兼容格式 API易等平台
DALL-E 3 dall-e-3 /v1/images/generations OpenAI 格式 API易等平台

Nano Banana 2 图片 API 关键参数说明

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

generateContent 端点支持丰富的图片生成参数:

参数 说明 是否必需 示例值
contents.parts.text 图片描述提示词 ✅ 必需 "一只橘猫在阳光下"
responseModalities 响应模态设置 ✅ 必需 ["TEXT", "IMAGE"]
imageConfig.aspectRatio 图片宽高比 可选 "1:1", "16:9", "9:16"
contents.parts.inlineData 参考图片(图生图) 可选 Base64 图片数据

💡 重要提示: responseModalities 必须同时包含 "TEXT""IMAGE",仅设置 ["IMAGE"] 会导致请求失败。这是因为 Gemini 图片模型是多模态模型,始终同时输出文字描述和图片。


常见问题

Q1: 为什么 Nano Banana 2 不能用 OpenAI 格式调用?

Nano Banana 2(gemini-3.1-flash-image-preview)是基于 Gemini 的多模态语言模型,它的图片生成能力是通过"对话生成"实现的,而非专用的"文生图接口"。OpenAI 格式的 /v1/images/generations 端点专为 DALL-E 和 Imagen 等专用图片生成模型设计,无法处理 Gemini 模型的多模态请求结构。通过 API易 apiyi.com 平台调用时,需要根据模型类型选择对应的端点格式。

Q2: Nano Banana 2 和 Nano Banana Pro 图片 API 有什么区别?

两者都使用 generateContent 端点,调用格式完全相同。主要区别在于:

  • Nano Banana 2(Flash 版):生成速度更快,约 3-5 秒,适合批量生成和快速原型
  • Nano Banana Pro:图片质量更高,文字渲染准确率达 94%,适合精细设计和商业用途

在 API易 apiyi.com 平台上两个模型均可使用,只需在端点 URL 中切换模型名称即可。

Q3: generateContent 返回的图片数据如何处理?

与 OpenAI 格式返回图片 URL 不同,generateContent 返回的是 Base64 编码的内联图片数据。处理步骤:

  1. 从响应 JSON 的 candidates[0].content.parts 中找到包含 inlineData 的部分
  2. 获取 inlineData.data 字段的 Base64 字符串
  3. 使用 base64.b64decode() 解码后保存为图片文件
  4. inlineData.mimeType 字段会告诉你图片格式(通常为 image/png

总结

Nano Banana 2 图片 API 报错的核心要点:

  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"],否则无法生成图片

遇到 Nano Banana 2 API 报错时,核心就是一句话:把 OpenAI 的图片生成端点换成 Google 原生的 generateContent 端点

推荐通过 API易 apiyi.com 快速测试 Nano Banana 2 和 Nano Banana Pro,平台提供免费额度,支持 generateContent 格式直接调用,无需配置 Google Cloud 账号。


📚 参考资料

  1. Google Gemini 图片生成文档: Gemini API 官方图片生成指南

    • 链接: ai.google.dev/gemini-api/docs/image-generation
    • 说明: 包含 generateContent 端点的完整参数说明和示例
  2. Google generateContent API 参考: Gemini API 内容生成接口文档

    • 链接: ai.google.dev/api/generate-content
    • 说明: generateContent 端点的请求和响应结构详解
  3. Google Gemini OpenAI 兼容性文档: Gemini 与 OpenAI 格式的兼容说明

    • 链接: ai.google.dev/gemini-api/docs/openai
    • 说明: 了解哪些功能支持 OpenAI 兼容格式,哪些需要原生格式

作者: APIYI 技术团队
技术交流: 欢迎在评论区讨论 Nano Banana 2 图片 API 调用问题,更多资料可访问 API易 docs.apiyi.com 文档中心

类似文章