文档首页/路由组与回退

路由组与回退

路由组把多个公开模型的部署组成一个候选池,回退定义失败后转向哪个模型或组。组随路由模板保存;实际执行仍使用模型目录中的部署和端点能力。

调用组名展开所有成员部署;调用成员名只选择该成员的部署,但继承组策略和组分配。精确 model_routes 规则优先于组策略。组名不替换实际成员的权限、用量和计费身份。

以下片段放进完整模板:

{"routing_groups":[{"group_name":"chat-pool","models":["chat-main","chat-fast"],"routing_strategy":"least-busy"}],"fallbacks":[{"chat-pool":["chat-backup"]}]}

组与分配

traffic-split 组在 routing_strategy_args.allocations 保存成员部署的相对权重。缺省、空数组或未列出的部署均使用权重 1;显式 0 排除部署,不叠加成员模型默认权重。其他策略不接受组分配参数。

约束 规则
组名 1–64 字符;无空白或 *;不能为 default 或公开模型名
成员 非空、确切模型名;不允许嵌套;每模板每模型最多一组
三类回退 通用 / 上下文 / 内容策略分别保存有序目标
回退表省略或 [] 继承模型默认回退,不清空默认链
回退源映射到 [] 禁用该源、该类别回退;其他源和类别继续继承
循环 默认和模板合并后统一判环

路由组仅在完整模板内管理,不提供独立 /routing/groups CRUD。省略 routing_groups 或设为 [] 均表示本模板不使用路由组,不读取全局组;这与空回退表的继承语义不同。

回退执行

类别 触发与顺序
fallbacks 429、5xx 或可重放网络失败先在同一部署完成 retry_policy.max_attempts 次尝试(含首次),再尝试池内其他部署;池耗尽或没有可用部署后进入通用链
context_window_fallbacks 上游错误包络识别为上下文超限且存在目标时,可以直接进入专用链
content_policy_fallbacks 上游错误包络识别为内容策略拒绝且存在目标时,可以直接进入专用链

目标按配置顺序入队,去重并限制最多访问 32 个不同模型/组;进入每个目标后,按该目标的当前策略、权重和端点能力选择部署。模板按源及类别覆盖默认回退图,合并后的三类图统一判环。

组请求存在显式组回退映射时以组为回退源;否则使用实际失败成员的回退,通用池耗尽时采用最后尝试成员。成员名请求使用该成员的回退。映射中某类别为空,不因该次失败自动改用成员的同类链。

disable_fallbacks: true 禁止跨模型回退及跨模型粘性复用;池内尝试仍遵守入口重试规则。已输出流内容、父响应固定归属及结果不明确的异步创建遵守各自重放约束。普通参数错误直接返回;组不能扩大成员权限或预算,本地护栏拦截不触发供应商内容策略回退。

与会话粘性的关系

动态会话偏好优先保留同一供应商及上游部署,以提高 prompt 缓存命中机会。合法偏好排在组策略和权重排序之前;临时失败先在该部署重试,耗尽配置次数后才换部署。新会话或没有合法偏好时,按“模型默认配置 → 当前模板的模型规则与路由组”选路;精确模型规则优先于组策略。

组名请求的粘性范围保留组名,成员名请求的范围独立;缓存目标保留真实成员部署、实际模型池和回退路径。成功切换后保存新目标,下一轮仅当路径及目标仍被当前配置允许时优先复用;撤销链路、禁用回退或使目标失去资格后重新按路由选择。

模型/组、端点及实际供应商变化不改变明确会话的日志组;每次发送仍检查目标权限、预算和凭据。父响应续接固定原部署,不通过普通回退转交其他目标。

会话保持与供应商粘性 · 模型与端点

源码 groups.go · 回退执行

go test ./internal/router -count=1

输入关键词搜索全文,例如:预算、路由、Docker