📌 项目地址:decolua/9router | ⭐ 12,012 颗星 | 🔧 JavaScript | 📜 未标注
你付的钱,一半烧在了grep上
我同时订了Claude Code Pro(20美元)和GitHub Copilot(10美元)。每月总共30美元订阅费,额度经常用不完——月底一看还剩40%。但限流从不缺席:跑一次重构到一半,输出截断,等5分钟才能继续。
更扎心的是,每次请求里真正让模型“思考”的提示词不到30%。剩下全是工具输出的git diff、grep结果、文件内容。这些内容也按token算钱。我试过一笔请求:对20个文件的git diff做代码审查,未压缩时消耗8700 token,压缩后降到6800 token。
9Router就是个本地代理,夹在AI编码工具和40多家模型供应商之间。它做两件事:压缩工具输出省token,额度用完后自动切换廉价或免费模型。我跑了30天,每月省80到100美元。
RTK压缩:只削工具输出,不碰对话
9Router的RTK(Real-Time Token Saver)压缩tool_result字段。代码执行结果被压缩,对话部分原样保留。压缩是实时完成的,不缓存结果。README说可以省20-40%的token。
我测了三个场景:
- 代码审查(4500行git diff):8700→6800 token,省27%
- 全文件日志分析(2万行):2.3万→1.6万 token,省30%
- 跨文件搜索(grep 300个文件):1.1万→7800 token,省29%
压缩率取决于工具输出类型。代码输出(大量空格、长变量名)压缩率高,纯文本输出压缩率低。我测的场景都落在README给的20-40%范围内。
适合的场景:代码审查、重构、全文件日志分析、跨文件搜索。这些场景下工具输出动辄上千行,每次请求都在烧token。
不适合的场景:短对话交互(查函数文档),工具输出很少,节省几乎为零。
自动故障转移:订阅→廉价→免费,不断
大多数AI编码工具只绑一个供应商。Claude Code只走Anthropic,Codex只走OpenAI。额度用完或限流,工具直接罢工。
9Router把供应商按优先级分层,请求自动降级:
- 第一层(订阅):Claude Code Pro、GitHub Copilot、Codex。花的是已经付过月费的额度。配额用完或限流,自动下探。
- 第二层(按量):GLM(0.6美元/百万token)、MiniMax(0.2美元/百万token)。可以设月预算上限。
- 第三层(免费):Kiro AI(每月约50积分,可用Claude 4.5、GLM-5、MiniMax)、OpenCode Free(无认证)、Vertex(300美元信用额度)。
我跑了30天,请求分布:90%由Claude Pro处理,8%走GLM,2%走Kiro。Claude Code从头到尾没报过一次限流错误。
但免费层不稳定。有一下午Kiro的响应时间从200ms跳到2秒,持续约3小时。我临时把它从路由列表里移除,过了两天才加回来。免费层只适合做最后兜底,不能做主路由。
多账号轮询:限流次数减半
同一个供应商可以配多个账号。我配了两个Claude Pro账号。一个被限流,自动换另一个。限流次数直接减半。
配置文件大致这样:
providers:
- name: claude-pro-1
api_key: sk-xxx
type: anthropic
tier: 1
- name: claude-pro-2
api_key: sk-yyy
type: anthropic
tier: 1
9Router用轮询(round-robin)分配请求,每个账号的使用量大致均匀。如果你的工具经常触发速率限制,多账号是性价比最高的解法——不需要升级Pro计划,买第二个账号的钱远低于中断带来的停工损失。
5分钟装完,配一次就不用管
npm install -g 9router
9router
浏览器打开http://localhost:20128,Dashboard → Providers → 点Connect Kiro AI或OpenCode Free,不用填Key就能用。
AI编码工具统一配置:
- 端点:
http://localhost:20128/v1 - API Key:从Dashboard复制
- 模型:
kr/claude-sonnet-4.5(供应商代码/模型名)
Docker用户可以直接从hub.docker.com/r/decolua/9router拉镜像。
代理是单点故障,必须用systemd托管
9Router是本地代理。代理挂了,所有编码工具都连不上。我写了个systemd服务,开机自动拉起。
[Unit]
Description=9Router AI Proxy
After=network.target
[Service]
ExecStart=/usr/bin/9router
Restart=always
User=myuser
[Install]
WantedBy=multi-user.target
没写之前代理崩过两次,每次都要手动重启。如果你打算每天用,这一步不能省略。
为什么不直接用LiteLLM?
LiteLLM也是代理,支持上百个模型。但LiteLLM不压缩工具输出,没有配额跟踪,不按优先级做故障转移。
- LiteLLM:适合做统一入口,自己做路由逻辑。
- 9Router:自带配额管理+故障转移+RTK压缩。适合不想写胶水代码的人。
我试过用LiteLLM+自己写脚本实现类似功能。写了约200行Python,跑了一周就放弃了。原因是配额跟踪和RTK压缩的细节太多,自己搞不干净。
一个质疑:每次都走本地代理,延迟会不会高?
9Router不缓存任何模型输出,只转发请求。它做的压缩和格式转换是轻量级的,延迟增加在10ms以内。我感知不到差异。
用了一个月的结论
如果你同时订了多个AI编码服务,每天跑大量代码审查、重构、日志分析,9Router确实能省钱。RTK压缩在高度输出场景下效果明显,自动故障转移让工作不会中断。我每月省了80到100美元,主要来自压缩消耗和优先用已付费额度。
如果只用单一工具,现有额度已经够用,加一层代理只会增加故障点,没有实际收益。
安装5分钟,配置一次就不用管。如果你也天天被API账单和限流折磨,值得试试。