Gemini generateContent 格式
本页示例中的 {BASE_URL} 表示 https://api.uniall.ai。
已有 Gemini 风格客户端,或需要 Base64 图片输入与输出时使用此格式。模型名放在 URL 中,图片参数放在 generationConfig.imageConfig 中。
接口
POST /v1beta/models/{model}:generateContent
将 {model} 替换为 nano-banana-2、nano-banana-pro 或 nano-banana-2-lite。
鉴权
x-api-key: sk-***
Content-Type: application/json
OpenAI Images 和 Gemini 两种格式使用同一份 UniAll API Key。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
contents | array | 是 | 包含一条用户消息的对话内容。 |
contents[].role | string | 是 | 使用 user。 |
contents[].parts[].text | string | 是 | 生成或编辑指令。 |
contents[].parts[].inlineData | object | 条件必填 | 编辑使用的参考图;多图时重复此 part。 |
inlineData.mimeType | string | 条件必填 | 图片媒体类型,例如 image/png。 |
inlineData.data | string | 条件必填 | 不带 Data URL 前缀的纯 Base64。 |
generationConfig.responseModalities | string[] | 是 | 同时接受文字和图片结果时使用 ["TEXT", "IMAGE"]。 |
generationConfig.imageConfig.imageSize | string | 否 | 512、1K、2K 或 4K,默认 1K;受模型限制。 |
generationConfig.imageConfig.aspectRatio | string | 否 | 输出比例,例如 1:1、3:4 或 16:9。 |
| 模型 | 支持的 imageSize |
|---|---|
nano-banana-2 | 512、1K、2K、4K |
nano-banana-pro | 1K、2K、4K |
nano-banana-2-lite | 1K |
文生图示例
curl -X POST "{BASE_URL}/v1beta/models/nano-banana-2:generateContent" \
-H "x-api-key: sk-***" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [
{
"text": "电影感产品图:透明香水瓶放在黑色岩石上,蓝色薄雾,无文字"
}
]
}
],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {
"imageSize": "512",
"aspectRatio": "1:1"
}
}
}'
图片编辑示例
构造 JSON 请求前,先把图片编码为纯 Base64:
IMAGE_BASE64="$(base64 < ./reference.png | tr -d '\n')"
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "保持人物和构图不变,把背景替换成雨夜霓虹街道"
},
{
"inlineData": {
"mimeType": "image/png",
"data": "BASE64_IMAGE_DATA"
}
}
]
}
],
"generationConfig": {
"responseModalities": [
"TEXT",
"IMAGE"
],
"imageConfig": {
"imageSize": "2K",
"aspectRatio": "3:4"
}
}
}
每增加一张参考图,就增加一个 inlineData part,并保持图片顺序与提示词描述一致。
响应示例
{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{
"text": "图片已生成。"
},
{
"inlineData": {
"mimeType": "image/png",
"data": "iVBORw0KGgoAAAANSUhEUgAA..."
}
}
]
},
"finishReason": "STOP"
}
]
}
找到包含 inlineData 的 part,对其中的 data 进行 Base64 解码,并按返回的 mimeType 保存。部分客户端可能把字段名规范化为 inline_data 和 mime_type。
Python 示例
import base64
import requests
response = requests.post(
"https://api.uniall.ai/v1beta/models/nano-banana-2:generateContent",
headers={"x-api-key": "sk-***", "Content-Type": "application/json"},
json={
"contents": [{
"role": "user",
"parts": [{"text": "一只戴宇航员头盔的橘猫"}],
}],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {"imageSize": "512", "aspectRatio": "1:1"},
},
},
timeout=600,
)
response.raise_for_status()
for candidate in response.json().get("candidates", []):
for part in candidate.get("content", {}).get("parts", []):
image = part.get("inlineData") or part.get("inline_data")
if image and image.get("data"):
with open("generated.png", "wb") as output:
output.write(base64.b64decode(image["data"]))
raise SystemExit(0)
raise RuntimeError("response did not contain an image")
旧版兼容模型名
早期把固定分辨率写进模型名的 Gemini preview ID 可能仍可兼容使用,但已经弃用,并可能随时移除。新接入请在 URL 中使用统一 Nano 模型,并通过 imageSize 选择分辨率。
计费说明
计费取决于模型和 imageSize,请以账号当前可见的模型价格为准。响应包含 Base64 图片数据,体积可能较大。
常见错误
- 把 0.5K 写成
imageSize: "0.5k"或"512K",正确值是"512"。 - 为
nano-banana-pro或nano-banana-2-lite请求512。 - 在
inlineData.data中包含data:image/png;base64,前缀。 - 只读取第一个响应 part,没有查找包含
inlineData的 part。 - 在日志中记录完整 Base64 响应或 API Key。