跳到主要内容

Gemini generateContent 格式

本页示例中的 {BASE_URL} 表示 https://api.uniall.ai

已有 Gemini 风格客户端,或需要 Base64 图片输入与输出时使用此格式。模型名放在 URL 中,图片参数放在 generationConfig.imageConfig 中。

接口

POST /v1beta/models/{model}:generateContent

{model} 替换为 nano-banana-2nano-banana-pronano-banana-2-lite

鉴权

x-api-key: sk-***
Content-Type: application/json

OpenAI Images 和 Gemini 两种格式使用同一份 UniAll API Key。

请求参数

参数类型必填说明
contentsarray包含一条用户消息的对话内容。
contents[].rolestring使用 user
contents[].parts[].textstring生成或编辑指令。
contents[].parts[].inlineDataobject条件必填编辑使用的参考图;多图时重复此 part。
inlineData.mimeTypestring条件必填图片媒体类型,例如 image/png
inlineData.datastring条件必填不带 Data URL 前缀的纯 Base64。
generationConfig.responseModalitiesstring[]同时接受文字和图片结果时使用 ["TEXT", "IMAGE"]
generationConfig.imageConfig.imageSizestring5121K2K4K,默认 1K;受模型限制。
generationConfig.imageConfig.aspectRatiostring输出比例,例如 1:13:416:9
模型支持的 imageSize
nano-banana-25121K2K4K
nano-banana-pro1K2K4K
nano-banana-2-lite1K

文生图示例

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_datamime_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-pronano-banana-2-lite 请求 512
  • inlineData.data 中包含 data:image/png;base64, 前缀。
  • 只读取第一个响应 part,没有查找包含 inlineData 的 part。
  • 在日志中记录完整 Base64 响应或 API Key。

相关页面