# 从 OpenRouter 迁移 (/docs/zh-CN/migrate-from-openrouter)

切换只需改两处：base URL 和 Key。你的 OpenAI SDK 代码、流式输出、工具调用、结构化输出、`provider` 对象和应用归属请求头都能原样继续工作。切换之后，每个响应都会写明这次的确切花费；免费的 `ohmygpt/mock` 模型还能让你在花钱之前先验证切换是否成功。

## 1. 修改 base URL 和 Key [#1-修改-base-url-和-key]

| | 切换前 | 切换后 |
|---|---|---|
| Base URL | `https://openrouter.ai/api/v1` | `https://api.ohmygpt.com/v1` |
| Key | OpenRouter 的 Key | 在 [API Key](https://www.ohmygpt.com/keys) 页面获取的 OhMyGPT Key |

```python tab="Python"
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)
```

```ts tab="TypeScript"
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://api.ohmygpt.com/v1',
  apiKey: process.env.OHMYGPT_API_KEY,
});

const completion = await client.chat.completions.create({
  model: 'ohmygpt/mock',
  messages: [{ role: 'user', content: 'Hello' }],
});
console.log(completion.choices[0].message.content);
```

```bash tab="cURL"
curl https://api.ohmygpt.com/v1/chat/completions \
  -H "Authorization: Bearer $OHMYGPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "ohmygpt/mock", "messages": [{"role": "user", "content": "Hello"}]}'
```

```text
This is a mock reply from OhMyGPT. Your integration works; switch to a real model when ready.
```

mock 模型免费，账户完成充值后即可使用。它能正常回复，就说明 URL 和 Key 都配置对了。

## 2. 设置模型 ID [#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：

```bash
curl -s https://api.ohmygpt.com/v1/models | jq -r '.data[] | select(.available) | .id'
```

价格见[模型](https://www.ohmygpt.com/models)页面。ID 写错时会返回 `404`，并指出是哪个 ID：

```json
{
  "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`、`allow_fallbacks` 和 `sort`（`price`、`latency` 或 `throughput`，写成字符串或 `{"by": "price"}` 都行）。`amazon-bedrock`、`google-vertex` 这类 OpenRouter 的供应商标识照写即可；每个模型自己的标识列在 `GET /v1/models` 的 `providers[].provider` 下。详见[供应商路由](/docs/zh-CN/provider-routing)。
- **`openrouter/auto`** 及其 `auto-router` 插件（`allowed_models`、`excluded_models`、`cost_tier`）。详见[自动选模型](/docs/zh-CN/auto-router)。
- **应用归属请求头**：`HTTP-Referer`、`X-OpenRouter-Title`（或 `X-Title`）和 `X-OpenRouter-Categories` 都会原样读取。详见[应用归属](/docs/zh-CN/app-attribution)。
- **流式输出、工具调用和结构化输出**（带 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 重试即可。详见[可靠性](/docs/zh-CN/reliability) |
| `usage: {"include": true}` | 不用传。非流式响应总是带用量；Chat Completions 的流改用 `"stream_options": {"include_usage": true}` |
| Chat Completions 上的 `reasoning: {"effort": "low"}` | `"reasoning_effort": "low"` |
| `transforms`、`route` | 不用传 |
| `order`、`only`、`ignore`、`allow_fallbacks`、`sort` 以外的 `provider` 字段 | 不用传。如果某个字段会影响路由，`400` 响应会在 `param` 中指出该字段 |

## 查看每个请求的费用 [#查看每个请求的费用]

每个响应都带有 `X-Request-ID`。非流式响应还带有 `X-Cost-Credits`，即以 Credits 计的确切费用；流式响应则在最后一个事件之前以 SSE 注释行 `: x-cost-credits: N` 发送。[用量](https://www.ohmygpt.com/usage)页面列出每个请求及其费用，Credits 的说明见[费用](/docs/zh-CN/costs)。

## 也可以用 Anthropic 和 Gemini 的 SDK [#也可以用-anthropic-和-gemini-的-sdk]

同一个 Key 也能调用 `/v1/messages` 上的 Anthropic Messages API，以及 `/v1/models/{model}:generateContent` 上的 Gemini API。为 Anthropic 或 Google SDK 编写的代码不用改格式就能调用 OhMyGPT。各 SDK 的 base URL 见[协议表](/docs/zh-CN#base-url-与协议)。
