☰
9Router 组合(Combos)实战指南:构建自定义回退链,让模型永不掉线
2026/9/26 23:25:52 网站建设 项目流程

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 需要 $2000

3. 保障 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)是最复杂的策略,流程为:

  1. 并行 fan-out:把请求同时发给组合内所有面板模型,强制非流式、剥离工具参数(面板只需完整文本);
  2. quorum-grace 收集:collectPanel在达到minPanel(默认 2)个成功响应后开启 8 秒宽限期,等待其余慢速模型;整体受 90 秒硬超时保护,避免单个挂死模型拖垮请求;
  3. 退化降级:0 个面板响应返回 503;只有 1 个成功则直接返回该结果(无融合);
  4. 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-coding

Claude 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-combo

API 请求

组合同样可以直接通过 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-plus

4. 考虑配额重置时间

早上组合(配额刚刷新): cc/claude-opus → cx/gpt-5.2-codex 晚上组合(配额大概率耗尽): glm/glm-4.7 → minimax/MiniMax-M2.1 → if/kimi-k2-thinking

5. 为不同场景创建多个组合

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时,对应配置项会被自动清理,保持设置干净。


十、故障排除

问题:组合未出现在模型列表中

方案:

  1. 刷新仪表盘
  2. 检查组合已保存(绿色对勾)
  3. 重启 CLI 工具以刷新模型列表

问题:组合总是用最后一个模型(免费层)

方案:

  1. 检查主模型的配额(仪表盘 → 配额)
  2. 确认 API keys 有效(仪表盘 → 提供商)
  3. 检查是否超出预算上限

问题:组合成本超出预期

方案:

  1. 仪表盘 → 分析 → 查看组合使用情况
  2. 检查主模型是否配额耗尽
  3. 重新排序模型(更便宜的放前面)
  4. 设置预算上限

问题:组合报 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询