Skip to content

Gemini 协议:generateContent ​

POST /v1beta/models/{model}:generateContent,请求体用 contents,角色是 user / model。

最小请求 ​

bash
curl "$BASE_URL/v1beta/models/<模型ID>:generateContent" \
  -H "x-goog-api-key: $NEW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contents":[{"parts":[{"text":"你好"}]}]}'

Authorization: Bearer 同样可用。

请求结构 ​

字段说明
contents消息数组,每条含 role 与 parts
systemInstruction系统提示,{ parts: [{ text }] }
generationConfigtemperature、maxOutputTokens、topP、stopSequences、responseMimeType
toolsfunctionDeclarations 或 google_search
json
{
  "systemInstruction": { "parts": [{ "text": "你是一个简洁的助手" }] },
  "contents": [{ "role": "user", "parts": [{ "text": "你好" }] }],
  "generationConfig": { "temperature": 0.7, "maxOutputTokens": 1024 }
}

读取结果 ​

json
{
  "candidates": [{
    "content": { "parts": [{ "text": "你好!" }] },
    "finishReason": "STOP"
  }],
  "usageMetadata": { "promptTokenCount": 5, "candidatesTokenCount": 4, "totalTokenCount": 9 }
}

文本在 candidates[0].content.parts[*].text,可能有多段需要拼接。finishReason 为 MAX_TOKENS 表示截断,SAFETY 表示被安全策略拦截。

多模态输入 ​

json
{
  "contents": [{
    "parts": [
      { "text": "描述这张图" },
      { "inlineData": { "mimeType": "image/png", "data": "<base64>" } }
    ]
  }]
}

视频、PDF 用 inlineData 传 base64,或用 fileData 传公网地址(取决于渠道支持)。

SDK ​

python
from google import genai
from google.genai import types

client = genai.Client(
    api_key="sk-...",
    http_options=types.HttpOptions(base_url="https://api.nowhub.org"),
)

print(client.models.generate_content(model="<模型ID>", contents="你好").text)

流式 ​

方法名换成 streamGenerateContent:

bash
curl "$BASE_URL/v1beta/models/<模型ID>:streamGenerateContent?alt=sse" \
  -H "x-goog-api-key: $NEW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contents":[{"parts":[{"text":"写一首四行诗"}]}]}'

内容以模型广场与后台实际配置为准。