3.6 模型路由与自动降级
模型路由决定一个请求真正被发往哪个模型,以及那个模型响应不了时降级到什么。它在侧边栏的模型路由里。
之所以需要它:Agent会自己决定用哪个模型名。Claude Code给你的对话用claude-sonnet-4-5,给后台的总结任务固定用claude-haiku-4-5,不管它被配成什么;Codex Desktop记的是它自己状态里选的模型,配置文件里写什么都不看。把它们指向一个从没听说过这些名字的供应商,请求里的模型名就不是那个供应商提供的名字。
一条规则都不写会怎样
不用配任何东西——这是默认行为,对大多数场景已经够用。
-
供应商确实提供的模型,按原样请求。
-
供应商没有的模型,会换成它提供的模型里尺寸档位最接近的那个,档位从名字读出来:
haiku、mini、flash、lite、air这类是小模型,opus、pro、max、reasoner、thinking是大模型,其余在中间。一个请求claude-haiku-4-5落到DeepSeek渠道上,会走deepseek-chat而不是deepseek-reasoner。这就是自动的那部分:不写任何规则,后台流量也留在便宜模型上。
-
如果有多个供应商提供同一个模型,按优先级依次尝试,处于失败冷却期的排在最后。
规则多做了什么
当你想自己指定一个模型去哪儿、而不是让名字来决定时,就写一条规则。
| 字段 | 含义 |
|---|---|
| 当客户端请求 | 请求里的模型名。*匹配任意长度的字符,所以*haiku*能覆盖它的所有版本。匹配时不区分大小写。 |
| Agent | 把规则限定到一个agent id。留空则覆盖所有调用方。 |
| 路由到 | 降级阶梯,第一行优先。 |
每一级可以只写模型、只写供应商,或者两个都写:
- 只写模型——任何提供该模型的启用渠道都可以响应。
- 只写供应商——由该渠道响应,请求的还是客户端发来的模型名。
- 都写——由该渠道响应,并且请求指定的那个模型。
阶梯就是降级路径
第一行是请求实际去的地方。下面每一行,都是上一行响应不了时降级到的目标:限流、余额耗尽、Key被拒、5xx、超时,或者那个渠道根本没有这个模型。最多八级。
一条这样的规则:
glm-4.5-air@ 智谱deepseek-chat
会把它覆盖的请求发给智谱的小模型;智谱被限流时,同一个请求转发给任意一个提供deepseek-chat的启用渠道。
最后一级之下,Gateway仍然会退回到"一条规则都没有时它本来会做的事",所以一条规则里的渠道即使全被删掉或停用,请求也还是能走通,而不是直接失败。
不管最终是哪个模型响应的,回给客户端的模型名都是它请求的那个。
哪条规则生效
规则按顺序读取:先看排序数字,再看模式是否更具体(精确的模型名胜过claude-*,claude-*胜过*),最后绑定了Agent的规则排在通用规则前面。第一条模式匹配上的规则决定结果,一个请求只会命中一条规则。
路由不等于授权
规则只说请求去哪里,它从不拒绝请求。Agent能用哪些模型是在权限页面设置的,而且整条阶梯在被走之前会先经过该Agent的权限过滤。降级永远不可能落到这个Agent无权使用的模型或渠道上。
看清一个请求会走到哪里
同一个页面上的**这个模型会走到哪里?**会直接给出某个模型名的完整路径,而不发真实请求:按尝试顺序列出每一步、是哪条规则选的、以及此刻哪些渠道正在冷却。第一行以下的部分,正是平时上游没出问题就谁也看不见的那部分。
事后要看真实发生的请求,去LLM记录:实际发往是真正上到线上的模型名(仅当它和请求的名字不同时才显示),命中规则是选中它的那条规则,失败切换掉的每一次尝试也会连同它请求的模型一起列出来。费用按真正计费的那个模型来算。
下一节:4.1 权限。