什么是 OpenAI 兼容路由?开发者 AI Gateway 入门指南
OpenAI 兼容路由让你用一个端点把任意 OpenAI SDK 的请求分发到多家模型供应商,同时获得 fallback、计费合并和可观测性。本指南解释它的工作原理、选型标准,以及如何在一分钟内完成首次请求。
大多数团队刚起步时只用一家 LLM 供应商。OpenAI SDK 加一个 API key,调一次 POST /v1/chat/completions,一切正常。然后需求开始增长,第二家供应商负责降低成本或延迟,第三家当主供应商被限速时兜底。代码库里突然出现供应商专用的客户端、分别处理的错误逻辑和三套账单面板。
OpenAI 兼容路由的做法是把自己放在应用和所有供应商之间。你继续用 OpenAI SDK,只改两行代码,base_url 和 API key。路由把请求翻译给你选的供应商,在模型不可用时自动 fallback,并给你一份账单和一套日志。
这篇指南拆解这个兼容层到底做了什么、选型前要看哪几点、以及怎样在一分钟内发出第一个经过路由的请求。
OpenAI 兼容指供应商提供一个 chat-completions 接口,其请求与响应结构与 OpenAI API 契约足够接近——只需替换三个值(API key、base URL、模型名),原来的 OpenAI SDK 调用即可直接工作。最小实践面是POST /v1/chat/completions 带 messages、model, 并返回 OpenAI 形式的流式响应。
OpenAI 兼容是怎么实现的
OpenAI Chat Completions API 已经成为 LLM 请求的事实标准。约定很简单,向 /v1/chat/completions 端点发送一个包含 model、messages 以及可选参数(temperature、max_tokens、tools、stream)的 JSON body,拿回一个包含 choices、usage 和元数据的 JSON 响应。
OpenAI 兼容路由接受完全相同的约定。它在底层做三件事。
-
模型解析。
model字段带着供应商前缀,比如anthropic/claude-sonnet-4.5或deepseek/deepseek-chat。路由把它映射到上游供应商的端点和认证信息。 -
**请求翻译。**多数供应商接受 OpenAI 格式的请求,但细节有差异,比如推理力度的参数名、thinking token 预算、多模态输入格式、tool calling schema。路由在转发前做好标准化。
-
**响应归一化。**不管哪家供应商实际服务了请求,返回给你的始终是标准的
choices[0].message.content结构。供应商特有的字段(比如 DeepSeek 的reasoning_content)在已验证的情况下会被保留。
最终效果是添加供应商、换模型、配 fallback,应用代码一行都不用改。
路由在兼容之外还提供什么
翻译请求格式只是基本功。路由层的实际价值体现在五个方面。
Fallback 和重试
当供应商返回 429(限速)、503(过载)或超时,路由尝试 fallback 链中的下一个模型。你的应用收到一个正常响应,响应里的 model 字段告诉你到底是哪家供应商接了这个请求。
费用追踪
所有请求走同一个端点。路由按模型、按团队、按 API key 统计 input token、output token 和 cached token。不再需要对账三家供应商的仪表盘,一个成本视图就够了。
可观测性
延迟、错误率、token 计数、fallback 事件,全部记录在一个地方。做监控和告警时不用给每家供应商的客户端分别埋点。
访问控制
每个团队或应用一个 API key,key 级别的模型白名单、限速和花费上限。路由用服务器端保存的供应商凭据完成上游认证,团队成员不接触供应商密钥。
Streaming 兼容
不管供应商如何,SSE streaming 的行为都一样。路由把每家供应商的 chunk 格式翻译成标准的 data: {"choices":[...]} 结构。跨供应商 streaming 的细节可以参考跨供应商 streaming 指南。
选型前要看的五件事
不是所有路由都一样好。在生产环境里,这五件事最重要。
1. 兼容深度。 路由能不能正确处理 tool calling、structured output(response_format)、streaming、vision 输入和 reasoning effort 参数?浅层兼容在基本聊天之外就会出问题。
2. 延迟开销。 任何代理都增加往返时间。在你的流量模式下测量 P50 和 P99 的新增延迟。好的路由只加个位数毫秒,差的加几百毫秒。
3. 定价模型。 有的路由按请求收费,有的在供应商成本上加百分比,有的收固定平台费。按你预期的请求量算总成本,包括路由透传的供应商费用。详细对比见 AI model router 定价对比。
4. 供应商覆盖范围。 检查路由是否支持你今天需要的模型和供应商,以及添加新供应商需要改配置还是改代码。
5. 可观测面。 日志、仪表盘和 webhook 告警比功能列表重要。如果你看不到哪些请求触发了 fallback、哪些模型慢、钱花在了哪里,路由就没发挥作用。
快速上手:60 秒内发出第一个路由请求
下面的示例用 TheRouter 做 gateway。TheRouter 把 OpenAI 兼容请求路由到已配置的供应商,支持供应商/模型级别的 fallback。
Python
from openai import OpenAI
client = OpenAI(
base_url="https://api.therouter.ai/v1",
api_key="<THEROUTER_API_KEY>",
)
response = client.chat.completions.create(
model="anthropic/claude-sonnet-4.5",
messages=[{"role": "user", "content": "用两句话解释 LLM 路由是什么。"}],
)
print(response.choices[0].message.content)
Node.js
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.therouter.ai/v1",
apiKey: "<THEROUTER_API_KEY>",
});
const completion = await client.chat.completions.create({
model: "anthropic/claude-sonnet-4.5",
messages: [{ role: "user", content: "用两句话解释 LLM 路由是什么。" }],
});
console.log(completion.choices[0].message.content);
cURL
curl https://api.therouter.ai/v1/chat/completions \
-H "Authorization: Bearer $THEROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-chat",
"messages": [{"role": "user", "content": "LLM 路由是什么?"}]
}'
和直接调 OpenAI 相比只改了两样东西,base URL 和 API key。SDK、请求结构、响应格式全部不变。
添加 fallback 链
路由的意义在于可靠性。传一个 models 数组来定义 fallback 链,TheRouter 按顺序尝试模型,第一个成功的就返回。
const completion = await client.chat.completions.create({
model: "openai/gpt-5",
extra_body: {
models: ["anthropic/claude-sonnet-4.5", "deepseek/deepseek-chat"],
},
messages: [{ role: "user", content: "对这个工单做分类。" }],
});
如果 gpt-5 返回限速错误,路由会尝试 claude-sonnet-4.5;如果也失败,再 fallback 到 deepseek-chat。响应的 model 字段告诉你最终是哪个模型完成了请求。完整 fallback API 见模型 fallback 指南。
常见使用场景
多供应商容灾
用路由最常见的理由。供应商宕机、限速、审核拒绝不是假设,几乎每周都会遇到。Fallback 链把用户面的错误变成透明的重试。
成本优化
低复杂度请求走便宜模型,高复杂度请求用贵的前沿模型。具体的分桶策略见成本优化路由指南。
Coding agent 路由
Cursor、Claude Code、Windsurf 都支持自定义 base_url。把它们指向路由就能控制模型选择、给每个开发者设花费上限、记录每一次请求。逐工具的配置方法见 coding agent API 路由对比。
模型 A/B 测试
按请求属性把流量分给两个模型,比较输出质量、延迟和成本。路由会记录两条路径,应用代码完全不变。
TheRouter 作为 OpenAI 兼容路由
TheRouter 把 OpenAI 兼容请求路由到已配置的供应商,支持供应商/模型级别的路由和 fallback,提供统一的计费和账务面板,支持通过 /v1/jobs/:id 处理异步 media 任务。
它不是唯一选择。OpenRouter、LiteLLM、Portkey 和 Cloudflare AI Gateway 都提供 OpenAI 兼容路由,各有取舍。详细对比见 gateway 横评。
TheRouter 具体做了这些事。
- 单一端点
https://api.therouter.ai/v1接受任意 OpenAI SDK 调用 - 供应商前缀模型
anthropic/claude-sonnet-4.5、deepseek/deepseek-chat、openai/gpt-5、dashscope/qwen3.8-max - Fallback 链 通过
models数组按优先级定义备选 - Streaming 跨所有路由供应商的 SSE 兼容 streaming
- Tool calling 转发给支持的供应商,必要时做格式翻译
FAQ
Streaming 经过路由后行为一样吗?
一样。路由把每家供应商的 SSE chunk 格式翻译成标准的 OpenAI streaming 结构。你的 stream: true 代码不需要任何改动。
Tool calling 和 function calling 支持吗? Tool calling 会被转发给上游供应商。当供应商的格式不同时,路由负责翻译 tool schema。各供应商的差异见function calling 横评。
供应商特有的响应字段能保留吗?
已验证的字段(比如 DeepSeek 的 reasoning_content)会被保留。路由不会剥离供应商扩展字段,但也不保证每一个未文档化的字段都能透传。
如果 fallback 链里所有模型都失败了怎么办? 路由返回最后一个尝试的模型的错误。你的应用收到标准的错误响应,处理方式和直接调供应商一样。
会增加延迟吗? 任何代理都会增加一些延迟。实现良好的路由在路由决策上增加个位数毫秒。真正决定总延迟的还是供应商的推理时间,通常在几百毫秒到数秒之间。
能用在 Cursor、Claude Code 这类 coding agent 上吗? 可以。这两个工具都接受自定义 base URL。把它们指向路由端点,请求就走路由层了。逐步配置方法见 coding tools 设置指南。
来源 OpenAI API 文档、OpenRouter, LLM Gateway 解读、TheRouter 快速上手、TheRouter 模型 fallback、LiteLLM GitHub、Cloudflare AI Gateway 文档