Skip to content

Gemini 兼容 OpenAI 协议接入指南 ​

本页说明如何用 OpenAI Images API 兼容协议调用 We-AI 的 Gemini 香蕉生图模型。适合已经接入过 OpenAI /v1/images/generations、/v1/images/edits 的客户端,只需要替换 BASE_URL、API Key 和 model 即可接入。

如果你使用的是 Google Gemini 原生协议(/v1beta/models/{model}:generateContent),请阅读 Gemini 香蕉生图文档。本页只讲 OpenAI 兼容入口。

参考资料:OpenAI 兼容协议(/v1/images/*)

接入前准备 ​

选择一个 We-AI 入口作为 BASE_URL,末尾不要重复写 /v1:

线路BASE_URL
国际加速路线https://us-la.we-token.cc
亚太加速路线https://asian-acc.we-token.cc
国内加速路线https://sub2api.we-token.cc
Aitu 独立站点https://sub2api.aitu.art

鉴权方式:

http
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

注意

we-token.cc 的三条线路用户体系相同,只是加速区域不同。sub2api.aitu.art 是独立站点,API Key、余额和账号信息不与 we-token.cc 打通。

两个分组 ​

Gemini 香蕉有两个分组:aistudio香蕉 和 adobe香蕉,用哪个取决于你的 API Key 属于哪个分组(创建 API Key 时选择的分组)。两个分组的 OpenAI 兼容入口参数相同,差别只有下面几条:

项aistudio香蕉adobe香蕉
模型Pro、2、2.1Pro、2
思考档位 thinkingLevel✅ 支持不支持(传了忽略)
响应里的 output_formatGoogle 实际返回的图片格式,目前基本是 jpeg回显请求值,不传为 png
response_format: "url" 返回的链接平台临时链接,24 小时内有效Adobe 临时预签名链接
usageGoogle 返回了就是真实值,没返回时按 Google 官方每图 token 数估算估算值

后文凡是没有特别注明分组的内容,两个分组都适用。

接口概览 ​

场景方法路径请求格式
文生图POST/v1/images/generationsapplication/json
图生图 / 改图POST/v1/images/editsapplication/json(推荐,传图片 URL)或 multipart/form-data(上传文件)

示例完整地址:

txt
https://sub2api.we-token.cc/v1/images/generations
https://sub2api.we-token.cc/v1/images/edits

支持的模型 ​

model俗称定位分组
gemini-3-pro-imageNano Banana Pro质量优先:商业海报、复杂构图、细节要求高的任务两个分组都有
gemini-3.1-flash-imageNano Banana 2速度优先:快速预览、批量草稿、日常生图两个分组都有
gemini-nano-banana-2.1Nano Banana 2.1新一代 flash:比例更多、支持三档思考仅 aistudio香蕉

说明:

  • 带 -preview 后缀的写法是别名:gemini-3-pro-image-preview ≡ gemini-3-pro-image,gemini-3.1-flash-image-preview ≡ gemini-3.1-flash-image。
  • 模型名区分大小写,不带比例、清晰度后缀。

请求参数 ​

参数必填说明
model是见上方模型表。
prompt是图片生成或编辑要求,不能为空。
size否清晰度档位:1K、2K、4K(不分大小写),不传为 2K。像素写法(如 1024x1024)、auto 会被忽略,按不传处理。
resolution否同 size,两个都传时以 resolution 为准。
aspectRatio否画面比例,也可以写成 aspect_ratio(两个都传时以 aspect_ratio 为准)。可选值见下方。
thinkingLevel否思考档位,也可以写成 thinking_level。仅 aistudio香蕉 生效,见下方「思考档位」。
n否每次只能出 1 张:不传或传 1。传大于 1 的值返回 400。
response_format否不传或传 b64_json:图片在 data[0].b64_json;传 url:图片在 data[0].url(临时链接,见下方说明)。
image / images / input_images改图必填仅 /v1/images/edits:参考图,1~14 张,格式见「图生图 / 改图示例」。
background、quality、output_format否不影响出图,可以不传。

size 是清晰度档位,不是固定像素尺寸。实际输出像素由「比例 + 档位」决定,例如 16:9 / 1K 回 1376×768,2:3 / 2K 回 1696×2528,gemini-nano-banana-2.1 的 1:8 / 1K 回 352×2928、8:1 / 1K 回 2928×352。需要严格指定 2048x1152 这类固定像素时,建议改用 生图接入指南 中的 gpt-image-2。

支持的 aspectRatio:

  • 通用:1:1、2:3、3:2、3:4、4:3、4:5、5:4、9:16、16:9、21:9。
  • 超宽 / 超长比例 1:4、4:1、1:8、8:1:adobe香蕉 两个模型都支持;aistudio香蕉 只有 gemini-nano-banana-2.1 支持,gemini-3-pro-image、gemini-3.1-flash-image 都不支持。
  • 不传或传 auto:由模型按提示词决定画面形状。aistudio香蕉 传了不支持的比例也按不传处理、不报错(例如 gemini-3.1-flash-image 传 1:8,照常返回,但出图不是 1:8;需要超宽 / 超长图请用 gemini-nano-banana-2.1);adobe香蕉 请只传上面列出的比例。

思考档位(仅 aistudio香蕉) ​

thinkingLevel 控制模型出图前的思考量,取值 minimal / medium / high(大小写不敏感)。每个模型支持的档位不同:

模型支持的档位不传时
gemini-3-pro-imagehighGoogle 默认(官方为 high)
gemini-3.1-flash-imageminimal、highGoogle 默认(官方为 minimal)
gemini-nano-banana-2.1minimal、medium、highGoogle 默认(官方为 medium)

不传、传空、传不认识的值、或传了该模型不支持的档位(例如 gemini-3.1-flash-image 传 medium):不报错,一律按不传处理,照常出图。档位越高出图越慢;minimal 最快。

文生图示例 ​

Postman 中选择 Body -> raw -> JSON,请求:

http
POST https://sub2api.we-token.cc/v1/images/generations
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

请求体:

json
{
  "model": "gemini-3.1-flash-image",
  "prompt": "A beautiful mountain landscape at sunrise",
  "size": "2K",
  "aspectRatio": "16:9"
}

curl 示例(把 data[0].b64_json 解码存成文件):

bash
curl -s "${BASE_URL%/}/v1/images/generations" \
  -H "Authorization: Bearer ${API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-flash-image",
    "prompt": "A beautiful mountain landscape at sunrise",
    "size": "2K",
    "aspectRatio": "16:9"
  }' \
| python3 -c 'import sys,json,base64; d=json.load(sys.stdin); ext={"jpeg":"jpg"}.get(d.get("output_format"),d.get("output_format") or "png"); open("out."+ext,"wb").write(base64.b64decode(d["data"][0]["b64_json"])); print("saved out."+ext)'

带思考档位(aistudio香蕉,Nano Banana 2.1):

json
{
  "model": "gemini-nano-banana-2.1",
  "prompt": "a cozy reading nook by a rainy window, warm light",
  "size": "4K",
  "aspectRatio": "4:1",
  "thinkingLevel": "high"
}

OpenAI Python SDK 示例:

python
import base64
from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY", base_url="https://sub2api.we-token.cc/v1")

img = client.images.generate(
    model="gemini-3-pro-image",
    prompt="a pug wearing sunglasses, studio lighting",
    size="2K",
    extra_body={"aspectRatio": "16:9", "thinkingLevel": "high"},
)
open("out.jpg", "wb").write(base64.b64decode(img.data[0].b64_json))

响应格式 ​

成功时返回 OpenAI Images 风格的结果,默认图片以 base64 放在 data[0].b64_json:

jsonc
{
  "created": 1784100892,
  "data": [
    { "b64_json": "<base64>" }
  ],
  "background": "auto",
  "output_format": "jpeg",
  "quality": "",
  "size": "2K",
  "model": "gemini-3.1-flash-image-preview",
  "usage": {
    "input_tokens": 12,
    "input_tokens_details": { "image_tokens": 0, "text_tokens": 12 },
    "output_tokens": 1680,
    "output_tokens_details": { "image_tokens": 1680, "text_tokens": 0 },
    "total_tokens": 1692
  }
}

字段说明:

  • data[0].b64_json:图片的 base64,解码后直接存文件。aistudio香蕉 按 output_format 决定扩展名(目前基本是 jpeg)。
  • size:实际出图的档位(1K / 2K / 4K),不一定等于请求里传的原值(例如传了像素值被忽略时这里是 2K)。
  • model:本次使用的模型,可能带 -preview 后缀。
  • usage:input_tokens 为输入(提示词 + 参考图),output_tokens 为输出图片(aistudio香蕉 在 Google 返回真实值时还包含思考 token),total_tokens 为两者之和。

aistudio香蕉 在 Google 没返回 token 数时,按 Google 官方每图 token 数估算:

模型输出 1 张 1K输出 1 张 2K输出 1 张 4K每张参考图(输入)
gemini-3-pro-image112011202000560
gemini-3.1-flash-image1120168025201120
gemini-nano-banana-2.11120168037801120

返回图片 URL ​

请求里加 "response_format": "url",图片会以临时链接放在 data[0].url,其余字段不变:

jsonc
{
  "created": 1784100892,
  "data": [
    { "url": "https://..." }
  ],
  "size": "2K",
  "...": "其余字段同上"
}

URL 返回说明

  • aistudio香蕉 的链接是平台临时链接,24 小时内有效;adobe香蕉 的链接是 Adobe 的临时预签名链接。拿到后请尽快下载或转存,不要长期依赖该链接。
  • 个别情况下(例如图片转存失败)会退回成 b64_json,客户端建议两种都能处理:有 url 就下载,没有就解 b64_json。

图生图 / 改图示例 ​

改图接口推荐使用 JSON 请求体。把参考图放到 images 数组里,然后在 prompt 中写清楚要保留什么、改变什么。

http
POST https://sub2api.we-token.cc/v1/images/edits
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

请求体:

json
{
  "images": [
    {
      "image_url": "https://img10.360buyimg.com/n3/jfs/t1/367079/6/5814/311805/692671edFfd7fe2e8/8b15689df633c338.jpg"
    }
  ],
  "model": "gemini-3.1-flash-image",
  "prompt": "keep product unchanged, change background to clean warm studio background",
  "size": "2K",
  "aspectRatio": "1:1"
}

curl 示例:

bash
curl -s "${BASE_URL%/}/v1/images/edits" \
  -H "Authorization: Bearer ${API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "images": [
      { "image_url": "https://example.com/reference.jpg" }
    ],
    "model": "gemini-3.1-flash-image",
    "prompt": "keep product unchanged, change background to clean warm studio background",
    "size": "2K",
    "aspectRatio": "1:1"
  }'

参考图的几种写法(可以混用,合计 1~14 张):

写法示例
字段名image、images、input_images 都可以,三个字段的图会按此顺序合并。
图片 URL"https://example.com/a.jpg" 或 {"url": "https://example.com/a.jpg"} 或 {"image_url": "https://example.com/a.jpg"} 或 {"image_url": {"url": "https://example.com/a.jpg"}}
base64{"b64_json": "<base64>"},或直接写 "data:image/png;base64,<base64>"
单张 / 多张字段值可以是单个值,也可以是数组。

图片 URL 必须是服务端能直接访问的公网 http(s):// 地址(不需要登录、不是内网地址)。

上传本地文件用 multipart/form-data,图片字段名 image、image[]、images、images[] 都可以,多张就重复同一个字段:

bash
curl -s "${BASE_URL%/}/v1/images/edits" \
  -H "Authorization: Bearer ${API_KEY}" \
  -F "model=gemini-3.1-flash-image" \
  -F "prompt=keep product unchanged, change background to clean warm studio background" \
  -F "size=2K" \
  -F "aspectRatio=1:1" \
  -F "image[]=@product.png" \
  -F "image[]=@style.jpg"

返回结构与文生图一致;usage.input_tokens_details.image_tokens 会计入参考图。

错误格式 ​

json
{ "error": { "message": "...", "type": "invalid_request_error" } }

常见状态码:

HTTP含义怎么处理
400参数不合法:缺 prompt、n 大于 1、改图没传参考图(image is required)或超过 14 张等。adobe香蕉 的内容安全审核拒绝也是 400。按 message 修改请求。
401 / 403API Key 无效、已禁用,或余额不足。检查 Key 和余额。
404模型名不对,或该模型不在你的分组里(例如 adobe香蕉 调 gemini-nano-banana-2.1)。核对模型名和分组。
413参考图或请求体太大。压缩图片、减少张数,或改用图片 URL。
451仅 aistudio香蕉:上游这次没有返回图片(不一定是内容违规);或者提示词是 hi、test 这类无意义的探测文本。重试一般就能出图;连续失败再调整提示词或参考图。
408生成超时;adobe香蕉 上游限流、繁忙时也返回 408。退避后重试。
429 / 502 / 503上游限流或暂时不可用。退避后重试。

提示词建议 ​

改图时建议按「保留内容 + 修改内容 + 禁止内容」来写:

txt
保留参考图中的商品主体不变,包括外形、颜色、材质、比例、Logo 和包装文字。
将背景改成干净的暖色摄影棚,柔和棚拍光,轻微阴影。
不要改变商品结构,不要新增品牌 Logo,不要生成促销文字,不要加水印。

如果要做电商主图,优先上传清晰商品图;如果要做人物或角色一致性,优先上传角色参考图。不要把多个目标挤在一张复杂拼图里,输入图越干净,改图越稳定。

常见问题 ​

1. 返回的是 b64_json,没有 url ​

默认就是返回 base64。需要链接请在请求里加 "response_format": "url";即使加了,个别情况下也可能退回 b64_json,客户端两种都要能处理。

2. 返回 URL 但前端打不开 ​

链接是临时的(aistudio香蕉 24 小时内有效),业务侧应尽快下载或转存。如果要长期展示,请把图片保存到自己的对象存储或 CDN。

3. 404 或路径不存在 ​

检查 BASE_URL 末尾是否已经带了 /v1。如果配置成 https://sub2api.we-token.cc/v1,再拼接 /v1/images/generations 会变成重复路径。如果路径没问题,再检查模型名是否在你的分组里(见「支持的模型」)。

4. 改图时报 image is required ​

说明请求没有正确传入参考图。请确认使用的是 /v1/images/edits,并且请求体里包含参考图,例如:

json
{
  "images": [
    { "image_url": "https://example.com/reference.jpg" }
  ]
}

5. 传了 thinkingLevel 没效果 ​

thinkingLevel 只在 aistudio香蕉 生效,而且每个模型支持的档位不同(见「思考档位」)。不支持的档位会按不传处理,不会报错。

6. 生成很慢或超时 ​

4K、复杂改图、多参考图、thinkingLevel: high 都会更慢。建议先用 1K 或 2K 验证提示词和画面方向,正式交付时再提高到 4K。客户端和中转站超时建议设置到 30 分钟左右。