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 URL | https://api.ohmygpt.com/v1 |
| 鉴权 | Authorization: Bearer $OHMYGPT_API_KEY |
| Content-Type | application/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 STOP | stop |
Claude max_tokens;Gemini MAX_TOKENS | length |
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 及各状态码的处理方法见错误。