从 OpenRouter 迁移
只改 base URL 和 Key,就能把 OpenRouter 上的代码切到 OhMyGPT,SDK 代码照常运行。
切换只需改两处:base URL 和 Key。你的 OpenAI SDK 代码、流式输出、工具调用、结构化输出、provider 对象和应用归属请求头都能原样继续工作。切换之后,每个响应都会写明这次的确切花费;免费的 ohmygpt/mock 模型还能让你在花钱之前先验证切换是否成功。
1. 修改 base URL 和 Key
| 切换前 | 切换后 | |
|---|---|---|
| Base URL | https://openrouter.ai/api/v1 | https://api.ohmygpt.com/v1 |
| Key | OpenRouter 的 Key | 在 API Key 页面获取的 OhMyGPT Key |
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="ohmygpt/mock",
messages=[{"role": "user", "content": "Hello"}],
)
print(completion.choices[0].message.content)This is a mock reply from OhMyGPT. Your integration works; switch to a real model when ready.mock 模型免费,账户完成充值后即可使用。它能正常回复,就说明 URL 和 Key 都配置对了。
2. 设置模型 ID
模型 ID 同样是 creator/model 格式。很多 ID 完全相同;有些则是厂商名不同,或版本号里用连字符:
| OpenRouter | OhMyGPT |
|---|---|
openai/gpt-5.4-nano | openai/gpt-5.4-nano |
anthropic/claude-sonnet-4.6 | anthropic/claude-sonnet-4-6 |
x-ai/grok-4.7 | xai/grok-4.7 |
z-ai/glm-5.3 | zhipu/glm-5.3 |
moonshotai/kimi-k2.6 | moonshot/kimi-k2.6 |
列出所有 ID:
curl -s https://api.ohmygpt.com/v1/models | jq -r '.data[] | select(.available) | .id'价格见模型页面。ID 写错时会返回 404,并指出是哪个 ID:
{
"error": {
"message": "The model `anthropic/claude-sonnet-4.6` does not exist. List available models with `GET /v1/models`.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found"
}
}照常可用的功能
provider对象:在 Chat Completions 和 Responses 上可用,支持order、only、ignore和sort(price、latency或throughput)。供应商标识用GET /v1/models中每个模型providers[].provider下列出的值。详见供应商路由。- 应用归属请求头:
HTTP-Referer、X-OpenRouter-Title(或X-Title)和X-OpenRouter-Categories都会原样读取。详见应用归属。 - 流式输出、工具调用和结构化输出(带 JSON schema 的
response_format),均为标准的 OpenAI 格式。 - 非流式响应都带用量。 Chat Completions 的流与 OpenAI 一致,设置
"stream_options": {"include_usage": true}后返回用量。
需要换一种写法的请求选项
| OpenRouter 请求中的写法 | OhMyGPT 中的写法 |
|---|---|
模型后缀 :floor | "provider": {"sort": "price"} |
模型后缀 :nitro | "provider": {"sort": "throughput"} |
| 其他模型后缀 | 直接用原始模型 ID |
models 备用模型列表 | 不用传。一个模型有多家供应商时,OhMyGPT 已经会把失败的请求转给下一家;如果想回退到另一个模型,用那个模型的 ID 重试即可。详见可靠性 |
usage: {"include": true} | 不用传。非流式响应总是带用量;Chat Completions 的流改用 "stream_options": {"include_usage": true} |
Chat Completions 上的 reasoning: {"effort": "low"} | "reasoning_effort": "low" |
transforms、route | 不用传 |
order、only、ignore、sort 以外的 provider 字段 | 不用传。如果某个字段会影响路由,400 响应会在 param 中指出该字段 |
查看每个请求的费用
每个响应都带有 X-Request-ID。非流式响应还带有 X-Cost-Credits,即以 Credits 计的确切费用;流式响应则在最后一个事件之前以 SSE 注释行 : x-cost-credits: N 发送。用量页面列出每个请求及其费用,Credits 的说明见费用。
也可以用 Anthropic 和 Gemini 的 SDK
同一个 Key 也能调用 /v1/messages 上的 Anthropic Messages API,以及 /v1/models/{model}:generateContent 上的 Gemini API。为 Anthropic 或 Google SDK 编写的代码不用改格式就能调用 OhMyGPT。各 SDK 的 base URL 见协议表。