• 走 Gemini 原生 generateContent 结构
  • 图片以 inlineData Base64 返回
  • 提示词与参考图都放在 contents 里
POSTv1beta/models/{model}:generateContent

认证

string必填

Gemini 原生格式认两种写法:请求头 x-goog-api-key: YOUR_API_KEY,或查询参数 ?key=YOUR_API_KEY。两者同时存在时以请求头为准。Key 与控制台创建的 API Key 相同。

请求结构

请求体是 Gemini 的原生结构,和 OpenAI 的平铺 JSON 完全不同:

  • contents (array / 必填) — 对话内容,每条含 role 与 parts。
  • contents[].parts (array / 必填) — 文本用 {"text": "..."},图片用 {"inlineData": {...}}。
  • generationConfig.responseModalities (array / 必填) — 必须同时包含 TEXT 与 IMAGE,否则不返回图片。
  • generationConfig.imageConfig (object / 可选) — 画幅与分辨率,见请求参数。

支持的场景

场景写法
文生图parts 里只有一段 text
单图编辑parts 里加一段 inlineData,再跟 text 描述改动
多图参考parts 里加多段 inlineData,最多 14 张
指定画幅imageConfig.aspectRatio
指定分辨率imageConfig.imageSize

请求参数

string必填

路径参数,模型 ID 原样写在 {model} 位置。必须写全名。

array必填

对话内容,含 role 与 parts。

array必填

固定 ["TEXT", "IMAGE"]。

string可选

画幅比例,如 1:1、4:3、16:9、9:16。

string可选

输出档位,1K、2K、4K。

array可选

安全阈值设置,按类别覆盖默认值。

参考图怎么传

inlineData 只接受 Base64,不接受 URL。data 是纯 Base64,不带 data:image/png;base64, 前缀,mimeType 写实际格式。

需要传公网 URL 时改用 fileData.fileUri,但它只对部分上游渠道有效。稳定做法是本地转 Base64 后用 inlineData。

响应

图片在 candidates[0].content.parts 里,以 inlineData 返回:

{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [
          { "text": "这是你要的图片" },
          { "inlineData": { "mimeType": "image/png", "data": "iVBORw0KGgoAAAANSUhEUg..." } }
        ]
      },
      "finishReason": "STOP"
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 24,
    "candidatesTokenCount": 1290,
    "totalTokenCount": 1314
  }
}
  • candidates[].content.parts[] (array) — 文本段带 text,图片段带 inlineData。
  • candidates[].content.parts[].inlineData.data (string) — 纯 Base64,自行拼 data:<mimeType>;base64, 才能放进 <img>。
  • candidates[].finishReason (string) — 结束原因,被安全策略拦截时为 SAFETY。
  • usageMetadata (object) — token 用量,含 promptTokenCount、candidatesTokenCount、totalTokenCount。

返回值没有可访问的图片地址,只有 Base64。需要 URL 时先自行转存到对象存储。

与 OpenAI 兼容路径的差别

项Gemini 原生/v1/images/generations
路径/v1beta/models/{model}:generateContent/v1/images/generations
请求体contents + generationConfig平铺 JSON
返回inlineData 里的 Base64data[].url 或 data[].b64_json
参考图inlineData,最多 14 张image,最多 14 张
流式支持 streamGenerateContent不支持

已有 Gemini SDK 的项目用原生,其余用 OpenAI 兼容。

错误码

HTTP含义
400responseModalities 缺 IMAGE,或 mimeType 非法
401Key 缺失或无效
429触发限流

常见 400 原因:generationConfig 位置写错;inlineData.data 带了 data: 前缀;参考图超过 14 张。

更多状态码与重试建议见错误码与限流,常见报错的排查步骤见常见问题。

使用示例

parts 里只放文本是文生图;先放 inlineData 再放文本是编辑,顺序会影响结果。imageConfig 控制画幅与分辨率档位。