9Router 保姆级上手:DeepSeek、GPT、Gemini 一次接入,按成本自动切换
9Router 保姆级上手DeepSeek、GPT、Gemini 一次接入按成本自动切换【免费下载链接】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如果你同时订阅了 Claude Code、Codex 或 Gemini CLI又时不时需要调用 OpenAI 和 DeepSeek 的 API最头疼的往往不是模型本身而是三件事每个工具都要单独配置一套 Endpoint 和 Key、某家服务限流时工作流当场中断、以及月底发现订阅额度没用完但按量账单已经超支。9Router 的思路是把这些全部收敛到一个本地网关你的 CLI 工具只面对http://localhost:20128/v1一个地址背后挂多少个 Provider、怎么排序、谁先谁后全部由路由器在请求级自动决策。本文按装好 → 接齐三家 → 验证真的会切换三步走结合仓库源码讲清每一步的原理。第一步装好网关拿到第一把 API Key9Router 的启动方式非常简单一条命令即可见 cli/cli.js 中的 launcher 逻辑npm install -g 9router 9routerCLI 会启动内置的 standalone 服务端默认监听20128端口并在终端里弹出 Web UI / Terminal UI / 托盘三种入口。Dashboard 地址为http://localhost:20128/dashboardOpenAI 兼容 API 地址为http://localhost:20128/v1README 的 Quick Start 一节写得很清楚。启动后第一件事是创建本地 API Key。这个 Key 不是任何厂商的 Key而是你本地网关自己签发的通行证——之后 Claude Code、Codex、Cursor 等工具配置的 API Key 填的就是它。在终端 UI 里进入API Keys菜单即可创建创建时只会明文展示一次并提示复制cli/src/cli/menus/apiKeys.js之后只能看到掩码形式。也可以在 Web UI 的对应页面操作两者操作的是同一套数据。拿到本地 Key 后你的 CLI 工具配置就是固定的三行Endpoint: http://localhost:20128/v1 API Key: [dashboard 复制的本地 Key] Model: kr/claude-sonnet-4.5 以 alias/model 形式指定其中kr是 Kiro AI 的别名前缀。9Router 的所有模型都走别名/模型名这种两段式 ID模型别名在 cli/src/cli/menus/providers.js 中可见一斑ccClaude Code、cxCodex、gcGemini CLI、krKiro、ocOpenCode Free等。别名机制是后面一个地址接多家的关键——对客户端而言模型 ID 变了但 Endpoint 永远不变。第二步三分钟接齐 DeepSeek / GPT / GeminiDashboard 打开后的主界面即 Provider 管理整体结构如下图片来自 images/9router.png9Router 把接入方式分成三类覆盖三种典型场景1. OAuth 订阅型适合已有订阅账号Claude Code、OpenAI Codex、Gemini CLI、GitHub Copilot、Antigravity、iFlow 等走 OAuth。以 Codex 为例在 Providers 菜单里选择对应厂商浏览器完成授权后把回调 URL 粘回终端即可仓库里对应的是 cli/src/cli/menus/providers.js 的handleAddOAuthConnection流程请求 auth URL → 用户粘贴 callback → 用 code 换 token。GitHub、Qwen、Kiro、GLM 则走 Device Code 流终端显示一个验证地址浏览器输入后自动轮询拿 token无需复制粘贴。2. API Key 型适合已有官方 KeyOpenAI、Anthropic、Gemini、OpenRouter、GLM、MiniMax、Kimi 都支持直接填 API Key。这一步就覆盖了你选题里的 GPT 与 GeminiGPT 填platform.openai.com的 Key前缀为openaiGemini 填 Google AI Studio 的 Key前缀为gemini。各自的 registry 定义见 open-sse/providers/registry/openai.js 与 open-sse/providers/registry/gemini.js里面声明了 baseUrl、模型列表与能力元数据。3. 自定义 ProviderDeepSeek 等一切 OpenAI 兼容服务DeepSeek 不在内置的 API Key 列表里但通过自定义节点接入只需三步类型选openai-compatible填https://api.deepseek.com/v1作为 Base URL前缀取deepseek然后把你的 DeepSeek API Key 挂到该节点下。之后deepseek/deepseek-chat、deepseek/deepseek-reasoner就能直接用了DeepSeek 的模型定义见 open-sse/providers/registry/deepseek.js。自定义节点支持chat与responses两种 API 形态足以覆盖绝大多数第三方兼容网关。4. 零成本路线免登录的免费 Provider如果暂时没有付费 Key仓库里还有一条白嫖路线Kiro AI每月约 50 credits含 Claude 系模型与 OpenCode FreenoAuth: true完全免鉴权见 open-sse/providers/registry/opencode.js以及 Vertex 的免费额度。README 的流程图给出了完整的成本阶梯订阅Subscription→ 便宜按量Cheap→ 免费Free这正是按成本自动切换的顶层设计。接齐三家之后把它们绑进同一个逻辑模型即可。9Router 的 Combo 机制允许你把多个模型排成一个列表客户端只需请求一个 combo 名例如把openai/gpt-5.2、deepseek/deepseek-chat、gemini/gemini-3-flash-preview按成本从高到低排进一个名为mix的 combo。预设逻辑在 src/lib/comboPresets.js 中combo 的高级形态多模型并行融合后由 judge 模型汇总界面见下图第三步验证自动路由真的按成本切了吗这是最值得较真的部分。按成本切换在源码层面并不是一个实时比价的引擎而是一套有序尝试 错误驱动降级的机制——把模型按成本排好序放进 combo顺序即优先级触发切换的条件是上游返回的错误特征。两者叠加效果上等价于便宜优先、贵的不浪费、断了自动降级。核心实现位于 open-sse/services/combo.js 的handleComboChatfor (let i 0; i rotatedModels.length; i) { const modelStr rotatedModels[i]; log.info(COMBO, Trying model ${i 1}/${rotatedModels.length}: ${modelStr}); const result await handleSingleModel(body, modelStr); if (result.ok) { /* 成功直接返回 */ } // 失败时调用 checkFallbackError 判断是否值得切换 const { shouldFallback, cooldownMs } checkFallbackError(result.status, errorText); if (!shouldFallback) return result; // 请求本身的 4xx切了也没用原样返回 // 命中限流/配额/容量类错误 → 冷却后试下一个模型 }判断要不要切的逻辑在 open-sse/services/accountFallback.js 与 open-sse/config/errorConfig.js 中规则表非常直白文本命中错误消息包含rate limit、too many requests、quota exceeded、capacity、overloaded时判定为可切换且429走指数退避——第一次冷却 2 秒之后 4 秒、8 秒……封顶 5 分钟状态码命中401/402/403/404/429触发切换但请求本身不合法的400等 4xx不会触发切换切换只会掩盖真实报错瞬时故障502/503/504会先等一个短暂的 cooldown 再降级避免服务短暂过载就被误杀。全部模型都失败时网关返回503并附带最早的可重试时间retryAfter客户端可以据此合理安排重试而不是反复撞墙。再往深一层9Router 的自动还体现在两个更聪明的维度能力感知的自动切换。handleComboChat会在请求进来时调用detectRequiredCapabilities扫描当前用户回合的输入图片触发vision、PDF 触发pdf、音视频触发audioInput/videoInput。随后reorderByCapabilities会把能满足这些硬性能力的模型排到最前——你排的 combo 里若混入了不支持视觉的模型带图请求会自动命中支持视觉的那一个而不是盲目按列表顺序试错。全局容量池兜底。open-sse/services/capacityAdapter.js 维护了一组按输入模态分类的全局兜底模型池。当 combo 里没有任何模型能满足请求的模态需求时适配器会把池子里的模型插到候选列表最前面如oc/mimo-v2.6-flash-free并顺手用stripHistoryForContext按该模型的上下文窗口裁剪历史——保证切换过去时请求不会因为超长上下文被拒。那用户怎么亲眼验证切换发生了三个途径日志网关在每次请求时都会打印COMBO Trying model 1/3: xxx、Model xxx failed, trying next、auto-switch for [vision] → yyy这类行把某个 combo 的首选模型 Key 故意填错再看日志就会看到它依次降级到第二、第三个模型直到成功或全部失败Dashboard 用量页每个连接的成功率、最近错误、冷却状态rateLimitedUntil都有展示接口层面的实现可参考 src/lib/usageDb.js 与请求详情记录请求详情查看单次请求实际命中的上游模型与耗时确认便宜模型优先、贵模型兜底的排序真的按你配置的顺序执行。写在最后回到开头的痛点9Router 的价值不在于多一个 API 网关而在于把成本排序、配额追踪、错误分类、指数退避、能力路由这些本该散落在各家 SDK 里的逻辑统一收敛到一层薄薄的本地路由器里。接入 DeepSeek、GPT、Gemini 只是五分钟的事真正值得花时间研究的是 combo 的排列顺序——模型列表的顺序就是你的成本策略checkFallbackError的规则表就是你的容灾策略。把这两张表调对你的编码工作流才能做到订阅额度不浪费、按量账单不失控、限流来了也不断线。【免费下载链接】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),仅供参考