Skip to content

Gemini (Google协议)

1. 概述

Google 推出的多模态人工智能模型,旨在处理多种数据类型,包括文本、图像、音频、视频和代码。

API 兼容性

本 API 符合 Google Gemini 接口规范,支持官方所有参数。

文档说明

本文档只列举了一部分参数,详细参数列表可参考 官方文档

支持的 Google 模型

  • gemini-3.1-pro-preview(最新)
  • gemini-3.1-flash-lite-preview
  • gemini-3-flash-preview
  • gemini-3-pro-preview(已下架,迁移至gemini-3.1-pro-preview)
  • gemini-2.5-flash(计划于26年10月下架)
  • gemini-2.5-pro(计划于26年10月下架)
  • gemini-2.5-flash-lite

2. 请求说明

  • 请求方法: POST
  • 请求地址: https://api.exchangetoken.ai/v1beta/models/{model}:generateContent
  • 请求地址(流式): https://api.exchangetoken.ai/v1beta/models/{model}:streamGenerateContent?alt=sse

3. 请求参数

3.1 Header 参数

参数名称类型必须说明示例值
Content-Typestring设置请求头类型,必须为 application/jsonapplication/json
Acceptstring设置响应类型,建议统一为 application/jsonapplication/json
Authorizationstring身份验证所需的 API_KEY,格式 Bearer $YOUR_API_KEYBearer $YOUR_API_KEY

3.2 Body 参数 (application/json)

参数名称类型必须说明示例
contentsarray与模型当前对话的内容。对于单轮查询,这是单个实例。对于多轮查询(例如聊天),这是包含对话历史记录和最新请求的重复字段。[{"role":"user", "parts":[{"text":"A cute baby sea otter"}]}]
content.rolestring消息角色。必须是 usermodeluser
content.partsarray构成单条消息的有序 Parts。部分可能具有不同的 MIME 类型。[{"text":"A cute baby sea otter"}]
content.parts.textstring内嵌文本。A cute baby sea otter
content.parts.inlineDatastruct内嵌媒体字节。-
content.parts.inlineData.mimeTypestring来源数据的 IANA 标准 MIME 类型。image/png
content.parts.inlineData.datastring媒体格式的原始字节。使用 base64 编码的字符串。-
generationConfigstruct模型生成和输出的配置选项。-

完整代码示例

1. 文本生成 (Text Generation)

bash
curl "https://api.exchangetoken.ai/v1beta/models/gemini-3-flash-preview:generateContent" \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{
    "contents": [
      {
        "role": "user",
        "parts": [
          {
            "text": "How does AI work?"
          }
        ]
      }
    ]
  }'
python
import requests
import json

url = "https://api.exchangetoken.ai/v1beta/models/gemini-3-flash-preview:generateContent"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

data = {
    "contents": [
        {
            "role": "user",
            "parts": [
                {"text": "How does AI work?"}
            ]
        }
    ]
}

response = requests.post(url, headers=headers, json=data)
print(response.json())

2. 思考模型 (Thinking Model)

bash
curl "https://api.exchangetoken.ai/v1beta/models/gemini-3-flash-preview:generateContent" \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{
    "contents": [
      {
        "role": "user",
        "parts": [
          {
            "text": "How does AI work?"
          }
        ]
      }
    ],
    "generationConfig": {
      "thinkingConfig": {
        "thinkingLevel": "low"
      }
    }
  }'
python
import requests
import json

url = "https://api.exchangetoken.ai/v1beta/models/gemini-3-flash-preview:generateContent"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

data = {
    "contents": [
        {
            "role": "user",
            "parts": [
                {"text": "How does AI work?"}
            ]
        }
    ],
    "generationConfig": {
        "thinkingConfig": {
            "thinkingLevel": "low"
        }
    }
}

response = requests.post(url, headers=headers, json=data)
print(response.json())

控制思维

Gemini 模型默认采用动态思维,会根据用户要求的复杂程度自动调整推理力度。不过,如果您有特定的延迟时间限制条件,或者需要模型进行比平时更深入的推理,可以选择使用参数来控制思考行为。

思考等级 (Gemini 3)

thinkingLevel 参数(建议用于 Gemini 3 及更高版本的模型)可用于控制推理行为。

下表详细列出了每种模型类型的 thinkingLevel 设置:

思考等级Gemini 3 ProGemini 3 Flash说明
minimal不受支持支持与大多数查询的"不思考"设置相匹配。对于复杂的编码任务,该模型可能只会进行非常简单的思考。最大限度地缩短聊天应用或高吞吐量应用的延迟时间。请注意,minimal 并不能保证思考功能已关闭。
low支持支持最大限度地缩短延迟时间并降低费用。最适合简单的指令遵循、聊天或高吞吐量应用。
medium不受支持支持平衡的思维,适合处理大多数任务。
high支持(默认,动态)支持(默认,动态)最大限度地提高推理深度。模型可能需要更长时间才能生成第一个(非思考)输出令牌,但输出结果会经过更仔细的推理。

对于 Gemini 3 Pro,您无法停用思考功能。Gemini 3 Flash 也不支持完全关闭思考,但 minimal 设置意味着模型可能不会思考(尽管它仍然有可能思考)。如果您未指定思考等级,Gemini 将使用 Gemini 3 模型的默认动态思考等级 "high"

Gemini 2.5 系列模型不支持 thinkingLevel;请改用 thinkingBudget

思考预算

thinkingBudget 参数是随 Gemini 2.5 系列推出的,用于为模型提供指导,帮助其了解用于推理的思考 token 的具体数量。

注意事项

请将 thinkingLevel 参数与 Gemini 3 模型搭配使用。虽然 thinkingBudget 可用于实现向后兼容性,但将其与 Gemini 3 Pro 搭配使用可能会导致性能欠佳。

以下是每种模型类型的 thinkingBudget 配置详细信息。您可以通过将 thinkingBudget 设置为 0 来停用思考功能。将 thinkingBudget 设置为 -1 会启用动态思考,这意味着模型会根据请求的复杂程度调整预算。

型号默认设置(未设置思考预算)Range停用思考过程开启动态思维
2.5 Pro动态思维128到32768不适用:无法停用思考功能thinkingBudget = -1(默认)
2.5 Flash动态思维0到24576thinkingBudget = 0thinkingBudget = -1(默认)
2.5 Flash Lite模型不会思考512到24576thinkingBudget = 0thinkingBudget = -1

3. 系统指令 (System Instruction)

bash
curl "https://api.exchangetoken.ai/v1beta/models/gemini-3-flash-preview:generateContent" \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "system_instruction": {
      "parts": [
        {
          "text": "You are a cat. Your name is Neko."
        }
      ]
    },
    "contents": [
      {
        "role": "user",
        "parts": [
          {
            "text": "Hello there"
          }
        ]
      }
    ]
  }'
python
import requests
import json

url = "https://api.exchangetoken.ai/v1beta/models/gemini-3-flash-preview:generateContent"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

data = {
    "system_instruction": {
        "parts": [
            {"text": "You are a cat. Your name is Neko."}
        ]
    },
    "contents": [
        {
            "role": "user",
            "parts": [
                {"text": "Hello there"}
            ]
        }
    ]
}

response = requests.post(url, headers=headers, json=data)
print(response.json())

4. 多模态输入 (Multimodal Input)

bash
# 使用临时文件保存 base64 编码的图像数据
TEMP_B64=$(mktemp)
trap 'rm -f "$TEMP_B64"' EXIT
base64 $B64FLAGS $IMG_PATH > "$TEMP_B64"

# 使用临时文件保存 JSON 载荷
TEMP_JSON=$(mktemp)
trap 'rm -f "$TEMP_JSON"' EXIT

cat > "$TEMP_JSON" << EOF
{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "Tell me about this instrument"
        },
        {
          "inline_data": {
            "mime_type": "image/jpeg",
            "data": "$(cat "$TEMP_B64")"
          }
        }
      ]
    }
  ]
}
EOF

curl "https://api.exchangetoken.ai/v1beta/models/gemini-3-flash-preview:generateContent" \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -X POST \
  -d "@$TEMP_JSON"
python
import requests
import base64
import json

url = "https://api.exchangetoken.ai/v1beta/models/gemini-3-flash-preview:generateContent"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

# 读取并编码图片
image_path = "path/to/image.jpeg"
with open(image_path, "rb") as image_file:
    image_data = base64.b64encode(image_file.read()).decode('utf-8')

data = {
    "contents": [
        {
            "role": "user",
            "parts": [
                {"text": "Tell me about this instrument"},
                {
                    "inline_data": {
                        "mime_type": "image/jpeg",
                        "data": image_data
                    }
                }
            ]
        }
    ]
}

response = requests.post(url, headers=headers, json=data)
print(response.json())

支持的图片格式

Gemini 支持以下图片格式 MIME 类型:

  • PNG - image/png
  • JPEG - image/jpeg
  • WEBP - image/webp
  • HEIC - image/heic
  • HEIF - image/heif

如需了解其他文件输入方法,请参阅文件输入方法指南。

5. 流式响应 (Streaming Response)

bash
curl "https://api.exchangetoken.ai/v1beta/models/gemini-3-flash-preview:streamGenerateContent?alt=sse" \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --no-buffer \
  -d '{
    "contents": [
      {
        "role": "user",
        "parts": [
          {
            "text": "Explain how AI works"
          }
        ]
      }
    ]
  }'
python
import requests
import json

# 注意:流式请求使用 streamGenerateContent 且带参数 alt=sse
url = "https://api.exchangetoken.ai/v1beta/models/gemini-3-flash-preview:streamGenerateContent?alt=sse"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

data = {
    "contents": [
        {
            "role": "user",
            "parts": [
                {"text": "Explain how AI works"}
            ]
        }
    ]
}

response = requests.post(url, headers=headers, json=data, stream=True)

for line in response.iter_lines():
    if line:
        print(line.decode('utf-8'))