Smart Routing 智能路由

按需启用的跨厂商回退。了解 Smart Routing 做什么、如何按 API key 开关、如何识别实际服务的模型。

Smart Routing 智能路由

Smart Routing 是一个按需启用的跨厂商回退机制。当请求发往主厂商失败时,网关可以在同一能力档位内将该请求重试到另一个厂商——不需要你改客户端代码。

该功能默认关闭。 每个 API key 创建时 Smart Routing 均为禁用状态。你可以在 dashboard 中按 key 开启,也可以随时关闭。

Smart Routing 做什么、何时回退

当某个 API key 开启了 Smart Routing 时,网关先将请求发往你的 model 参数所映射的厂商(即"原始厂商")。如果该次尝试因下列任一条件失败,网关会按回退链将同一请求重试到下一个厂商:

触发条件

说明

429

上游限流

5xx

上游服务端错误

timeout

上游请求超时(同时涵盖网络级故障与 HTTP 408)

quota

上游配额耗尽

circuit_open

熔断器因连续失败而打开——网关直接跳过该厂商

其他任何 4xx 错误(如 400、401、403、404、422)视为客户端问题,原样透传给你的——Smart Routing 不会重试这些错误。

哪些厂商参与回退

Smart Routing 目前在 Anthropic ⇄ OpenAI ⇄ DeepSeek 之间做同能力档位映射(高档 / 中档 / 低档)。回退不会降档到更低能力档位。

其他厂商的模型——Gemini、GLM、Kimi 等——不在回退矩阵内。如果请求发往这些厂商失败,错误会直接返回给你,不存在跨厂商重试。

如果没有任何可用的回退目标(例如原始厂商不在矩阵内且已失败),网关返回 `502`,响应头 X-Served-By: none。

如何开启 / 关闭

Smart Routing 按 API key 在 dashboard 中控制:

  1. 打开 Dashboard → 你的 workspace → API Keys(/dashboard/{workspace-slug}/api-keys)。

  2. 找到你要配置的 key。

  3. 点击该 key 行内的路由开关,控件标签为 "跨厂商路由"(英文界面为 "Cross-provider routing")。

  4. 开关即时生效。显示 "路由已开启"("Routing enabled")时,使用该 key 的请求参与 Smart Routing;显示 "路由已关闭"("Routing disabled")时,请求直接发往 model 参数指定的厂商。

你可以随时关闭 Smart Routing。关闭后即恢复直连——不需要修改客户端配置;关闭期间请求不会被重试到其他厂商。

该设置存储在 API key 上(api_keys.routing_enabled,默认值 0)。使用未开启该标志的 key 发出的请求永远不会进入回退路径。

如何识别实际服务的模型

当请求启用了 Smart Routing 时,响应会携带四个 X-Served-By* 响应头,精确告诉你响应体由哪个厂商、哪个模型产出。

响应头

格式

含义

X-Served-By

<provider>:<model>

实际服务本次响应的厂商与模型。示例:openai:gpt-4o。全部失败时为 none。

X-Served-By-Fallback-Chain

逗号分隔的厂商列表

网关尝试过的所有厂商,按顺序。示例:anthropic,openai。

X-Served-By-Original

<provider>:<model>

你原始请求的厂商与模型。示例:anthropic:claude-sonnet-4-6。

X-Served-By-Reason

none、429、5xx、timeout、quota、circuit_open

回退原因。none 表示原始厂商成功返回。

示例

bash
curl -sD - -o /dev/null https://api.codegateway.dev/v1/chat/completions \
-H "Authorization: Bearer $CODEGATEWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [{"role": "user", "content": "hello"}]
}'

响应头(原始厂商返回 5xx,触发回退):

text
X-Served-By: openai:gpt-4o
X-Served-By-Fallback-Chain: anthropic,openai
X-Served-By-Original: anthropic:claude-sonnet-4-6
X-Served-By-Reason: 5xx

当原始厂商成功时,X-Served-By 与 X-Served-By-Original 一致,X-Served-By-Reason 为 none。

流式响应

对于流式(SSE)响应,这些响应头在 body 之前发送。你可以先读到它们,再决定是否消费后续流——例如先记录实际模型,或中止处理。

bash
curl -sN -D - https://api.codegateway.dev/v1/chat/completions \
-H "Authorization: Bearer $CODEGATEWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"stream": true,
"messages": [{"role": "user", "content": "hello"}]
}'

X-Served-By* 响应头出现在初始 HTTP 响应头中,在 SSE 流的任何 data: 行之前。

注意:通过 /v1/chat/completions 请求 Anthropic 系模型时,请求走跨端点翻译通路,不经 Smart Routing,也不返回 X-Served-By* 头;需要读取这些头请使用 /v1/messages。

对工具调用 / 输出格式的影响(开启时)

发生回退后,请求由不同厂商服务。跨厂商的响应不保证行为一致。如果你的集成依赖以下任何一项,请在生产依赖之前先对回退路径做测试:

  • 工具调用 / function-call 语法——各厂商的工具定义与工具调用响应格式不同。

  • Stop reason——指示生成结束原因的字段,不同厂商可能使用不同取值或命名。

  • Token 计数——同等请求在不同厂商下的输入/输出 token 统计可能有差异。

  • 延迟——回退目标厂商的响应速度可能更快或更慢。

当 `X-Served-By` 与 `X-Served-By-Original` 不一致时,说明响应由与你请求不同的厂商产出。 解析响应结构(工具调用、stop reason、token 用量)的自动化流程,在服务厂商发生变化时应重新验证行为——或者通过不开启 Smart Routing 来固定路径。

计费

按实际服务该请求的厂商计费——即 X-Served-By 中显示的厂商。如果回退将请求从一个厂商转移到了另一个厂商,你按目标厂商的费率计费,而非原始厂商。

要审计某次请求实际由哪个模型服务,打开 Dashboard → 你的 workspace → Logs(/dashboard/{workspace-slug}/logs)。每条日志在你请求的模型旁显示实际厂商与模型(actual_provider / actual_model),便于你在回退发生后核对成本与用量。

このドキュメントを実際のAPI呼び出しにする

公式キーがない、海外発行カードでの支払いが難しい場合でも、登録後にsk-cg-キーを作成し、ベースURLをCodeGatewayに向けるだけで、既存のSDKやCLIをそのまま使えます。トークン単位の従量課金。カードを登録すると無料クレジットが付与されます。

無料で登録
Author:CodeGateway Team