# Gemini (/docs/zh-CN/api/gemini)

Gemini 端点兼容 Google Gen AI SDK，和 Google 的 API 一样，模型写在 URL 里。Gemini 模型以及模型列表中的其他对话模型都会返回 `GenerateContentResponse`。

| | |
|---|---|
| 生成 | `POST https://api.ohmygpt.com/v1/models/{model}:generateContent` |
| 流式 | `POST https://api.ohmygpt.com/v1/models/{model}:streamGenerateContent` |
| SDK Base URL | `https://api.ohmygpt.com`，API 版本 `v1` |
| 鉴权 | `x-goog-api-key: $OHMYGPT_API_KEY` 或 `Authorization: Bearer $OHMYGPT_API_KEY` |

`{model}` 是 `GET /v1/models` 中的完整模型 ID，包括斜杠：`/v1/models/google/gemini-3.1-flash-lite:generateContent`。按下面的示例把 SDK 的 API 版本设为 `v1`。

```python tab="Python"
import os
from google import genai
from google.genai import types

client = genai.Client(
    api_key=os.environ["OHMYGPT_API_KEY"],
    http_options=types.HttpOptions(base_url="https://api.ohmygpt.com", api_version="v1"),
)

response = client.models.generate_content(
    model="google/gemini-3.1-flash-lite",
    contents="Explain QUIC in two sentences.",
)
print(response.text)

for chunk in client.models.generate_content_stream(
    model="google/gemini-3.1-flash-lite",
    contents="Explain QUIC in two sentences.",
):
    print(chunk.text or "", end="")
```

```bash tab="cURL"
curl "https://api.ohmygpt.com/v1/models/ohmygpt/mock:generateContent" \
  -H "x-goog-api-key: $OHMYGPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contents": [{"role": "user", "parts": [{"text": "ping"}]}]}'
```

```json
{
  "candidates": [
    {
      "index": 0,
      "finishReason": "STOP",
      "content": {
        "role": "model",
        "parts": [{ "text": "This is a mock reply from OhMyGPT. Your integration works; switch to a real model when ready." }]
      }
    }
  ],
  "usageMetadata": { "promptTokenCount": 15, "candidatesTokenCount": 17, "totalTokenCount": 32 }
}
```

## 安全设置 [#安全设置]

请求不带 `safetySettings` 时，OhMyGPT 会把 `HARM_CATEGORY_HARASSMENT`、`HARM_CATEGORY_HATE_SPEECH`、`HARM_CATEGORY_SEXUALLY_EXPLICIT` 和 `HARM_CATEGORY_DANGEROUS_CONTENT` 设为 `"threshold": "OFF"`。需要过滤时，发送你自己的 `safetySettings`，Gemini 模型会原样收到。

```json
{
  "contents": [{ "role": "user", "parts": [{ "text": "ping" }] }],
  "safetySettings": [
    { "category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_MEDIUM_AND_ABOVE" }
  ]
}
```

## 其他模型 [#其他模型]

GPT、Claude 和其他所有对话模型都接受同样的请求。`systemInstruction`、`contents`、`tools`、`toolConfig` 和 `thinkingConfig`（见[思考](/docs/zh-CN/api/thinking)）都会完整保留，模型有对应项的 `generationConfig` 设置也一样。模型没有对应项的设置（例如发给 Claude 的 `seed`）不会发送，模型按自己的默认行为作答。其他模型每个请求只返回一个候选，所以 `candidateCount` 大于 1 会返回 400 并指出 `generationConfig.candidateCount`。`safetySettings` 不会发给其他模型。`cachedContent` 是 Gemini 的功能，请配合 Gemini 模型使用。

## 流式输出 [#流式输出]

`:streamGenerateContent` 以 server-sent events 返回，带不带 `?alt=sse` 都可以。每个事件是一个 `GenerateContentResponse` 数据块。带 `finishReason` 的数据块标志内容结束，最后一个数据块带有 `usageMetadata`：

```text
data: {"candidates":[{"content":{"role":"model","parts":[{"text":" ready."}]},"index":0}]}

data: {"candidates":[{"content":{"role":"model","parts":[]},"finishReason":"STOP","index":0}]}

data: {"usageMetadata":{"promptTokenCount":29,"candidatesTokenCount":17,"totalTokenCount":46},"candidates":[{"content":{"role":"model","parts":[]},"index":0}]}
```

要查看一次 Gemini 流式请求的费用，用该请求的 `X-Request-ID` 响应头查询，见[流式请求的费用](/docs/zh-CN/api/streaming#流式请求的费用)。

## 错误 [#错误]

错误使用 Google 的 `google.rpc.Status` 格式：

```json
{
  "error": {
    "code": 404,
    "status": "NOT_FOUND",
    "message": "The model `google/gemini-0-nonexistent` does not exist. List available models with `GET /v1/models`.",
    "details": [
      { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "reason": "MODEL_NOT_FOUND", "domain": "ohmygpt.com" }
    ]
  }
}
```
