作者:Theo Park13 分钟阅读Migration, OpenRouter, OminiGate, Rollout, LLM Gateway

从 OpenRouter 迁移到 OminiGate:分步实操手册

不中断生产的供应商切换实战。覆盖端点、模型 slug 映射、Header、流式响应与流量灰度策略,每个事实都对照当前官方文档核实。

OpenRouter 与 OminiGate 都对外暴露 OpenAI 兼容协议,因此把流量从前者 切到后者基本是机械动作——改 base URL、换 key、调几个 Header、核对 model slug。出错往往出在细节:一个看上去合理但其实 没上架的 slug、一个忘了去掉的归因 Header、一个你的代码还在引用 但 Anthropic 已经退役的模型。本文以 2026-04-28 当天可核对的官方 文档为依据,逐步给出可操作步骤。

前提两条:你的应用通过 OpenAI 兼容的 /v1/chat/completions 端点调 OpenRouter(最常见),并 且希望整个切换可以从负载均衡层一键回滚。如果你用 Anthropic 兼容的 /v1/messages 端点,OminiGate 的对等地址是 https://api.ominigate.ai,本文其余内容 同样适用。

迁移动机

OpenRouter 是一款合格的网关,对许多团队来说是合理的默认选择。我们 听到的迁移理由都很务实,不带情绪:

  • 计费结构。OpenRouter 在非加密支付的充值环节收取 5.5%(最低 0.80 美元)平台费,token 本身按上游 原价透传无加价(来源)。 BYOK 模式下,每月前 100 万次请求免费,超出部分目前按 5% 收费, 但官方公告该费率将被替换为月费订阅,新价尚未 公布(来源)。 需要做 12 个月成本测算的团队不喜欢这种不确定性。
  • 归因暴露面。OpenRouter 鼓励发 HTTP-RefererX-OpenRouter-Title, 以便你的应用出现在公开排行榜上(文档)。 有些团队不希望内部应用名出现在公共榜单。
  • 路由意外。当某个 model slug 没直接上架时, OpenRouter 可能转路由或返回 not available。截至成 文时,google/gemini-3-pro google/gemini-3.1-pro都返回“不可用” 并引导到 Discord 申请。实际可用的 slug 是 google/gemini-3.1-pro-preview
  • 统一供应商。有些团队已经在 OminiGate 上使用图像 和视频模型(截至 2026-04-28 共 81 个图像 + 80 个视频),希望 chat / image / video 的账单合并到一个供应商。

以上都不是对 OpenRouter 的批评,只是这些场景下的一日迁移值得花 工程师时间。如果以上都跟你无关,留在 OpenRouter 上没问题。

第 1 步:替换 base URL

OpenRouter 的 OpenAI 兼容 base URL 是 https://openrouter.ai/api/v1官方 Quickstart)。 OminiGate 的 OpenAI 兼容 base URL 是 https://api.ominigate.ai/v1,Anthropic 兼容地址为 https://api.ominigate.ai

用官方 OpenAI SDK 时只改一行:

client.pypython
# 改前
from openai import OpenAI
client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key=OPENROUTER_API_KEY,
)

# 改后
client = OpenAI(
    base_url="https://api.ominigate.ai/v1",
    api_key=OMINIGATE_API_KEY,
)

Node 同理:

client.tstypescript
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.ominigate.ai/v1",
  apiKey: process.env.OMINIGATE_API_KEY,
});

不要试图在一个 client 实例里靠特性开关切换两个供应商。灰度阶段保留 两个 client,路由放在调用点——这样回滚只是改一行配置, 不必重新初始化 SDK。

第 2 步:替换 API Key

OminiGate 的 key 前缀为 sk-omg-(OminiGate 文档与 控制台均可见)。直接在 Dashboard 新建 key,不要复用 OpenRouter 的 key——两边的格式不互通,且第一天就要拿到一条干净的成本 线。

两条运维注意事项:

  • 把新 key 加为新的环境变量(如 OMINIGATE_API_KEY),不要覆盖OPENROUTER_API_KEY。灰度期间两边都需要。
  • 如果你按租户发 key,按 1:1 与 OpenRouter 现有 key 对齐,方便审计 日志比对。

第 3 步:清理 Header

OpenRouter 的归因 Header 是 HTTP-Referer必填,否则“不会创建 app 页面,使用量也不会 出现在排行榜”)和 X-OpenRouter-Title(选填;X-Title 仍向后兼容)(App Attribution 文档), 另外还有 X-OpenRouter-Categories 用于市场分类标签。

OminiGate 没有排行榜,因此这些 Header 在 OminiGate 侧不会触发任何 逻辑。调 OminiGate 时把它们删掉——留着也无害,但双路由 代码的 diff 会更干净。

request-headers.diffdiff
  headers: {
    Authorization: `Bearer ${apiKey}`,
    "Content-Type": "application/json",
-   "HTTP-Referer": "https://your-app.example.com",
-   "X-OpenRouter-Title": "Your App",
  }

如果双路由层用 feature flag 切两边,更建议把 Header 放在按 provider 分支的配置块里,而不是全局删——只要还有一个 token 流量 走 OpenRouter,那条路径仍然需要这些 Header。

第 4 步:映射 model slug

这是迁移最容易翻车的地方,所以本节列得很细。下表每一行的两端 slug 都对照了上游官方退役页 / 各网关的实时 model 页核对(核对日期 2026-04-28)。

Anthropic

两个关键事实:(1) Anthropic 在 2026-04-14 弃用了 claude-sonnet-4-20250514 claude-opus-4-20250514,预定退役日为 2026-06-15;(2) 官方推荐替代分别是 claude-sonnet-4-6claude-opus-4-7Anthropic 退役表)。 如果你的代码还固定用 Claude Sonnet 4 或 Opus 4 基础版,本次迁移 正好顺手升级到 4.6 / 4.7——反正 60 天内都得动。

anthropic-slug-maptext
OpenRouter slug                         OminiGate slug
─────────────────────────────────────   ─────────────────────────────────────
anthropic/claude-opus-4.7            →  anthropic/claude-opus-4.7
anthropic/claude-opus-4.6            →  anthropic/claude-opus-4.6
anthropic/claude-opus-4.5            →  anthropic/claude-opus-4.5
anthropic/claude-sonnet-4.6          →  anthropic/claude-sonnet-4.6
anthropic/claude-sonnet-4.5          →  anthropic/claude-sonnet-4.5
anthropic/claude-haiku-4.5           →  anthropic/claude-haiku-4.5
anthropic/claude-3.7-sonnet  (已退役) → anthropic/claude-sonnet-4.6
anthropic/claude-3.5-sonnet  (legacy) → anthropic/claude-sonnet-4.6
anthropic/claude-3.5-haiku   (已退役) → anthropic/claude-haiku-4.5

来源:OminiGate 模型列表(2026-04-28 核对);OpenRouter 产品页 claude-opus-4.7claude-sonnet-4.6;退役状态见前述 Anthropic 官方表。

一个细节:anthropic/claude-3.5-sonnet 在 OpenRouter 上仍然显示,但其底层权重 claude-3-5-sonnet-20241022 已在 2025-10-28 由 Anthropic 正式退役。OpenRouter 的路由层在做兜底,但新代码应直接指向 claude-sonnet-4.6

OpenAI

OpenAI 于 2026-04-23 发布 GPT-5.5,次日开放 API(发布公告), 是当前 GPT-5 家族的旗舰;GPT-5.4 仍在线,是很多团队对延迟和成本敏感场景的日常主力。

openai-slug-maptext
OpenRouter slug                  OminiGate slug
──────────────────────────────   ──────────────────────────────
openai/gpt-5.5                →  openai/gpt-5.5
openai/gpt-5.5-pro            →  openai/gpt-5.5-pro
openai/gpt-5.4                →  openai/gpt-5.4
openai/gpt-5.4-mini           →  openai/gpt-5.4-mini
openai/gpt-5.4-nano           →  openai/gpt-5.4-nano
openai/gpt-5.4-pro            →  openai/gpt-5.4-pro
openai/gpt-5                  →  openai/gpt-5
openai/gpt-5-pro              →  openai/gpt-5-pro
openai/gpt-5-mini             →  openai/gpt-5-mini
openai/o3                     →  openai/o3
openai/o4-mini                →  openai/o4-mini

来源:OpenRouter 页 openai/gpt-5.5openai/gpt-5; OminiGate 模型列表(2026-04-28 核对)。

Google

这是最容易踩坑的家族。Gemini 3.1 Pro 在 2026-02-19 发布(model card), 但在两个网关上都以 -preview后缀挂载。不带后缀的 slug 不存在——OpenRouter 上 google/gemini-3.1-pro直接返回“不可用”。

google-slug-maptext
OpenRouter slug                              OminiGate slug
──────────────────────────────────────────   ──────────────────────────────────────────
google/gemini-3.1-pro-preview            →   google/gemini-3.1-pro-preview
google/gemini-3.1-pro-preview-customtools →  google/gemini-3.1-pro-preview-customtools
google/gemini-3.1-flash-lite-preview      →  google/gemini-3.1-flash-lite-preview
google/gemini-3.1-flash-image-preview     →  google/gemini-3.1-flash-image-preview

来源:OpenRouter 详情页 google/gemini-3.1-pro-preview; OminiGate 模型列表(2026-04-28 核对)。

如果代码当前还在用 google/gemini-2.5-pro,先在 OpenRouter 和 OminiGate 两端同时升到 3.1-preview,不要把版本 升级和供应商切换合并到同一次发布。

DeepSeek

DeepSeek 在 2026-04-24 发布 V4 双预览(DeepSeek changelog)。 老的 deepseek-chat / deepseek-reasoner 别名 将在 2026-07-24 15:59 UTC 完全退役,本表有明确的时间窗。

deepseek-slug-maptext
OpenRouter slug                  OminiGate slug
──────────────────────────────   ──────────────────────────────
deepseek/deepseek-v4-pro      →  deepseek/deepseek-v4-pro
deepseek/deepseek-v4-flash    →  deepseek/deepseek-v4-flash
deepseek/deepseek-v3.2        →  deepseek/deepseek-v3.2
deepseek/deepseek-v3.2-exp    →  deepseek/deepseek-v3.2-exp
deepseek/deepseek-chat        →  deepseek/deepseek-v4-flash  (chat 即将退役)

来源:OpenRouter 页 deepseek/deepseek-v4-pro; OminiGate 模型列表(2026-04-28 核对)。

Meta Llama

meta-slug-maptext
OpenRouter slug                                OminiGate slug
────────────────────────────────────────────   ────────────────────────────────────────────
meta-llama/llama-4-maverick                →   meta-llama/llama-4-maverick
meta-llama/llama-4-scout                   →   meta-llama/llama-4-scout
meta-llama/llama-3.3-70b-instruct          →   meta-llama/llama-3.3-70b-instruct
meta-llama/llama-3.1-70b-instruct          →   meta-llama/llama-3.1-70b-instruct

来源:OminiGate 模型列表(2026-04-28 核对);Llama 4 发布背景见 Meta Llama 4 公告

务实建议:不要让 LLM “贴心地” 帮你重写 slug 列表。把上面 的字符串原样写进代码,再加一条冒烟测试——断言响应里返回 的 model 字段等于你发出去的 slug。

第 5 步:验证流式响应

两边都遵循 OpenAI SSE 协议:以 data: {...} 分块、以 data: [DONE] 结束。OpenAI SDK 自带的流迭代 器对两个端点都开箱可用。两个实战注意点:

  • 末尾 usage 块。如果计费 / 分析依赖最末一帧的 usage 字段,记得在两端都发 stream_options: { include_usage: true }(OpenAI 标准),否则末帧不会带 token 计数。
  • 透传字段差异。OpenRouter 有时会回传上游特有字段 (如 provider、Anthropic 的 cache_read_input_tokens)。OminiGate 在调 Anthropic 家族时也会回传 cache_creation_input_tokens / cache_read_input_tokens,但其它字段集合略有不同。 如果你持久化整段响应,注意非计费字段的 schema 漂移。

建议同一 prompt 用 temperature=0 在两端各跑一次,对 流出文本和 token 计数做 byte-diff,整套切换以一个稳定 fixture 集 全部一致为准入门槛。

第 6 步:对账与可观测性

关心的数字是每千 token 成本,但出现在哪个账单行不同。OpenRouter 在 Dashboard 显示信用扣减,token 透传,非加密充值时收 5.5% 平台费。OminiGate 是按 token 计费、无 per-call 加价、无充值附加费(OminiGate 定价)。

举例:Claude Sonnet 4.6 在 OpenRouter 上是 $3/M 输入、$15/M 输出(来源)。 OminiGate 上同 token 单价透传,差异出现在充值环节。如果你向 OpenRouter 用 Stripe 充 1000 美元,实际付 1055 美元(5.5%); OminiGate 是按用量直接扣信用卡。

可观测性方面,两端都返回标准 OpenAI 字段: usage.prompt_tokens usage.completion_tokens usage.total_tokens。如果你记录了 response.id 用于 tracing,请注意前缀格式按 provider 变化,不要写死断言。

灰度策略

非平凡生产系统的安全切换路径:

  1. Day 0 — 双写、单读。引入特性开关 llm_provider,取值 openrouter | ominigate,默认 openrouter。结构化日志记录 provider、model slug、 延迟、token 计数。
  2. Day 1 — 影子流量。取 1-5% 请求,同 prompt 并行打到两端,返回 OpenRouter 结果,记录 OminiGate 结果与差异。 跑 24-72 小时。任何 token 计数偏差超过几个 token(少量分词漂移 正常,倍数不正常)都要排查。
  3. Day 3 — 10% 金丝雀。把 10% 用户切到 OminiGate,观察错误率、p95 延迟、单次成本。
  4. Day 5-7 — 25 / 50 / 100% 上量。每一步等两个 工作日时间窗的指标干净。
  5. Day 14 — 退役。100% 稳定一周后,移除 OpenRouter 路径并轮换 OpenRouter 的 key。

必须有一键回滚:在配置层把 llm_provider 翻回 openrouter,无需重新部署。如果回滚不能在 60 秒内完成, 说明第 1 步还没做完。

切换前自检清单

  • Slug 审计。grep 仓库里所有打到网关的 model 字符串, 逐个对照第 4 步映射表。重点关注包含 claude-sonnet-4-2025 claude-opus-4-2025 claude-3-5-sonnet、或不带 -previewgemini-3.1-pro 的命中项。
  • Header 审计。确认 HTTP-Referer X-OpenRouter-Title X-Title 仅出现在调 OpenRouter 的代码路径上。
  • 流式冒烟。同一 temperature=0 prompt 在两端跑, 做 byte diff。
  • Tool / function calling。每个模型家族至少跑一个 tool calling fixture。
  • Anthropic 缓存字段。如果依赖 prompt 缓存,验证 cache_creation_input_tokens cache_read_input_tokens 出现在 usage 中。
  • 限流响应头。对比代码假设的 schema 与实际响应头。
  • 对账脚本。5 行内的脚本,按天汇总日志的 total_tokens 与 provider 账单做差,迁移期间和之后 都跑。
  • 回滚开关压测。在 staging 来回切 llm_provider,确认会话中切换不破坏 provider-specific 代码路径。

参考来源

本文所有事实可追溯到下列 URL,均于 2026-04-28 当日核对。

常见问题

灰度期间可以让 OpenRouter 和 OminiGate 同时在线吗?

可以,而且推荐这么做。在调用点放一个特性开关,按百分比切流量,无需重新部署。两端都是 OpenAI 兼容协议,请求层差异只有 base URL、API Key、以及 OpenRouter 的归因 Header(HTTP-Referer / X-OpenRouter-Title)——后者只在调 OpenRouter 的路径上保留。

如果代码还在引用 claude-sonnet-4 或 claude-opus-4 怎么办?

两个基础版本已由 Anthropic 在 2026-04-14 正式弃用,预定 2026-06-15 退役(来源:Anthropic 官方退役表)。推荐替代分别是 claude-sonnet-4-6 和 claude-opus-4-7,在 OpenRouter 与 OminiGate 上的 slug 都是 anthropic/claude-sonnet-4.6 与 anthropic/claude-opus-4.7。无论用哪个网关,6 月中之前都应迁过去。

为什么 google/gemini-3.1-pro 在 OpenRouter 上不可用?

截至 2026-04-28,OpenRouter 只上架了 -preview 版 slug,即 google/gemini-3.1-pro-preview。直接调 google/gemini-3.1-pro 会返回“不可用”并提示去 Discord 申请。OminiGate 使用同样的 -preview 后缀,改用 -preview 形式后两端 slug 1:1 映射。

OminiGate 是否有类似 OpenRouter 充值费的 per-token 加价?

没有。OminiGate 是按 token 计费、无订阅、无最低消费、充值环节也无附加费(来源:ominigate.ai/en/pricing)。OpenRouter 那 5.5% 的非加密费是充值环节的支付平台费,不是 per-token 加价——OpenRouter token 单价对上游透传不加价。给定上游模型的每千 token 单价两端一致。

我的流式代码需要改动吗?

几乎不需要改。两端都实现 OpenAI SSE 协议,data: 分块、data: [DONE] 结束。OpenAI SDK 自带的流迭代器对两边都开箱可用。需要末帧 usage 时,加 stream_options: { include_usage: true }——OpenAI 标准,两端都支持。注意非计费字段(provider、cache_* 等)在两端的 schema 略有差异。

用一把 API Key 调用全部模型

几秒完成注册,一次充值即可访问 400+ 文本、图像与视频模型,继续使用熟悉的 OpenAI 与 Anthropic SDK。