9Router 组合(Combos)实战指南:构建自定义回退链,让模型永不掉线
【免费下载链接】9routerUnlimited FREE AI coding. Connect Claude Code, Codex, Cursor, Cline, Copilot, Antigravity to FREE Claude/GPT/Gemini via 40+ providers. Auto-fallback, RTK -40% tokens, never hit limits.项目地址: https://gitcode.com/GitHub_Trending/9r/9router
组合(Combos)是 9Router 仪表盘中的自定义回退链:将多个模型按优先级编排成一个逻辑模型,由 9Router 按顺序自动尝试,直到请求成功为止。本文以 gitbook/content/zh-CN/features/combos.md 为主线,结合 combo.js 源码、组合页面/dashboard/combos/page.js) 与 API 路由 的实现细节,完整讲解组合的创建、四种路由策略(Fallback / Round Robin / Fusion / 容量自动切换)、六个实战示例、CLI 工具接入方式与运维最佳实践。读完本文,你将能根据自己的订阅、预算与质量要求,设计出一套自动回退、永不耗尽的模型路由方案。
一、什么是组合?
组合是你在仪表盘中创建的自定义回退链。它不是单一模型,而是定义一组顺序模型,由 9Router 依次尝试。
示例:
组合名: premium-coding 模型: 1. cc/claude-opus-4-5-20251101 (首选) 2. glm/glm-4.7 (#1 配额耗尽时) 3. minimax/MiniMax-M2.1 (#2 配额耗尽时)CLI 中使用:
Model: premium-coding只要在任意接入 9Router 的客户端中把模型名填成组合名(premium-coding),9Router 就会按顺序自动尝试组合内的每个模型,直到成功为止。
从源码实现看,组合名与模型名的区分发生在 combo.js 的 getComboModelsFromData:若请求中的模型字符串包含/(如glm/glm-4.7),则视为普通提供商/模型格式直接放行;不包含/时,才会到组合列表中按name === modelStr精确查找并返回其模型数组。这也是组合名中禁止出现/的底层原因。
二、为什么使用组合?
1. 最大化订阅价值
cc/claude-opus → glm/glm-4.7 → if/kimi-k2-thinking → 先用订阅,低价备用,免费应急 → 充分利用你已付费的订阅2. 最小化成本
glm/glm-4.7 → minimax/MiniMax-M2.1 → if/kimi-k2-thinking → 从最便宜的付费选项开始(每 1M $0.60) → 回退到更便宜的(每 1M $0.20) → 应急免费层 → 总成本: 约 $5-10/月,而 ChatGPT API 需要 $20003. 保障 24/7 可用
cc/claude-opus → cx/gpt-5.2-codex → glm/glm-4.7 → if/kimi-k2-thinking → 末尾总是放免费层 → 永不耗尽配额 → 随时随地编码4. 质量优化
cc/claude-opus-4-5 → cx/gpt-5.2-codex → gc/gemini-3-pro → 优先最好的模型 → 回退到其他高端模型 → 整个回退链保持高质量注:文中的价格与"节省百分比"为原文档基于示例模型的估算口径,实际成本取决于配额重置周期、订阅套餐与实时用量,请在仪表盘的配额与分析页面查看真实数据。
三、组合工作原理:Fallback 回退链的源码级解析
组合的请求路由核心实现在 open-sse/services/combo.js 的 handleComboChat。其工作流程可概括为:
请求(模型名=组合名) → 按策略生成尝试顺序(getRotatedModels / reorderByCapabilities) → 依次调用 handleSingleModel(body, modelStr) ├─ 成功(2xx) → 立即返回,结束回退 ├─ 失败 → 解析错误信息与 retryAfter │ → checkFallbackError 判断是否允许回退 │ → 503/502/504 短暂冷却(≤5000ms)后继续 └─ 全部失败 → 返回 503 + 最早的重试时间几个值得注意的底层细节:
- 成功即短路:只要某个模型返回 2xx,回退循环立即结束(combo.js#L257-L260),不会继续消耗后续模型。
- 并非所有错误都回退:
checkFallbackError(来自 accountFallback.js)会结合 HTTP 状态码与错误文本判断是否属于"应回退"(如配额耗尽、速率限制、凭证缺失等)。若判定为不应回退,则直接返回该错误响应,不再尝试下一个模型。 - 瞬时错误有冷却:对 503/502/504 这类瞬时过载错误,源码会等待
cooldownMs(不超过 5000ms)再进入下一个模型,避免短暂过载的提供商被立即跳过(combo.js#L294-L298)。 - 全部失败的语义:组合内所有模型都不可用时,返回503 Service Unavailable(而非 406),并携带所有模型中最早的
retryAfter时间,便于客户端按建议时间重试。若错误包含no credentials,同样返回 503(combo.js#L313-L330)。
四、如何创建组合
步骤 1:打开仪表盘
http://localhost:20128 → 用密码登录步骤 2:进入组合页面
仪表盘 → 组合 → 新建组合步骤 3:配置组合
组合名:
premium-coding选择模型:
1. cc/claude-opus-4-5-20251101 2. glm/glm-4.7 3. minimax/MiniMax-M2.1拖动排序— 自上而下表示优先级。
组合表单的前端实现在 src/app/(dashboard)/dashboard/combos/page.js/dashboard/combos/page.js),有几个关键约束值得了解:
- 名称格式限制:组合名只能包含字母、数字、
-、_和.,正则校验为/^[a-zA-Z0-9_.\-]+$/。前端与 API 路由 各校验一次;重名会被拒绝(Combo name already exists)。如前文所述,名称中不允许/,这是与"提供商/模型"格式区分的关键。 - 模型列表可拖拽排序:页面基于
@dnd-kit实现DndContext+SortableContext的垂直拖拽排序,同时提供"上移/下移"按钮;每个模型项还可内联编辑(点击后直接修改模型字符串)与删除。 - 去重:
handleAddModel会跳过已在列表中的模型值(page.js#L515-L519/dashboard/combos/page.js#L515-L519))。
步骤 4:保存
点击 "Save Combo" → 组合出现在模型列表中保存时前端通过POST /api/combos(创建)或PUT /api/combos/:id(编辑)写入本地数据库(getCombos/createCombo/getComboByName来自 src/lib/localDb.js)。
步骤 5:在 CLI 中使用
Cursor/Cline/任意工具: Model: premium-coding五、组合的四种策略:不止回退
原文档重点讲解了顺序回退,而从 组合页面/dashboard/combos/page.js#L150-L158) 的实现看,每个组合还可以在"Fallback / Round Robin / Fusion"三种策略间切换,并叠加"容量自动切换":
| 策略 | 行为 | 适用场景 |
|---|---|---|
| Fallback | 按顺序依次尝试,失败才轮到下一个 | 默认策略,绝大多数场景 |
| Round Robin | 在组合模型间按请求轮转,分散负载 | 均摊多个订阅/免费账户的配额 |
| Fusion | 并行询问所有面板模型,由 Judge 模型综合出一份答案 | 追求最高回答质量 |
| 容量自动切换(Capacity auto-switch) | 图片/PDF/音频等请求优先发给支持该能力的模型 | 多模态输入 |
Fallback(顺序回退)
即本文第三节讲解的handleComboChat主流程。策略配置为空或fallback时即为默认行为。
Round Robin(轮转)
getRotatedModels(combo.js#L157-L186)实现按请求轮转:每次请求把当前索引对应的模型移到列表首位,stickyLimit控制每个模型连续服务多少个请求后再切到下一个(默认 1)。轮转状态按组合名独立记录在内存 Map 中,可通过resetComboRotation在组合配置变更时重置。测试用例 tests/unit/combo-routing.test.js 验证了:
- 默认(sticky=1)时两个模型严格交替:
a → b → a → b; - sticky=2 时每个模型连续服务 2 次:
a → a → b → b → a → a; - fallback 策略不轮转,始终保持原始顺序。
Fusion(面板 + 裁判)
handleFusionChat(combo.js#L496-L571)是最复杂的策略,流程为:
- 并行 fan-out:把请求同时发给组合内所有面板模型,强制非流式、剥离工具参数(面板只需完整文本);
- quorum-grace 收集:
collectPanel在达到minPanel(默认 2)个成功响应后开启 8 秒宽限期,等待其余慢速模型;整体受 90 秒硬超时保护,避免单个挂死模型拖垮请求; - 退化降级:0 个面板响应返回 503;只有 1 个成功则直接返回该结果(无融合);
- Judge 综合:把各面板回答匿名化为
[Source N]拼入裁判提示词,由 Judge 模型按共识、矛盾、盲点等维度分析后输出一份最终答案。Judge 默认取组合第一个模型,也可在卡片上单独指定;Judge 调用保留客户端的流式与工具参数。
对应的测试 tests/unit/combo-fusion.test.js 验证了"3 个面板调用 + 1 次 Judge 调用共 4 次请求""面板调用 stream=false 且无 tools"等行为。
⚠️成本提醒:Fusion 每次请求都会计费所有面板模型 + Judge(N+1 次调用),质量最高但成本也最高,适合对质量敏感、对延迟不敏感的场景。
容量自动切换(多模态优先)
当请求携带图片、PDF、音频、视频等输入时,detectRequiredCapabilities(combo.js#L105-L133)会在当前用户轮次(而非历史消息)中扫描image_url/file/inlineData等模态标记,识别出vision、pdf等必需能力;随后reorderByCapabilities(combo.js#L63-L82)对模型稳定重排:满足全部硬能力(vision/pdf/audioInput/videoInput)与软能力(如 search)的模型排到最前,只满足硬能力的次之,其余靠后——但绝不丢弃任何模型,回退完整性保持不变。测试 tests/unit/combo-autoswitch.test.js 验证了图片→vision、PDF→pdf、多模态模型前置等行为。
下图为组合列表卡片中 Fusion 策略的配置界面(含 Judge 选择与策略下拉):
六、示例组合
示例 1:Premium Coding(订阅 → 低价 → 免费)
目标:最大化订阅价值,最小化额外成本。
仪表盘 → 组合 → 新建 名称: premium-coding 模型: 1. cc/claude-opus-4-5-20251101 2. glm/glm-4.7 3. minimax/MiniMax-M2.1用法:
Cursor IDE: Model: premium-coding行为:
早上(全新配额): 请求 → cc/claude-opus-4-5 ✅ 下午(Claude 配额用完): 请求 → glm/glm-4.7 ✅ (自动切换) 晚上(GLM 配额用完): 请求 → minimax/MiniMax-M2.1 ✅ (自动切换)月成本(100M tokens,按原文档估算):
80M 通过 Claude Code: $0(订阅) 15M 通过 GLM: $9 5M 通过 MiniMax: $1 合计: $10 + 你的订阅示例 2:Budget Combo(低价 → 免费)
目标:最小化成本,免费层作为备用。
仪表盘 → 组合 → 新建 名称: budget-combo 模型: 1. glm/glm-4.7 2. minimax/MiniMax-M2.1 3. if/kimi-k2-thinking用法:
Cline: Provider: OpenAI Compatible Base URL: http://localhost:20128/v1 Model: budget-combo行为:
请求 → glm/glm-4.7 ✅ 每日配额可用 → 使用 GLM(每 1M $0.60) ❌ 配额耗尽 → 尝试 MiniMax(每 1M $0.20) ❌ MiniMax 配额用完 → 使用 iFlow(免费)月成本(100M tokens,按原文档估算):
70M 通过 GLM: $42 20M 通过 MiniMax: $4 10M 通过 iFlow: $0 合计: $46,而 ChatGPT API 需 $2000示例 3:Free Combo(零成本)
目标:100% 免费,永不付费。
仪表盘 → 组合 → 新建 名称: free-combo 模型: 1. if/kimi-k2-thinking 2. qw/qwen3-coder-plus 3. kr/claude-sonnet-4.5用法:
Claude Desktop: Model: free-combo行为:
请求 → if/kimi-k2-thinking ✅ 可用 → 使用 iFlow ❌ 错误 → 尝试 Qwen ❌ 错误 → 尝试 Kiro月成本:
100M tokens 通过免费提供商: $0 合计: 永远 $0适用场景:个人项目、学习、试验。
示例 4:Quality First(仅高端模型)
目标:最高质量,无低价回退。
仪表盘 → 组合 → 新建 名称: quality-first 模型: 1. cc/claude-opus-4-5-20251101 2. cx/gpt-5.2-codex 3. gc/gemini-3-pro-preview用法:
Codex CLI: export OPENAI_BASE_URL="http://localhost:20128" Model: quality-first行为:
请求 → cc/claude-opus-4-5 ❌ 配额用完 → cx/gpt-5.2-codex ❌ 配额用完 → gc/gemini-3-pro-preview ❌ 全部用完 → 返回错误(无低价回退)适用场景:关键生产代码、复杂重构。
示例 5:Multi-Subscription(用足所有订阅)
目标:在产生额外费用前用足所有订阅。
仪表盘 → 组合 → 新建 名称: multi-sub 模型: 1. gc/gemini-3-flash-preview (每月免费 180K) 2. cc/claude-opus-4-5-20251101 (Pro 订阅) 3. cx/gpt-5.2-codex (Plus 订阅) 4. gh/gpt-5 (Copilot 订阅) 5. glm/glm-4.7 (低价备用) 6. if/kimi-k2-thinking (免费应急)月成本(200M tokens,按原文档估算):
50M 通过 Gemini CLI: $0(免费层) 80M 通过 Claude Code: $0(订阅) 40M 通过 Codex: $0(订阅) 20M 通过 Copilot: $0(订阅) 8M 通过 GLM: $4.80 2M 通过 iFlow: $0 合计: $4.80 + 你已有的订阅结果:190M tokens 来自订阅,只有 $4.80 额外费用。
示例 6:配额重置优化
目标:根据重置时间分配使用。
仪表盘 → 组合 → 新建 名称: reset-optimized 模型: 1. cc/claude-opus-4-5 (5h 重置, 早上用) 2. gc/gemini-3-flash (每日 1K, 下午用) 3. glm/glm-4.7 (每日 10AM 重置, 晚上用) 4. minimax/MiniMax-M2.1 (5h 滚动, 夜里用) 5. if/kimi-k2-thinking (无限, 应急)日常安排:
08:00 - 13:00: Claude Code(全新 5h 配额) 13:00 - 18:00: Gemini CLI(每日 1K 配额) 18:00 - 22:00: GLM(次日 10AM 重置) 22:00 - 08:00: MiniMax(5h 滚动)或 iFlow结果:24/7 编码,成本极低。
七、在 CLI 工具中使用组合
组合本质上是 9Router 模型列表里的一个"逻辑模型",因此任何接入 9Router 的客户端,把Model字段填成组合名即可。
Cursor IDE
Settings → Models → Advanced: OpenAI API Base URL: http://localhost:20128/v1 OpenAI API Key: [从仪表盘获取] Model: premium-codingClaude Desktop
编辑~/.claude/config.json:
{ "anthropic_api_base": "http://localhost:20128/v1", "anthropic_api_key": "your-9router-api-key", "model": "budget-combo" }Codex CLI
export OPENAI_BASE_URL="http://localhost:20128" export OPENAI_API_KEY="your-9router-api-key" codex --model quality-first "your prompt"Cline / Continue / RooCode
Provider: OpenAI Compatible Base URL: http://localhost:20128/v1 API Key: [从仪表盘获取] Model: free-comboAPI 请求
组合同样可以直接通过 OpenAI 兼容端点调用:
curl http://localhost:20128/v1/chat/completions \ -H "Authorization: Bearer your-api-key" \ -H "Content-Type: application/json" \ -d '{ "model": "premium-coding", "messages": [ {"role": "user", "content": "Write a function to..."} ], "stream": true }'八、最佳实践
1. 总是包含免费层
✅ 好: cc/claude-opus → glm/glm-4.7 → if/kimi-k2-thinking ❌ 不好: cc/claude-opus → glm/glm-4.7 (无免费回退,可能耗尽配额)原因:确保 24/7 可用,绝不会被配额卡住。
2. 按成本排序(便宜 → 贵)
✅ 好: glm/glm-4.7 → minimax/MiniMax-M2.1 → cc/claude-opus ❌ 不好: cc/claude-opus → glm/glm-4.7 (在简单任务上浪费订阅配额)例外:如果想充分利用订阅价值,把订阅放在最前面。
3. 匹配质量要求
生产代码: cc/claude-opus → cx/gpt-5.2-codex → glm/glm-4.7 简单任务: glm/glm-4.7 → if/kimi-k2-thinking 试验: if/kimi-k2-thinking → qw/qwen3-coder-plus4. 考虑配额重置时间
早上组合(配额刚刷新): cc/claude-opus → cx/gpt-5.2-codex 晚上组合(配额大概率耗尽): glm/glm-4.7 → minimax/MiniMax-M2.1 → if/kimi-k2-thinking5. 为不同场景创建多个组合
premium-coding: 复杂任务 budget-combo: 简单任务 free-combo: 试验 quality-first: 生产代码根据任务需求切换组合。同一组合可随时编辑、重排,无需删除重建。
6. 监控组合性能
仪表盘 → 分析 → 组合使用: premium-coding: 80% 通过 cc/claude-opus(良好,使用订阅) 15% 通过 glm/glm-4.7(可接受备用) 5% 通过 minimax(罕见回退)优化:回退使用过多时,提高主配额或重新排序模型。
九、高级配置
为组合设置预算上限
仪表盘 → 组合 → 编辑 → 预算: 每日上限: $5 每月上限: $50达到上限时,9Router 跳过付费模型,仅使用免费层。
启用/禁用组合中的模型
仪表盘 → 组合 → 编辑 → 模型: ✅ cc/claude-opus-4-5(启用) ❌ glm/glm-4.7(暂时禁用) ✅ if/kimi-k2-thinking(启用)用途:暂时禁用昂贵模型而不删除组合。
克隆已有组合
仪表盘 → 组合 → 克隆 "premium-coding" → 生成带 "-copy" 后缀的副本 → 修改后另存为新组合用途:为不同场景创建变体。注意组合名不允许重复,克隆后请先改名再保存。
每组合级策略调优
组合的策略(fallback / round-robin / fusion)与 Fusion 的 Judge 模型配置存放在设置中的comboStrategies映射里(见 page.js#L111-L134/dashboard/combos/page.js#L111-L134)):当策略恢复为默认fallback时,对应配置项会被自动清理,保持设置干净。
十、故障排除
问题:组合未出现在模型列表中
方案:
- 刷新仪表盘
- 检查组合已保存(绿色对勾)
- 重启 CLI 工具以刷新模型列表
问题:组合总是用最后一个模型(免费层)
方案:
- 检查主模型的配额(仪表盘 → 配额)
- 确认 API keys 有效(仪表盘 → 提供商)
- 检查是否超出预算上限
问题:组合成本超出预期
方案:
- 仪表盘 → 分析 → 查看组合使用情况
- 检查主模型是否配额耗尽
- 重新排序模型(更便宜的放前面)
- 设置预算上限
问题:组合报 503 且带重试时间
方案:这是"组合内所有模型当前都不可用"的标准响应(combo.js#L316-L324)。请等待响应头中的重试时间后重试,同时检查组合内是否缺少免费层、是否触达预算上限,以及各提供商的凭证状态。
十一、相关阅读
- 智能路由与自动回退 — 9Router 三层回退系统(订阅 → 低价 → 免费)如何工作
- 配额跟踪 — 监控使用与成本
如需深入组合的实现细节,可直接阅读 open-sse/services/combo.js(回退/轮转/融合/容量切换全部逻辑)、组合前端页面/dashboard/combos/page.js) 与 API 路由 route.js,以及对应的测试 combo-routing.test.js、combo-fusion.test.js 与 combo-autoswitch.test.js。
【免费下载链接】9routerUnlimited FREE AI coding. Connect Claude Code, Codex, Cursor, Cline, Copilot, Antigravity to FREE Claude/GPT/Gemini via 40+ providers. Auto-fallback, RTK -40% tokens, never hit limits.项目地址: https://gitcode.com/GitHub_Trending/9r/9router
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考