Gemini 图片生成

概述

AIone 已支持 Gemini 图片生成模型,并统一通过 OpenAI Compatible 的 /v1/chat/completions 端点访问。

这一组模型在网关内部会自动切换到 Gemini 原生图片生成链路,再转换回 OpenAI 兼容响应格式。因此你的请求方式仍然保持统一,但可以额外使用图片生成相关参数。

图片模型一览

模型 最大分辨率 速度 特点 指定分辨率方式
gemini-3.1-flash-image-preview 4K (4096×4096) 性价比最高,支持 512/1K/2K/4K 四档 image_size 参数
gemini-3-pro-image-preview 1K (1024×1024) 默认 1K,质量稳定 默认即可
gemini-3-pro-image-preview-2k 2K (2048×2048) Pro 质量 + 2K 分辨率 模型名自带
gemini-3-pro-image-preview-4k 4K (4096×4096) Pro 质量 + 4K 分辨率 模型名自带
gemini-2.5-flash-image 1K (1024×1024) 上一代 Flash,仅 1K

如果你不确定模型名,请以 GET https://api.openbili.com/v1/models 和 Portal 模型列表页为准。


Gemini 3.1 Flash Image 接入指南

gemini-3.1-flash-image-preview 是目前性价比最高的图片生成模型,支持 4 档分辨率(512 ~ 4K),通过 image_size 参数控制。

默认 1K 分辨率

不传 image_size 时默认生成 1K (1024×1024) 图片:

curl https://api.openbili.com/v1/chat/completions \
  -H "Authorization: Bearer sk-nex-your-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-flash-image-preview",
    "messages": [
      {"role": "user", "content": "画一只可爱的猫咪"}
    ],
    "max_tokens": 4096
  }'

生成 2K 高清图片

curl https://api.openbili.com/v1/chat/completions \
  -H "Authorization: Bearer sk-nex-your-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-flash-image-preview",
    "messages": [
      {"role": "user", "content": "画一只可爱的猫咪"}
    ],
    "max_tokens": 4096,
    "image_size": "2K"
  }'

生成 4K 超高清图片

curl https://api.openbili.com/v1/chat/completions \
  -H "Authorization: Bearer sk-nex-your-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-flash-image-preview",
    "messages": [
      {"role": "user", "content": "画一只可爱的猫咪"}
    ],
    "max_tokens": 4096,
    "image_size": "4K"
  }'

注意: 4K 图片生成时间较长(可达 2-3 分钟)。强烈建议使用 "stream": true,网关会每 10 秒发送 keepalive 心跳,防止中间网络设备因空闲断开连接。同时请将客户端 HTTP 超时设置为 ≥ 600 秒。

自定义宽高比 + 分辨率

aspect_ratioimage_size 可以组合使用:

curl https://api.openbili.com/v1/chat/completions \
  -H "Authorization: Bearer sk-nex-your-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-flash-image-preview",
    "messages": [
      {"role": "system", "content": "你是一名插画师,请输出适合做横幅封面的图片"},
      {"role": "user", "content": "画一只可爱的猫咪"}
    ],
    "max_tokens": 4096,
    "image_size": "2K",
    "aspect_ratio": "16:9",
    "temperature": 0.8
  }'

OpenAI Python SDK 示例

from openai import OpenAI
 
client = OpenAI(
    api_key="sk-nex-your-key-here",
    base_url="https://api.openbili.com/v1",
)
 
# 生成 2K 图片
response = client.chat.completions.create(
    model="gemini-3.1-flash-image-preview",
    messages=[{"role": "user", "content": "画一只可爱的猫咪"}],
    max_tokens=4096,
    extra_body={
        "image_size": "2K",
        "aspect_ratio": "16:9",
    },
)
 
# 处理返回结果
# content 是字符串(可能包含 markdown 格式的内嵌图片)
print(response.choices[0].message.content)
 
# 图片数据通过独立的 images 字段返回(纯文本响应无此字段)
images = getattr(response.choices[0].message, "images", None)
if images:
    for img in images:
        base64_data = img["image_url"]["url"]  # data:image/jpeg;base64,...

OpenAI Node.js SDK 示例

import OpenAI from "openai";
 
const client = new OpenAI({
  apiKey: "sk-nex-your-key-here",
  baseURL: "https://api.openbili.com/v1",
});
 
const response = await client.chat.completions.create({
  model: "gemini-3.1-flash-image-preview",
  messages: [{ role: "user", content: "画一只可爱的猫咪" }],
  max_tokens: 4096,
  // @ts-ignore — 非标准参数通过 extra body 传递
  image_size: "2K",
  aspect_ratio: "16:9",
});
 
const content = response.choices[0].message.content;
// content 是 string(可能包含 markdown 格式的内嵌图片)
// 如需程序化提取图片,使用 response.choices[0].message.images

图片参数详解

image_size — 分辨率

控制生成图片的分辨率。注意大写 K,小写会被拒绝。

像素(正方形时) 适用模型 说明
"512" 512×512 gemini-3.1-flash-image-preview 仅 3.1 Flash 支持,缩略图/草稿场景
"1K" 1024×1024 所有图片模型 默认值,不传时使用此分辨率
"2K" 2048×2048 gemini-3.1-flash-image-previewgemini-3-pro-image-preview-2k 高清
"4K" 4096×4096 gemini-3.1-flash-image-previewgemini-3-pro-image-preview-4k 超高清,生成时间较长

Gemini 3 Pro Image 的区别: gemini-3-pro-image-preview-2k-4k 是预设了分辨率的独立模型名,无需传 image_size 参数。而 gemini-3.1-flash-image-preview 通过 image_size 参数动态切换分辨率。

aspect_ratio — 宽高比

控制生成图片的宽高比。不传时由模型自动决定(通常为 1:1)。

支持以下宽高比:

1:13:22:33:44:34:55:49:1616:921:91:44:11:88:1


通用请求参数

参数 类型 必填 说明
model string 图片模型 ID
messages array 对话消息数组,遵循 OpenAI Chat Completions 格式
max_tokens integer 建议 映射到 Gemini 原生的 maxOutputTokens,建议设为 4096
image_size string 分辨率,见上表
aspect_ratio string 宽高比,见上表
temperature number 生成温度
top_p number 核采样概率
top_k integer Top-K 采样
stream boolean 伪流式,图片生成完毕后一次性返回

参考图输入

如果你需要传参考图,可以使用 OpenAI 风格的多模态 messages.content

{
  "model": "gemini-3.1-flash-image-preview",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "参考这张图的构图,画一只坐在窗边的猫"},
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/png;base64,iVBORw0KGgoAAA..."
          }
        }
      ]
    }
  ],
  "max_tokens": 4096,
  "image_size": "2K"
}

注意:

  • 支持 data: URI(base64)和 https:// 公网 URL 两种格式
  • 公网 URL 会由网关自动下载并转换为 Gemini 原生图片输入(30 秒超时)
  • 推荐使用 base64 格式:部分 CDN(如阿里云)可能存在防盗链或格式转换问题,base64 最稳定

返回结果说明

图片模型的响应包含两个字段:content(字符串)和 images(数组)。

纯文本响应

如果模型只返回文字(没有生成图片),响应与普通文本模型一致:

{
  "choices": [{
    "message": {
      "role": "assistant",
      "content": "这是模型的文字回复"
    }
  }]
}

含图片的响应

{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "model": "gemini-3.1-flash-image-preview",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "这是为你生成的图片:\n\n![image](data:image/jpeg;base64,/9j/4AAQ...)",
        "images": [
          {
            "type": "image_url",
            "index": 0,
            "image_url": {
              "url": "data:image/jpeg;base64,/9j/4AAQ...",
              "detail": "auto"
            }
          }
        ]
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 123,
    "completion_tokens": 456,
    "total_tokens": 579
  }
}

两个字段的作用:

字段 类型 说明
content string Markdown 格式,文字和图片混排(![image](data:...)),符合 OpenAI spec
images array 结构化的图片数据,方便程序提取。纯文本响应不含此字段
  • content 始终是字符串,适合直接展示给用户
  • 如需程序化处理图片(保存、转发等),请使用 images 字段
  • 图片格式通常为 JPEG(data:image/jpeg;base64,...),实际取决于模型返回的 MIME 类型
  • usage 字段仍然会返回,便于你在控制台和响应结果中核对消耗

限制与注意事项

  1. 仅支持 /v1/chat/completions:Gemini 图片模型不支持 /v1/messages(Anthropic 格式)
  2. 流式模式为伪流式:支持 stream: true,但图片会在生成完毕后一次性以 SSE 事件返回(非逐 token 流式),等待期间每 10 秒会收到 keepalive 心跳
  3. 图片通过 images 字段返回content 始终是字符串。如需程序化处理图片,请使用 message.images 字段,不要解析 content 中的 markdown
  4. 模型权限:请确认你的 API Key 有权访问对应图片模型
  5. 超时与连接保活:4K 图片生成可能需要 2-3 分钟。强烈建议 4K 请求使用 "stream": true——网关会每 10 秒发送 keepalive 心跳,防止中间网络设备(NAT/防火墙/代理)因 TCP 空闲而断开连接。同时将客户端 HTTP 超时设置为 ≥ 600 秒
  6. image_size 大小写:必须使用大写 K("2K""4K"),小写 "2k" 会被拒绝;512 不带 K 后缀
  7. 分辨率选择方式区别
    • gemini-3.1-flash-image-preview:通过 image_size 参数指定("512" / "1K" / "2K" / "4K"
    • gemini-3-pro-image-preview:通过模型名后缀指定(-2k / -4k),或使用基础模型名默认 1K