OhMyGPT

Gemini

通过 Google Gemini generateContent 协议调用 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 URLhttps://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。

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="")
{
  "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 模型会原样收到。

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

其他模型

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

流式输出

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

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 响应头查询,见流式请求的费用。

错误

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

{
  "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" }
    ]
  }
}

本页目录