OhMyGPT

协议

通过 OpenAI、Anthropic 或 Gemini 协议调用任意对话模型,以及每种协议返回什么。

任何对话模型都可以通过四种对话协议中的任意一种调用。所以用 OpenAI SDK 调 Claude、用 Google Gen AI SDK 调 GPT,都只需改模型 ID。你的 SDK 或工具已经在用哪种协议,就选哪种:

你在用调用页面
OpenAI SDK、Vercel AI SDK、LangChain、opencode、CursorPOST /v1/chat/completionsChat Completions
Codex、OpenAI SDK 的 client.responsesPOST /v1/responsesResponses
Anthropic SDK、Claude CodePOST /v1/messagesMessages
Google Gen AI SDKPOST /v1/models/{model}:generateContentGemini

同一个模型,两种协议:

curl https://api.ohmygpt.com/v1/chat/completions \
  -H "Authorization: Bearer $OHMYGPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "anthropic/claude-haiku-4-5", "max_tokens": 256,
       "messages": [{"role": "user", "content": "Explain QUIC in two sentences."}]}'

curl https://api.ohmygpt.com/v1/messages \
  -H "x-api-key: $OHMYGPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "anthropic/claude-haiku-4-5", "max_tokens": 256,
       "messages": [{"role": "user", "content": "Explain QUIC in two sentences."}]}'

第一个请求返回 chat.completion 对象,第二个返回 Anthropic 的 message。

原生协议

每个模型都有一种原生协议:Claude 是 Messages,Gemini 模型是 Gemini,GPT、DeepSeek、Qwen 和其他大多数模型是 Chat Completions。GET /v1/models 用 "native": true 标出原生协议:

curl -s https://api.ohmygpt.com/v1/models \
  | jq -r '.data[] | select(.id == "anthropic/claude-haiku-4-5") | .protocols[] | [.path, (.native // false)] | @tsv'
/v1/chat/completions	false
/v1/responses	false
/v1/messages	true
/v1/models/{id}:generateContent	false

在原生协议上,模型收到的请求体与你发送的完全一致,所以厂商特有字段和 beta 功能都按厂商文档的说明生效。OhMyGPT 只处理以下字段:

字段OhMyGPT 的处理
model把你的模型 ID 解析为厂商的模型 ID
stream保持你的设置
stream_optionsChat Completions 的流总会以一个用量数据块结尾
provider在 Chat Completions 和 Responses 中读取你的路由偏好
safetySettings不带此字段的 Gemini 请求,四个可调类别会设为 OFF;见 Gemini
anthropic-version在 Messages 中,如果没有发送,则设为 2023-06-01;其他 anthropic-* 请求头(例如 anthropic-beta)原样透传

其他协议

在其他协议上,OhMyGPT 会把你的请求转换成模型的原生协议,再把回答转换回来。消息、系统提示词、图片、工具、工具选择、token 上限、结构化输出和推理控制都会完整保留;模型有对应项的采样与输出参数也一样。响应按你所用协议的格式返回,结束原因也用该协议的取值。

模型没有对应项的采样或输出参数(例如发给 Claude 的 seed 或 logprobs)不会发送,模型按自己的默认行为作答。各模型系列支持哪些参数,见参数。Chat Completions 的 enable_thinking 和 thinking_budget(请改用推理控制),以及 Responses 的 max_tool_calls、truncation、top_logprobs 也一样。

有少数字段携带只有模型原生协议才能送达的输入,例如上游保存的上下文、服务端工具或提示词模板。请在原生协议上发送:

协议需在原生协议上发送的字段
Chat Completionsfunctions 和 function_call(或改用 tools 和 tool_choice,所有模型都支持)
Responsesbackground、conversation、prompt
Messagescontainer、mcp_servers,以及 web_search_20250305 等服务端工具
GeminicachedContent

如果这些字段通过其他协议发给模型,请求会在到达模型之前返回 400,因此不会产生费用,你也不会拿到一个悄悄漏掉了部分输入的回答:

{
  "error": {
    "type": "invalid_request_error",
    "code": "unsupported_parameter",
    "param": "background",
    "message": "The model `mock` does not support the `background` parameter."
  }
}

值为 null、false、""、[] 或 {} 的字段视为未设置,所以 SDK 的默认值不会触发这个错误。

错误

错误按你调用的协议格式返回,所以 SDK 的错误类型无需任何改动即可使用。

{
  "error": {
    "type": "invalid_request_error",
    "code": "unsupported_endpoint",
    "param": "model",
    "message": "The model `ohmygpt/mock` does not support this endpoint. `GET /v1/models` lists the endpoints each model supports."
  }
}

OpenAI 格式的错误中,code 是稳定的取值,可以据此做分支判断。错误列出了所有 code,以及每种状态码的处理方法。

本页目录