概览
智能路由包含两个需要许可证的扩展,可与核心版的虚拟模型组合使用:- 智能档位路由回答的问题是:这个请求应该使用哪个质量档位? 它会在选择提供商之前,将已配置的模型别名划分到
easy或hard档位,从而让简短的聊天发往便宜的模型,而推理密集、代码密集或工具密集的任务发往能力强的模型。 - 自适应路由回答的问题是:在该档位内使用哪个提供商? 它根据观测到的延迟、错误、冷却状态以及配置的成本或延迟目标,从虚拟模型的目标池中选择一个上游目标。
model: "normal" 的请求会被改写为 normal-easy 或
normal-hard;如果其中任一个是使用 adaptive
策略的虚拟模型,选择器随后会为其挑选最佳提供商。
智能档位路由
使用普通的 GoModel 模型名称配置分档别名。档位目标可以是具体模型,也可以是虚拟模型:PRO_SMART_ROUTING_ROUTES 中列出的别名才会被改写;其他所有模型名称都原样通过。如果未配置任何路由,该功能处于空闲状态,启动日志会给出提示。
请求如何评分
分类是确定性的,在进程内运行,不调用任何模型。显式要求推理的请求(reasoning_effort 为 medium 或更高,或带有 Anthropic thinking 块)会直接进入困难档位。
否则,请求会累计分数,分数达到或超过
PRO_SMART_ROUTING_THRESHOLD(默认 4)时选择困难档位:
在默认设置下,仅有一小段代码(3 分)会留在简单档位,而代码加上 2k 字符的上下文(4 分)则会升级。降低阈值可将更多流量发往困难档位,提高阈值则可保护便宜档位。
会话固定
所选档位会按路由别名和检测到的会话进行固定(参见 会话保持)。该固定只升不降: 在固定有效期间,对话可以从简单档位升到困难档位,但永远不会被静默降级,因此像“谢谢!”这样的后续消息不会把困难对话打回便宜档位,也不会使其提供商提示词缓存失效。固定在PRO_SMART_ROUTING_SESSION_TTL 时长内无活动后过期。
配置智能档位路由
覆盖和检查决策
发送X-GoModel-Smart-Routing: off 可为单个请求跳过分类,
发送 X-GoModel-Tier: easy 或 X-GoModel-Tier: hard 可强制指定其档位,且不改变会话固定。
每个经过路由的响应都会报告该决策:
gomodel_pro_smartroute_ 前缀公开请求、升级和评分指标;评分直方图是根据真实流量调整阈值的工具。
自适应路由
自适应路由用一个感知健康状况的选择器取代了核心版的round_robin 和 cost 策略。它在启动时为整个网关注册一次,但只有配置了 strategy: adaptive 的虚拟模型才会使用它——其他所有虚拟模型保持原有策略。
routing 授权的 Pro 构建时,adaptive 才会出现在虚拟模型策略下拉菜单中。在开源构建上,strategy: adaptive 的虚拟模型会回退为轮询。
如何选择目标
选择采用“二选一”(power-of-two-choices)算法:按权重比例抽取两个候选,瞬时负载(延迟估算 × 进行中的请求数)较低的一方胜出。权重根据进程内状态按请求重新计算——请求路径上没有外部存储。- 延迟——每个目标都维护一个峰值 EWMA 延迟估算(对于流式请求为首字节时间),由每一次上游尝试(包括重试和故障转移)更新。
- 冷却——
429会触发时长为PRO_ROUTING_COOLDOWN_BASE的冷却,每次连续触发时翻倍,最多到PRO_ROUTING_COOLDOWN_MAX;401、403和404会立即以最大时长冷却;重复的 5xx 或网络故障在连续三次后进入冷却。只要有其他目标可用,处于冷却中的目标就会被跳过。 - 权重下限——每个未处于冷却中的目标至少保留最重候选权重的
PRO_ROUTING_MIN_WEIGHT_FRACTION,因此较慢或正在恢复的目标仍能获得少量流量,并通过真实请求证明其已恢复。 - 提示词缓存热度——上一次为某个检测到的会话提供服务的提供商,会在
PRO_ROUTING_WARM_CACHE_TTL内获得PRO_ROUTING_WARM_CACHE_WEIGHT的权重加成, 从而在其提示词缓存很可能仍然有效时,让对话保持在同一凭据、端点和区域上。处于冷却中的目标会失去该加成。
配置自适应路由
会话保持与健康状况
启用会话保持(默认启用)时,只要有多个可用目标,网关就会将当前为每个会话提供服务的目标交给选择器,由它逐个请求决定该会话是否继续使用该目标。(只有一个可用目标时没有选择余地,因此会跳过选择器。)只要该目标保持健康,固定就会一直有效——迁移会话会丢弃固定所要保护的提供商提示词缓存,因此即使存在便宜得多或快得多的替代目标,也不会抢走该会话。只有当目标进入冷却时,固定才会被释放,随后会话会重新固定到选择器选出的目标上。 这是网关自身无法做出的唯一判断:一个正在返回429 或超时的目标,仍然是已配置且受目录支持的目标,因此能通过核心版固定机制的所有检查。如果请求路径中没有选择器,智能体会话(一个会话 ID、成千上万个请求)会在第一个请求时被固定,并在固定的整个有效期内一直使用这个故障目标,而这只会表现为延迟和浪费的上游支出,因为故障转移仍会向客户端返回 200。
gomodel_pro_routing_session_affinity_total{outcome} 统计 honored(被遵守)的固定和因冷却而 released(被释放)的固定,因此您可以在 Prometheus 中看到这一行为,而不必等到提供商账单上才发现。
Prometheus 指标使用 gomodel_pro_routing_ 前缀(选择、拒绝、结果、冷却、会话亲和性以及延迟估算仪表)。评分状态按节点保存;各副本独立学习,互不共享。