9Router 排坑实录:模型未找到、认证失败、连接超时一个都别漏
9Router 排坑实录模型未找到、认证失败、连接超时一个都别漏【免费下载链接】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、Cursor、Cline 这些 CLI 工具统一接到 9Router本质上就是改两样东西一个BASE_URL、一个 API Key然后祈祷一次通过。但现实往往是——模型名照着文档抄了还是 404Key 明明复制对了却报 401请求偶尔能发出去、偶尔直接卡死超时。这类问题在 GitHub Issues 和社区教程里反复出现几乎成了每个 9Router 新用户的第一道坎。这篇文章不再停留在重新连一下就好的层面而是直接钻进仓库源码把模型未找到、认证失败、连接超时这三类高频故障的根因逐一拆开并给出可复现的排查路径。模型未找到别名与模型列表对不上的真相Model not found404是出现频率最高的报错。在 9Router 中这个错误码来自统一错误映射表 errorConfig.js上游返回 404 时客户端收到的是{ type: invalid_request_error, code: model_not_found }。也就是说只要你请求的模型 ID 不在路由器的可解析范围内就会得到这个结果。根因一模型 ID 的别名前缀没对上9Router 的所有模型 ID 都带别名前缀格式是别名/模型名例如cc/claude-opus-4-6、kr/claude-sonnet-4.5、glm/glm-5。前缀不是随便写的它来自 providers.js 中定义的PROVIDER_ID_TO_ALIAS映射并在 models 路由 里通过ALIAS_TO_PROVIDER_ID反查、按outputAlias生成对外模型 ID。这就带来第一个坑同一个模型在文档、Dashboard、CLI 工具三处的写法可能不同。源码里有一段专门的前缀剥离逻辑见 models/route.js 第 496-509 行从/v1/models拉回的模型 ID 如果已经带了outputAlias/、staticAlias/或providerId/前缀会被逐一尝试剥掉再合并去重最后统一重新拼成outputAlias/模型名。如果你在 CLI 里配的模型名是claude-sonnet-4.5漏了kr/或者写成了kiro/claude-sonnet-4.5真实前缀是kr/路由器就找不到这条记录直接 404。判断方法很简单请求GET http://localhost:20128/v1/models把响应里真实存在的 ID 原样复制进配置不要凭记忆手敲。根因二模型列表是动态拉取的文档只是基线很多用户对着 README 里的模型清单配置却发现kr/deepseek-3.2这种 ID 在GET /v1/models里根本不存在。这是因为 9Router 的模型列表是动态构建的有活跃连接时buildModelsList 会优先走LIVE_MODEL_RESOLVERSKiro、Qoder、Kimchi、GitHub Copilot、ClinePass、Grok CLI、Cursor、Zed 都在其中用你的账号 Token 实时拉取上游目录只有数据库不可用时才回退到PROVIDER_MODELS静态表。resolveKiroModels这类解析器一旦失败Token 过期、接口变更代码会静默降级到静态列表——你看到的是可用列表实际请求时却可能因为模型 ID 与上游不一致而 404。这也是为什么社区教程里反复强调先跑一次 health check 和 model list 再下结论/v1/models的实时输出才是唯一可信的模型清单README 里的表格只代表基线能力。根因三Combo 座位写错或嵌套循环9Router 的 Combocc/claude-opus-4-6 → glm/glm-5 → kr/claude-sonnet-4.5会把整条链作为一个模型 ID 暴露。源码中 comboSeatLimits 对无斜杠的座位名会当作嵌套 Combo 递归解析且带了循环守卫visiting集合。如果你在 Combo 里把某个座位名写成了不存在的别名聚合能力计算aggregateComboCapabilities虽然不会崩但发布出去的 ID 和实际可路由的座位对不上同样会 404。排查清单GET /v1/models核对真实 ID禁止凭文档手写确认别名前缀cc/、cx/、gh/、cu/、glm/、kr/、oc/等大小写敏感Combo 座位逐个验证存在性避免嵌套死循环若用了自定义模型检查providerAlias是否正确——aliasRepo.js中自定义模型的 key 是providerAlias|id|type前缀不一致同样查不到。认证失败Key 配置的五个易错点401authentication_error的语义是这个 Key 不被接受。但 9Router 的认证链路分两层外层是9Router 自己的 Key内层是上游提供商的 Key/Token。两层混在一起是绝大多数认证排查走弯路的原因。易错点 1把sk_9router当成了真实 Key这是最隐蔽的坑。UI 在未配置云 Key 时默认展示占位符sk_9router见 DefaultToolCard.js/dashboard/cli-tools/components/DefaultToolCard.js) 第 23 行。但源码注释写得很清楚这个占位符从来不是真实 Key。resolveApiKey.js 专门做了修正——过去 CLI 配置路由会把这个占位符写进Authorization头导致所有开启requireApiKey的部署一律 401对应 issue #4399现在解析逻辑明确占位符永不写入。所以Dashboard 里显示的sk_9router只是示例真正的 Key 要在 Endpoint 页面的 API Keys 卡片里创建或直接复用 Dashboard 登录凭证。易错点 2requireApiKey开启后Key 校验是可选即 4019Router 默认REQUIRE_API_KEYfalse/v1/*路由不做 Bearer 校验但一旦你在 Endpoint 设置里打开 Require API key生产环境强烈建议校验就变成硬性要求。v1beta/models 路由 展示了统一模式settings.requireApiKey为真时缺失 Key 直接回 401 Missing API key无效 Key 回 401 Invalid API key。注意Dashboard 登录密码和 API Key 是两套体系。CLI 工具用的是 API KeyDashboard 用的是INITIAL_PASSWORD默认123456。拿登录密码当 API Key 填必然 401。易错点 3上游 Key 过期 vs 外层 Key 错误要分清楚外层 Key 正确的情况下401 往往来自上游。错误映射表里 errorConfig.js 对 401 统一归类为invalid_api_key但实际来源可能是Kiro/Perplexity 等cookie/Token 型提供商凭证过期后executor 层会明确提示re-paste your SSO cookie如 grok-web.js、perplexity-web.jsQoder 无用户 ID 时无法签名qoder.js 会主动回 401 以便 Dashboard 提示重新连接OAuth 型提供商 Token 过期9Router 有自动刷新机制tokenRefresh刷新失败时表现为间歇性 401。判断技巧看错误消息文本。外层 Key 问题消息是 Invalid API key provided / Missing API key上游问题往往带着提供商名Grok auth failed、Perplexity auth failed或提示重新连接。易错点 4Bearer 头与 x-api-key 头混用9Router 兼容 OpenAI 和 Anthropic 两类客户端。OpenAI 系走Authorization: Bearer keyAnthropic 系Claude Code走x-api-keyanthropic-version头——这在 models/route.js 的fetchCompatibleModelIds里体现得很清楚Anthropic 兼容提供商同时带x-api-key和Authorization并且自动把/messages路径改写为/models再探测。如果客户端是 Claude Code 但你在配置里手动填了Authorization: Bearer或者反过来上游探测就可能失败。正确姿势是让 CLI 工具使用各自的官方配置方式Claude Code 用ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKEN让 9Router 自己处理头格式。易错点 5多实例互联时的递归环9Router 支持实例互相连接A 实例把 B 实例当上游。源码里专门定义了内部头x-9r-internal-models-fetchmodels/route.js 第 168 行用于识别跨实例的/models抓取并打断递归环。如果两台实例互指且没有这个保护模型探测会无限循环。排查时如果发现fetchCompatibleModelIds反复触发且响应缓慢先检查是否存在循环连接。排查清单在 Dashboard 创建真实 API Key替换sk_9router占位符确认requireApiKey状态与你的客户端行为一致区分错误消息来源外层 vs 上游上游过期去 Dashboard 重新连接OpenAI 系用BearerClaude Code 用官方环境变量检查多实例互联是否成环。连接超时与网络层的排查路径超时问题在 9Router 里分三个层面客户端到 9Router、9Router 到上游、上游自身的可用性。三者症状相似卡住、超时、502/504但排查路径完全不同。超时可能在 9Router 内部上游探测有 5 秒硬超时models/route.js 的fetchCompatibleModelIds给上游/models探测挂了AbortController 5 秒超时失败静默返回空数组。也就是说如果上游慢GET /v1/models会成功但缺模型而不是报错。你看到的现象是模型列表忽多忽少本质是上游探测超时后降级到了静态表。代理配置是超时的头号来源9Router 的出站请求统一走 proxyFetch.js代理解析优先级明确HTTPS_PROXY ALL_PROXYhttps 目标、HTTP_PROXY ALL_PROXYhttp 目标并支持大小写变体。以下几个坑是社区反馈里最集中的NO_PROXY写错导致该直连的被代理shouldBypassByNoProxy的匹配规则是hostname pattern || hostname.endsWith(.pattern)且支持*通配。如果你把NO_PROXY写成localhost而目标是127.0.0.1匹配不上请求就会被错误地送进代理代理 URL 忘记协议normalizeProxyUrl会宽容地把127.0.0.1:7890自动补成http://127.0.0.1:7890但如果你填的地址本身不可达表现就是持续超时企业 MITM 证书导致 TLS 握手失败fetchWithTlsFallback在非STRICT_SSL模式下遇到证书错误会自动用rejectUnauthorized: false重试——如果你把STRICT_SSL设成了true这个兜底被关闭自签名证书场景直接握手失败。端口与监听地址问题9Router 默认端口是20128。README 的 Troubleshooting 明确提示Dashboard 打开在错误端口时需要同时设置PORT20128和NEXT_PUBLIC_BASE_URLhttp://localhost:20128。如果NEXT_PUBLIC_BASE_URL与PORT不一致CLI 客户端拿到的回调地址就是错的表现同样接近连不上。另外localhost与127.0.0.1在某些环境IPv6 优先、防火墙策略下行为不同。CLI 配置端点时建议统一用http://127.0.0.1:20128避免 DNS/回环解析差异。把连接超时当作诊断信号而不是终点在 9Router 的错误分类里errorConfig.js502/504 都被标记为server_error类并配有upstream provider error的默认消息。这意味着当 CLI 报超时/网关错误时问题大概率不在 9Router 本体而在上游链路。此时应逐层验证curl http://127.0.0.1:20128/v1/models确认 9Router 本身活着检查上游提供商状态与配额Dashboard 的 Quota 追踪器确认HTTP_PROXY/HTTPS_PROXY/NO_PROXY环境变量是否符合预期开启ENABLE_REQUEST_LOGStrue在logs/目录里看请求实际发出去了没有、上游响应了什么确认requireApiKey等安全设置没有挡住 CLI 的请求401 与超时在客户端表现可能混淆。一张图看懂 9Router 的请求链路9Router 的完整架构可以从 README 的架构图直观理解CLI 工具请求打到http://localhost:20128/v19Router 完成 RTK 压缩、格式翻译OpenAI ↔ Claude、配额追踪后按订阅 → 便宜 → 免费三级回退路由到上游。这张图解释了为什么同一个请求在不同时刻可能命中完全不同的上游——模型未找到、认证失败、超时都可能在回退切换的瞬间出现排坑的核心心法就是时刻记住这条链路的每一跳都有独立的身份与网络模型 ID 要匹配 9Router 的别名空间Key 要区分外层/上游两层超时要先定位是哪个环节掉链子。把这三件事拆开绝大多数 404、401、超时问题都能在五分钟内定位到根因。结语模型未找到、认证失败、连接超时表面上是三类孤立的报错实际上共享同一个底层逻辑9Router 是一个翻译 路由代理不是简单的端口转发。它的模型命名空间、双层认证、动态模型探测、代理链路都意味着你不能用直连 OpenAI的思维去排查。记住三个铁律以/v1/models的真实输出为准、以错误消息的文本区分认证层级、以请求日志定位超时环节——这三条能覆盖社区反馈中绝大多数的翻车场景。剩下的就是让自动回退和 RTK 帮你把编码节奏拉满。【免费下载链接】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),仅供参考

相关新闻

家宽IP + 零泄露配置:Codex开发环境的防封手册

家宽IP + 零泄露配置:Codex开发环境的防封手册

使用住宅IP提升Codex稳定性,核心在于让网络环境看起来像一个真实的普通家庭用户。这不仅仅是挂一个代理那么简单,而是一套组合策略。以下是一份基于实战经验的稳定指南。 核心原则:稳定 > 一切 在追求“高级”之前,先确保“稳定…

2026/10/10 11:56:27 阅读更多 →
Matlab连续小波变换实现降雨序列多尺度周期分析

Matlab连续小波变换实现降雨序列多尺度周期分析

降雨数据这东西,看起来就是一串数字,但里面藏着的规律,远比表面上多得多。我第一次拿到60年逐月降雨记录时,最想知道的问题只有一个:这些年的旱涝变化到底有没有周期性?哪个年代干旱主导,哪个时…

2026/10/10 11:56:27 阅读更多 →
数据结构(续)

数据结构(续)

第三章,链表和list一,链表的概念1.列表的定义2.列表的定义二,链表的模拟实现1.单链表的模拟实现动态申请链表节点和链表构建动态申请节点Node节点将动态申请一个节点的这个动作封装成一个函数打印链表的所有元素printlist:打印链表三&#xf…

2026/10/10 11:56:27 阅读更多 →

最新新闻

免杀与检测的对抗:从静态特征到行为分析的检测链路拆解

免杀与检测的对抗:从静态特征到行为分析的检测链路拆解

“免杀”这两个字在安全圈子里属于典型的“人人都聊、没几个聊透”的话题。我这两年的工作重心是跟恶意样本和检测系统打交道,从最开始只会拿杀毒软件扫一扫,到后来天天对着 EDR 控制台看拦截日志,再到现在自己写检测规则跟红队样本互相试探&…

2026/10/10 12:43:26 阅读更多 →
逻辑漏洞挖掘实战:从越权到竞态条件,比SQL注入更难防

逻辑漏洞挖掘实战:从越权到竞态条件,比SQL注入更难防

1. 逻辑漏洞到底是什么,为什么它比SQL注入还难防做了这么多年安全测试,我有个特别深的感触:很多团队把WAF、RASP、漏洞扫描器堆了一整套,SQL注入、XSS这种常规问题倒是堵得死死的,结果业务上线没几天,就被一…

2026/10/10 12:43:26 阅读更多 →
Notepad-- 跨平台文本编辑器:安装配置与批量替换、编码转换实操指南

Notepad-- 跨平台文本编辑器:安装配置与批量替换、编码转换实操指南

1. 为什么我劝你先搞清楚 Notepad-- 到底解决什么问题很多人第一次听到 Notepad-- 这个名字,第一反应是"这不就是个山寨版 Notepad 吗"。我一开始也这么想,直到有次需要在几台不同系统的机器上处理一批日志文件,Windows 上顺手用的…

2026/10/10 12:43:26 阅读更多 →
Python实战:从零实现文字冒险游戏,练透数据结构与状态管理

Python实战:从零实现文字冒险游戏,练透数据结构与状态管理

前阵子有个朋友问我:Python基础语法都会了,写循环、写函数都没问题,可一到自己做点什么就卡住,不知道该练什么项目。我给的答案很简单——写一个文字冒险游戏。这听起来很复古,甚至在2025年有点格格不入:大…

2026/10/10 12:43:26 阅读更多 →
工厂模式 + JDK动态代理:构建运行期代理实现类的完整指南

工厂模式 + JDK动态代理:构建运行期代理实现类的完整指南

工厂模式创建动态代理实现类,这个组合在Java后端开发里出现的频率非常高,尤其是当你跟Spring、Dubbo这类框架打交道时。说白了,就是接口明明摆在那,但真正干活的实现类却不是在编译期写死的,而是在运行期通过动态代理“…

2026/10/10 12:43:26 阅读更多 →
Emacs 从入门到精通:安装配置、快捷键与 Org-mode 实践指南

Emacs 从入门到精通:安装配置、快捷键与 Org-mode 实践指南

1. 为什么 2024 年还有人学 Emacs:一场反直觉的选择在 VS Code 强势到几乎成了"编辑器"代名词的今天,花时间学 Emacs 这件事听起来确实有点反潮流。我 2016 年第一次打开 Emacs 的时候,屏幕上是一片没有任何提示的纯文本界面&#…

2026/10/10 12:42:25 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →