今天在 GitHub Trending 上看到一个有意思的项目:9Router,一个免费的 AI 路由器与 Token 节省器,连接 Claude Code、Cursor、OpenClaw 等主流编程工具,自动路由到 40+ AI 服务商和 100+ 模型,配合 RTK(Result Token Keeper)技术可将每次请求的 tokens 消耗压缩 20-40%,同时实现订阅→低价→免费三级自动 Fallback,号称"永不停止编码、永不超预算"。

一、项目概述

9Router 本质上是一个运行在本地的 OpenAI 兼容 API 代理网关。它监听 http://localhost:20128/v1,对所有发往该端点的请求进行智能路由、格式转换和 Token 压缩,再转发给上游真实 AI 提供商。

核心解决的问题:

  • ❌ 订阅额度每月用不完就过期浪费
  • ❌ Rate Limit(速率限制)在你编码时突然中断
  • ❌ Tool 输出(git diff、grep、ls 等)消耗大量 Token
  • ❌ 各家 API 价格昂贵,月费 $20-50
  • ❌ 需要手动切换提供商,流程繁琐

9Router 的核心能力:

  • ✅ RTK Token Saver — 自动压缩 tool_result 内容,单次请求节省 20-40% tokens
  • ✅ 额度最大化 — 追踪配额,月底前用尽每个提供商的额度
  • ✅ Auto Fallback — 订阅耗尽 → 低价模型 → 免费模型,全程零停机
  • ✅ 多账号轮询 — 同一提供商可配置多个账号,轮询使用均摊额度
  • ✅ 全工具兼容 — Claude Code、Codex、Cursor、Cline、OpenClaw、Copilot 通吃

二、技术原理

2.1 架构设计

┌─────────────┐
│  Your CLI   │  (Claude Code, Codex, OpenClaw, Cursor, Cline...)
│   Tool      │
└──────┬──────┘
       │ http://localhost:20128/v1
       ↓
┌─────────────────────────────────────────────┐
│           9Router (Smart Router)            │
│  • RTK Token Saver (cut tool_result tokens) │
│  • Format translation (OpenAI ↔ Claude)     │
│  • Quota tracking                           │
│  • Auto token refresh                       │
└──────┬──────────────────────────────────────┘
       │
       ├─→ [Tier 1: SUBSCRIPTION] Claude Code, Codex, GitHub Copilot
       │   ↓ quota exhausted
       ├─→ [Tier 2: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M)
       │   ↓ budget limit
       └─→ [Tier 3: FREE] Kiro, OpenCode Free, Vertex ($300 credits)

这是一个典型的反向代理 + 智能路由架构。9Router 以 Next.js 应用运行,暴露两个关键端口:

  • http://localhost:20128/dashboard — Web 可视化控制台(配置提供商、管理 API Key、查看用量)
  • http://localhost:20128/v1 — OpenAI 兼容 API 端点(Claude Code、Cursor 等工具通过此端点接入)

2.2 RTK Token Saver 原理

RTK(Result Token Keeper)是 9Router 最核心的创新。它通过以下策略压缩 tool_result 体积:

工具输出压缩策略:

// RTK 核心逻辑示意(简化)
function compressToolResult(toolResult) {
  switch (toolResult.type) {
    case 'file_path':        // ls/dir 输出 → 只保留文件名,去掉权限/大小
      return extractFileNames(toolResult.content)
    case 'search_content':   // grep/ripgrep → 去重行、折叠重复行
      return deduplicateAndCompress(toolResult.content)
    case 'git_diff':         // git diff → 过滤无变化行
      return filterUnchangedLines(toolResult.content)
    case 'edit':             // 保持原样
      return toolResult.content
  }
}

实际使用中,Claude Code 的每次 ToolUse 返回结果中包含大量元数据(行号、空格、路径信息等),RTK 自动清洗这些冗余内容,将原始 Token 消耗降低 20-40%,对于高频率调用工具的编码场景效果尤为显著。

2.3 格式转换层(OpenAI ↔ Claude)

Claude 使用 anthropic/messages 接口格式,而 Claude Code 等工具原生使用 OpenAI chat/completions 格式。9Router 内置格式翻译器:

OpenAI format: { model: "gpt-4", messages: [...] }
       ↓
9Router 格式转换层
       ↓
Claude format: { model: "claude-sonnet-4", messages: [...] }

用户只需在 Claude Code 等工具中配置:

Endpoint: http://localhost:20128/v1
API Key: [从 Dashboard 复制]
Model: kr/claude-sonnet-4.5

2.4 Dockerfile 解析

项目提供多阶段构建的 Dockerfile,生产镜像约 200MB:

# 构建阶段
FROM node:22-alpine AS builder
RUN npm install && npm run build

# 运行阶段
FROM node:22-alpine AS runner
WORKDIR /app
ENV PORT=20128
ENV HOSTNAME=0.0.0.0
# 使用独立 MITM 进程处理请求
COPY --from=builder /app/src/mitm ./src/mitm
ENTRYPOINT ["/entrypoint.sh"]
CMD ["node", "custom-server.js"]

三、安装与快速开始

3.1 最简安装(npm 全局包)

# 一行命令完成安装并启动
npm install -g 9router
9router

执行后 Dashboard 自动在 http://localhost:20128 打开。

3.2 Docker 部署(适合服务器/Hugging Face)

# 从 GitHub Container Registry 拉取
docker pull ghcr.io/decolua/9router:latest

# 运行
docker run -d \
  -p 20128:20128 \
  -v ~/9router-data:/app/data \
  ghcr.io/decolua/9router:latest

3.3 从源码运行(开发者模式)

git clone https://github.com/decolua/9router.git
cd 9router
cp .env.example .env
npm install

# 开发模式(热重载)
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev

# 生产构建
npm run build
PORT=20128 HOSTNAME=0.0.0.0 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run start

3.4 连接免费提供商(无需注册)

Dashboard → Providers → 连接以下任意一个:

  • Kiro AI — 免费 Claude 模型,无限使用(推荐)
  • OpenCode Free — 无需认证,直接可用

四、使用方法与实战

4.1 Claude Code 配置

在 Claude Code 的配置中填写:

{
  "apiKey": "your-9router-api-key-from-dashboard",
  "baseUrl": "http://localhost:20128/v1",
  "model": "kr/claude-sonnet-4.5"
}

4.2 OpenClaw / Cline 配置

同样填入 http://localhost:20128/v1 作为 base URL,API Key 从 Dashboard 获取,模型选择 kr/claude-sonnet-4.5。

4.3 多账号轮询配置

在同一 Provider 下添加多个 API Key,9Router 会自动轮询:

{
  "provider": "openai",
  "accounts": [
    { "apiKey": "sk-xxx-1", "weight": 1 },
    { "apiKey": "sk-xxx-2", "weight": 1 }
  ],
  "strategy": "round-robin"
}

4.4 三级 Fallback 配置示例

{
  "tiers": [
    { "provider": "anthropic", "model": "claude-sonnet-4", "priority": 1 },
    { "provider": "zhipu", "model": "glm-4", "priority": 2 },
    { "provider": "kiro", "model": "claude-sonnet-4-free", "priority": 3 }
  ]
}

五、常见问题与解决方案

Q: 安装后 Dashboard 打不开?
检查端口 20128 是否被占用:lsof -i :20128,或通过环境变量 PORT=其他端口 更换。

Q: RTK Token Saver 对所有工具输出都有效吗?
不是。RTK 主要优化文件列表(ls)、搜索结果(grep)、Git diff 等结构化输出,对纯文本对话内容影响很小。实测编码场景(高工具调用频率)节省效果最明显。

Q: 如何在 Hugging Face 上免费部署 9Router?
项目支持 Docker 部署,Hugging Face Spaces 提供免费 Docker 支持,适合不想本地运行或需要远程访问的用户。

Q: 免费模型有速率限制吗?
不同提供商限制不同。Kiro AI 提供较宽松的免费额度,OpenCode Free 无需认证,具体以各平台政策为准。

Q: 是否支持本地模型(如 Ollama)?
支持。9Router 兼容 OpenAI 格式,本地 Ollama 通过 http://localhost:11434/v1 接入即可作为 Fallback 备选。

六、总结

9Router 是一个非常实用的 AI 编程工具基础设施项目。它解决的核心矛盾是:开发者想用最强的模型coding,但模型贵、有速率限制。通过 RTK Token Saver + 三级 Auto Fallback 组合拳,9Router 让用户用最少的成本、最稳定的方式持续使用 AI 编程工具。

亮点总结:

  • 零成本上手:npm 一键安装,无需注册任何账号
  • Token 节省实测 20-40%:对高频工具调用场景效果显著
  • 全工具兼容:Claude Code、OpenClaw、Codex、Cursor、Cline 通吃
  • 100+ 模型可选:从 Claude 到 GLM 到 Kiro,任君挑选

如果你受够了 Rate Limit 和高昂 API 费用,不妨试试 9Router。

🔗 项目地址:https://github.com/decolua/9router
🌐 官网:https://9router.com
📦 npm:npm install -g 9router