OhMyGPT

Chat Completions

通过 OpenAI Chat Completions 协议调用任意对话模型。

POST /v1/chat/completions 使用 OpenAI Chat Completions 协议,支持所有对话模型:GPT、Claude、Gemini、DeepSeek、Qwen 等等。把 OpenAI SDK 指向 https://api.ohmygpt.com/v1,改 model 就能在模型之间切换。完整的请求与响应 schema 见端点参考。

端点POST https://api.ohmygpt.com/v1/chat/completions
SDK Base URLhttps://api.ohmygpt.com/v1
鉴权Authorization: Bearer $OHMYGPT_API_KEY
Content-Typeapplication/json
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.ohmygpt.com/v1",
    api_key=os.environ["OHMYGPT_API_KEY"],
)

completion = client.chat.completions.create(
    model="anthropic/claude-haiku-4-5",
    messages=[{"role": "user", "content": "Explain QUIC in two sentences."}],
)
print(completion.choices[0].message.content)

原生模型与其他模型

对于原生协议为 Chat Completions 的模型,例如 GPT、DeepSeek、Qwen、Kimi 和 GLM,厂商收到的请求体与你发送的一致,厂商特有字段按厂商文档的说明生效。Claude 和 Gemini 模型同样以 chat.completion 格式返回;哪些内容会完整保留,见协议。

Claude 和 Gemini 的响应

结束原因

对于 Claude 和 Gemini 模型,finish_reason 使用 OpenAI 的取值,native_finish_reason 保留模型原始的结束原因:

"choices": [
  {
    "index": 0,
    "finish_reason": "length",
    "native_finish_reason": "max_tokens",
    "message": { "role": "assistant", "content": "Pong! " }
  }
]
模型的结束原因finish_reason
Claude end_turn、stop_sequence、pause_turn;Gemini STOPstop
Claude max_tokens;Gemini MAX_TOKENSlength
Claude tool_use;Gemini 函数调用tool_calls
Claude refusal;Gemini 因安全或复述被拦截content_filter

响应中的推理

对于 Claude 和 Gemini 模型,模型可见的推理内容在 message.reasoning 中返回,结构化条目在 message.reasoning_details 中。Claude 的条目带有 signature:

"message": {
  "role": "assistant",
  "content": "391",
  "reasoning": "17 * 23 = ?\n\nLet me calculate this:\n17 * 23 = 17 * 20 + 17 * 3\n= 340 + 51\n= 391",
  "reasoning_details": [
    {
      "type": "reasoning.text",
      "text": "17 * 23 = ?\n\nLet me calculate this:\n17 * 23 = 17 * 20 + 17 * 3\n= 340 + 51\n= 391",
      "signature": "EuoCCrgBCBMYAipATvOr...",
      "index": 0
    }
  ]
}

原生协议为 Chat Completions 的模型,在厂商自己的字段中返回推理内容,例如 DeepSeek 和 Qwen 用的是 reasoning_content。流式输出中,同样的数据以 delta.reasoning 和 delta.reasoning_details 返回。开启、关闭或调低推理的请求参数见思考。

如果多轮 Claude 对话同时用到扩展思考和工具调用,请使用 Messages,它能在多轮之间保留思考块及其签名。Gemini 的工具调用把思考签名放在 tool_calls[].extra_content 中;把 assistant 消息原样发回即可保留它。

路由

顶层的 provider 对象用于选择由哪家供应商提供该模型(order、only、ignore、sort)。在 OpenAI Python SDK 中通过 extra_body 传入:

completion = client.chat.completions.create(
    model="openai/gpt-5.4-nano",
    messages=[{"role": "user", "content": "ping"}],
    extra_body={"provider": {"sort": "price"}},
)

字段及其规则见供应商路由。

流式输出

设置 stream: true 后,会收到一串 chat.completion.chunk 事件,以 data: [DONE] 结尾。无论是否设置 stream_options,[DONE] 之前的最后一个数据块都带有 usage,另有一行 : x-cost-credits 注释给出本次费用。详见流式输出。

错误

错误使用 OpenAI 格式。error.code 是稳定的取值,例如 unsupported_parameter,出问题的字段名在 param 中:

{
  "error": {
    "type": "invalid_request_error",
    "code": "unsupported_parameter",
    "param": "functions",
    "message": "The model `anthropic/claude-haiku-4-5` does not support the `functions` parameter."
  }
}

所有 code 及各状态码的处理方法见错误。

本页目录