ghcr.io/decolua/9router

ghcr.io/decolua/9router:0.5.59

ghcr.iolinux/amd640.5.59大小: 206.16 MB更新于 2026年9月7日
让 AI 帮你使用轩辕镜像?

如果你使用 DeepSeek元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。

只需在 AI 对话中先发送下面这句话即可:

请先完整阅读并严格遵守以下文档中的全部规则与要求:

https://xuanyuan.cloud/agents.md

在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。

查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AIDeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。

9Router - 免费 AI 路由与 Token 节省工具

永不停止编码。借助 RTK 节省 20-40% 的 tokens,并自动回退到免费及低成本 AI 模型。

连接所有 AI 编码工具(Claude Code、Cursor、Antigravity、Copilot、Codex、Gemini、OpenCode、Cline、OpenClaw...)到 40+ AI 提供商和 100+ 模型。

🚀 快速开始 • 💡 功能特点 • 📖 设置指南 • 🌐 官网

🇧🇷 Português (Brasil) • 🇻🇳 Tiếng Việt • 🇨🇳 中文 • 🇯🇵 日本語 • 🇷🇺 Русский • 🇹🇭 ไทย • 🇮🇷 فارسی • 🇮🇩 Indonesia • 🇪🇸 Español • 🇫🇷 Français


服务提供商需提供结果
Self-hosted STT完整URL — http://host:8080/v1/audio/transcriptions原样使用
Self-hosted TTS服务器根地址 — http://host:8880+ /v1/audio/speech
Self-hosted EmbeddingOpenAI基础地址(包含/v1)— http://host:8080/v1+ /embeddings

[!IMPORTANT] 注意Embedding的/v1路径。适配器会追加/embeddings,因此http://host:8080会解析为http://host:8080/embeddings,从而错过OpenAI路由——llama-server会返回501错误。请提供与OpenAI客户端使用的相同基础地址。完整的.../v1/embeddings也可接受,因此从curl示例中复制的值同样适用。

大多数本地服务器不检查API密钥,但该字段必须非空:它用于为连接提供凭据记录,且baseUrl存储于此。任何占位符均可。

自托管Embedding设计上不支持云服务 fallback——未设置baseUrl的连接会被报告为配置错误,而非静默回退到api.openai.com(这会将您的输入文本和API密钥发送给名为“自托管”的第三方服务提供商)。

📝 请求日志记录

  • 启用调试模式以获取完整的请求/响应日志
  • 跟踪 API 调用、标头和负载
  • 排查集成问题
  • 导出日志以进行分析

📈 如果我的使用量突然激增怎么办?

9Router的智能回退功能可防止意外费用:

场景: 你正在进行编码冲刺,突然用完了配额

没有9Router时:

  • ❌ 达到速率限制 → 工作停止 → 令人沮丧
  • ❌ 或者:意外产生巨额API账单

使用9Router时:

  • ✅ 订阅达到限制 → 自动回退到廉价 tier
  • ✅ 廉价 tier 费用过高 → 自动回退到免费 tier
  • ✅ 不会中断编码 → 费用可预测

你完全掌控:在仪表板中为每个提供商设置支出限额,9Router会严格遵守。

Cline / Continue / RooCode

提供商: OpenAI Compatible
基础 URL: http://localhost:20128/v1
API 密钥: [来自仪表盘]
模型: cc/claude-opus-4-7

🚀 部署

VPS 部署

# 克隆并安装
git clone https://github.com/decolua/9router.git
cd 9router
npm install
npm run build

# 配置
export JWT_SECRET="your-secure-secret-change-this"
export INITIAL_PASSWORD="your-password"
export DATA_DIR="/var/lib/9router"
export PORT="20128"
export HOSTNAME="0.0.0.0"
export NODE_ENV="production"
export NEXT_PUBLIC_BASE_URL="http://localhost:20128"
export NEXT_PUBLIC_CLOUD_URL="https://9router.com"
export API_KEY_SECRET="endpoint-proxy-api-key-secret"
export MACHINE_ID_SALT="endpoint-proxy-salt"

# 启动
npm run start

# 或使用 PM2
npm install -g pm2
pm2 start npm --name 9router -- start
pm2 save
pm2 startup

Docker

已发布镜像(多平台 linux/amd64 + linux/arm64):

  • Docker Hub: https://hub.docker.com/r/decolua/9router
  • GHCR: https://github.com/decolua/9router/pkgs/container/9router

快速启动(使用已发布镜像):

docker run -d \
--name 9router \
-p 20128:20128 \
-v "$HOME/.9router:/app/data" \
-e DATA_DIR=/app/data \
decolua/9router:latest

→ 打开 http://localhost:20128

从源码构建(开发环境):

git clone https://github.com/decolua/9router.git
cd 9router/app
docker build -t 9router .
docker run -d --name 9router -p 20128:20128 \
-v "$HOME/.9router:/app/data" -e DATA_DIR=/app/data 9router

容器默认值:

  • PORT=20128
  • HOSTNAME=0.0.0.0

常用命令:

docker logs -f 9router
docker restart 9router
docker stop 9router && docker rm 9router
docker pull decolua/9router:latest # 更新到最新版本

数据持久化: 主机上的 $HOME/.9router/db/data.sqlite ↔ 容器内的 /app/data/db/data.sqlite

环境变量

变量默认值描述
JWT_SECRET自动生成(~/.9router/jwt-secret用于仪表盘身份验证 cookie 的 JWT 签名密钥(覆盖此值可在多个实例间共享)
INITIAL_PASSWORD123456无保存哈希时的首次登录密码
DATA_DIR~/.9router应用主数据位置(SQLite 位于 $DATA_DIR/db/data.sqlite
PORT框架默认值服务端口(示例中为 20128
HOSTNAME框架默认值绑定主机(Docker 默认 0.0.0.0
NODE_ENV运行时默认值部署时设置为 production
BASE_URLhttp://localhost:20128云同步任务使用的服务器端内部基础 URL
CLOUD_URLhttps://9router.com服务器端云同步端点基础 URL
NEXT_PUBLIC_BASE_URLhttp://localhost:3000向后兼容/公共基础 URL(服务器运行时优先使用 BASE_URL
NEXT_PUBLIC_CLOUD_URLhttps://9router.com向后兼容/公共云 URL(服务器运行时优先使用 CLOUD_URL
API_KEY_SECRETendpoint-proxy-api-key-secret生成 API 密钥的 HMAC 密钥
MACHINE_ID_SALTendpoint-proxy-salt稳定机器 ID 哈希的盐值
ENABLE_REQUEST_LOGSfalse启用 logs/ 目录下的请求/响应日志
AUTH_COOKIE_SECUREfalse强制使用 Secure 身份验证 cookie(在 HTTPS 反向代理后设置为 true
REQUIRE_API_KEYfalse/v1/* 路由上强制使用 Bearer API 密钥(互联网暴露部署推荐启用)
HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, NO_PROXY上游提供商调用的可选出站代理
SEARXNG_URLhttp://localhost:8888/search内置未认证 SearXNG 网络搜索提供商的端点

注意:

  • 也支持小写代理变量:http_proxyhttps_proxyall_proxyno_proxy
  • .env 未烘焙到 Docker 镜像中(.dockerignore);通过 --env-file-e 注入运行时配置。
  • 在 Windows 上,APPDATA 可用于本地存储路径解析。
  • INSTANCE_NAME 出现在旧文档/环境模板中,但当前运行时未使用。

运行时文件和存储

  • 应用主状态:${DATA_DIR}/db/data.sqlite(SQLite — 提供商、组合、别名、密钥、设置、使用历史)
  • 自动备份:${DATA_DIR}/db/backups/
  • 可选请求/翻译器日志:当 ENABLE_REQUEST_LOGS=true 时位于 /logs/...
  • 在 Docker 容器中,${DATA_DIR}~/.9router 解析为同一位置 — 构建时会创建符号链接 /root/.9router -> /app/data

📊 可用模型

查看所有可用模型

Claude Code(cc/ - Pro/Max:

  • cc/claude-opus-4-7
  • cc/claude-opus-4-6
  • cc/claude-sonnet-4-6
  • cc/claude-sonnet-4-5-20250929
  • cc/claude-haiku-4-5-20251001

Codex(cx/ - Plus/Pro:

  • cx/gpt-5.5
  • cx/gpt-5.4
  • cx/gpt-5.3-codex
  • cx/gpt-5.2-codex
  • cx/gpt-5.1-codex-max

GitHub Copilot(gh/

  • gh/gpt-5.4
  • gh/claude-opus-4.7
  • gh/claude-sonnet-4.6
  • gh/gemini-3.1-pro-preview
  • gh/grok-code-fast-1

Cursor(cu/ - 订阅制:

  • cu/claude-4.6-opus-max
  • cu/claude-4.5-sonnet-thinking
  • cu/gpt-5.3-codex
  • cu/kimi-k2.5

GLM(glm/ - 0.6***/百万 tokens:

  • glm/glm-5.1
  • glm/glm-5
  • glm/glm-4.7

MiniMax(minimax/ - 0.2***/百万 tokens:

  • minimax/MiniMax-M2.7
  • minimax/MiniMax-M2.5

Kimi(kimi/ - 9***/月 flat 费率:

  • kimi/kimi-k2.5
  • kimi/kimi-k2.5-thinking

Kiro(kr/ - 免费(约50 credits/月,更高付费 tiers):

  • kr/claude-sonnet-4.5
  • kr/claude-haiku-4.5
  • kr/glm-5
  • kr/MiniMax-M2.5
  • kr/qwen3-coder-next
  • kr/deepseek-3.2

OpenCode Free(oc/ - 免费无认证:

  • opencode.ai/zen/v1/models 自动获取

Vertex AI(vertex/ - 300***免费 credits:

🐛 故障排除

"语言模型未返回消息"

  • 服务提供商配额耗尽 → 检查控制台配额跟踪器
  • 解决方案:使用组合回退或切换到更低成本的层级

速率限制

  • 订阅配额用尽 → 回退到GLM/MiniMax
  • 添加组合:cc/claude-opus-4-7 → glm/glm-5.1 → kr/claude-sonnet-4.5

OAuth令牌过期

  • 由9Router自动刷新
  • 若问题持续:控制台 → 服务提供商 → 重新连接

成本过高

  • 在控制台中启用RTK → 端点设置(默认开启,节省20-40%令牌)
  • 在控制台中查看使用统计
  • 将主模型切换为GLM/MiniMax
  • 对非关键任务使用免费层级(Kiro、OpenCode Free、Vertex)

控制台在错误端口打开

  • 设置 PORT=20128NEXT_PUBLIC_BASE_URL=http://localhost:20128

首次登录失败

  • 检查 .env 文件中的 INITIAL_PASSWORD
  • 若未设置,回退密码为 123456

logs/ 目录下无请求日志

  • 设置 ENABLE_REQUEST_LOGS=true

🛠️ 技术栈

  • 运行时:Node.js 20+
  • 框架:Next.js 16
  • UI:React 19 + Tailwind CSS 4
  • 数据库:SQLite(better-sqlite3 / node:sqlite / sql.js 回退)
  • 流处理:服务器发送事件(SSE)
  • 认证:OAuth 2.0(PKCE)+ JWT + API 密钥

📝 API 参考

聊天补全

POST http://localhost:20128/v1/chat/completions
Authorization: Bearer your-api-key
Content-Type: application/json

{
"model": "cc/claude-opus-4-6",
"messages": [
{"role": "user", "content": "编写一个函数来..."}
],
"stream": true
}

列出模型

GET http://localhost:20128/v1/models
Authorization: Bearer your-api-key

→ 以OpenAI格式返回所有模型和组合

📧 支持

  • 网站:9router.com
  • GitHubhttps://github.com/decolua/9router
  • 问题反馈https://github.com/decolua/9router/issues

👥 贡献者

感谢所有帮助改进9Router的贡献者!


📊 星级图表

🔀 分支项目

https://github.com/diegosouzapw/OmniRoute — 9Router的全功能TypeScript分支。新增36+服务提供商、4层级自动回退、多模态API(图像、嵌入、音频、TTS)、熔断器、语义缓存、LLM评估以及优化的控制台。包含368+单元测试。可通过npm和Docker获取。


🙏 致谢

站在巨人的肩膀上:

  • https://github.com/router-for-me/CLIProxyAPI — 最初的Go实现,启发了这个JavaScript移植版本。

非常感谢这些作者 — 没有他们的工作,9Router的令牌节省功能就无法实现。请在GitHub上给他们点⭐!


📄 许可证

MIT许可证 - 详见LICENSE。


用❤️为全天候编码的开发者打造

用户好评

来自真实用户的反馈,见证轩辕镜像的优质服务

用户头像

oldzhang

运维工程师

Linux服务器

5

"Docker访问体验非常流畅,大镜像也能快速完成下载。"

专业版 · 高速稳定拉取镜像
50GB 仅 ¥8/年
高速镜像下载在线技术支持99.95% SLA 保障付费会员免广告