1天干穿1个周额度!手握17个 opencode-go 账号的我,开源了 Claude Code 无感切号代理 OpenSelect
作为一个每天全天候高强度用 AI 写代码的开发者,过去几个月我一直在打磨一套效率极高的 「顶层架构开发流」。在这套工作流里,不同模型各司其职:
- Leader(顶层架构与全局统筹) :使用 Claude (5x),负责架构设计、复杂逻辑拆解与最终拍板;
- Assister(辅助与协同审查) :使用 Codex (Pro $200),负责边界条件审查与专项辅助;
- Editor(工作最繁重的一线编码主力) :全部交给 DeepSeek 1017。
为什么把最繁重的写代码活全部交给 DeepSeek 1017?原因很直接:它的编码体感实在太好了,而且响应与生成速度比 Codex 快了 5 倍有余!
但当主力 Editor 的速度提升了 5 倍、又承担了 80% 以上的一线代码产出时,带来的直接后果就是 Token 消耗量极其恐怖。
算了一圈市面上的账,目前综合性价比最高的依然是 opencode-go 的 $10 套餐 。为了扛住这种高强度开发,我最高峰时同时订阅了 17 个 opencode-go 账号,平均 1 天就能把 1 个账号的「周额度(weekly)」彻底干穿 !与此同时,我手里还订着 GLM (Z.ai)、MiniMax、Kimi (Command Code) 等多家套餐,外加 DeepSeek 官方 API 余额作为最后兜底。
然而,我日常最顺手的主力交互终端是 Claude Code(以及 opencode),这就带来了一个每天都要折磨我好几次的痛点:
- 17 个账号轮流撞墙,频繁退出 Session 切号极其打断心流 :当正在跑代码的账号触发 5 小时滚动窗口(rolling)或周额度(weekly)的
429限流,或者我想切到 GLM / MiniMax 时,就必须退出当前的 Claude Code session,去改配置或切号,再重新进入会话。架构思路正推演到关键处,一退重进,心流瞬间断掉。 - 网上现有的切号/代理工具配置太繁琐:我也去 GitHub 上试过目前能找到的那 2~3 款同类工具,但配置流程实在太重、太反人类了------手握十几个账号加好几家不同协议的订阅时,光是手搓配置和维护映射就让人崩溃,而且出了问题连个直观的可观测面板都没有。
忍无可忍,我干脆用 Bun + TypeScript 自己撸了一个本机守护服务,今天正式以 MIT 协议开源:OpenSelect。
- GitHub 开源地址 :github.com/Acorne-VJ/O...
- 核心形态 :Bun + TypeScript 单进程 · 运行时 0 npm 依赖 (直接基于内置
bun:sqlite)· 277 项自动化测试全覆盖
一、 OpenSelect 是如何把这套高强度开发流跑顺的?
OpenSelect 的定位非常纯粹:做你本机的 多账号池守护服务 + 双协议统一网关 。它把「监控用量 → 阈值预判切走 → 首字节前无感故障转移 → 跨协议本地翻译 → 多厂商分时路由」全部收敛到了本机的 :8788(代理端口)和 :8789(控制台端口)。
text
opencode / Claude Code (37+ 模型 & 多厂商别名)
│ baseURL = http://127.0.0.1:8788
▼
OpenSelect 代理 :8788 ┌─────────────── 用量监控(45s 并行轮询)
├─ /chat/completions /responses ────► │ https://opencode.ai/inference/go
│ /openai/v1/... │ + 多厂商直连池 (Z.ai/MiniMax/CC/DS/Ollama)
├─ /messages ─────────────────────► │ 选号策略:sticky → 最低压力 → 兜底
│ /anthropic/v1/... │ 429/5xx → 冷却 + 首字节前毫秒级换号重试
└─ /models/<m>:streamGenerateC. ────► └─ 401 → 标记失效 · 403 → (账号×模型)负缓存
1. 17 个号池化接力,绝不退 Session(首字节前无感故障转移)
当你手里有十几个 opencode-go 账号时,靠人肉盯额度是不可能的。OpenSelect 在本机做了两层自动化接力:
- 主动轮询与 97% 阈值预判切走 :后台每 45 秒并行轮询官方
GET /inference/go/v1/usage,精确记录每个账号rolling(5小时)、weekly(周)、monthly(月)三个窗口的百分比、状态与重置倒计时(重启后还会自动恢复 24 小时内的最近快照,避免重启窗口误选高危账号)。当任一窗口达到阈值(默认 97% ,可在 95%~99% 间调节),新会话会自动按sticky(会话亲和) → least-pressure(最低压力) → fallback(兜底)三级策略切向最健康的账号。 - 在途请求「首字节前」毫秒级换号重试 :如果正在狂飙代码的 Session 突然遇到上游
429(限流)/ 401(Key失效)/ 403 / 5xx / 网络闪断,甚至 2xx 响应头已经到达、但正文首字节前断流 (OpenSelect 会预读首个数据块做判定),代理会在响应首字节发给客户端之前自动换下一个号重试(默认最多尝试 4 个)。 - 细粒度错误隔离(绝不误杀好号):不同错误码有严格区分的处置语义,客户端(Claude Code / opencode)全程无感,再也不用退出当前会话:
| 上游异常场景 | OpenSelect 处置动作 | 客户端体感 |
|---|---|---|
| 上游 429(限流) | 解析 retry-after + metadata.limitName,精确冷却该账号,立即换号重试 |
无感继续输出 |
| 上游 401(Key 失效) | 标记该账号 invalid 移出池,换号重试(后续轮询校验恢复后自动归队) |
无感继续输出 |
| 上游 403(模型/区域限制) | 绝不毒化整个账号 ;仅按 (账号 × 模型) 记 15 分钟负缓存,换号重试 |
无感继续输出 |
| 上游 5xx / 首字节前断流 | 短暂冷却(≤60s)并换号重试,台账记录原账号与接力目的账号 | 无感继续输出 |
| Cloudflare 1010 拦截 | 自动统一上游 User-Agent: opencode/1.0.0,规避空 UA 或脚本签名被 WAF 误杀 |
彻底规避 1010 |
2. Claude Code 零配置直连 + 本地协议翻译层
在我的顶层架构开发流里,Claude Code 是主力入口。为了能在 Claude Code 里直接用上 opencode-go 里的 DeepSeek、GLM 等 OpenAI 协议模型,OpenSelect 把 :8788 做成了标准的 Anthropic + OpenAI 双协议统一出口:
- Anthropic 家族模型原生直通 :支持
POST /v1/messages与/v1/messages/count_tokens,9 个family=anthropic模型零损耗直通;客户端未携带x-opencode-session时由代理按凭据自动稳定合成。 - 内置 Anthropic → OpenAI Chat 本地协议翻译层 :只需把
ANTHROPIC_BASE_URL指向http://127.0.0.1:8788,你就能在 Claude Code 里直接驱动deepseek-v4.1-flash、glm-5.1等openai/chat模型:
bash
ANTHROPIC_BASE_URL=http://127.0.0.1:8788 ANTHROPIC_API_KEY=placeholder \
claude --model glm-5.1
翻译层在本地一次性完成请求与流式响应的双向映射(换号重试直接复用同一份翻译结果,不重复损耗):
- 自动映射 System Prompt(包含对话中途插入的 mid-conversation system)、多轮消息、图片输入、
tools / tool_choice、tool_result与stop_sequences; - 将上游 OpenAI 流式 SSE 实时转换为标准 Anthropic 事件序列,并处理了工具调用
index交错或缺失的合并问题; - 1M 上下文智能触发
/compact:支持在 Claude Code 模型 ID 后带[1m](例如deepseek-v4.1-flash[1m]),转发前自动剥离后缀;当请求超过1,048,576tokens 时,代理直接在本地返回标准 Anthropicprompt is too long错误,让 Claude Code 自动触发/compact压缩上下文,而不是把 1.05M 的请求发到上游换回一个生硬的 400 报错。
为了省去每次敲环境变量的麻烦,仓库内置了一键别名安装脚本:
bash
./scripts/install-claude-aliases.sh # 默认安全写入 ~/.zshrc,自动备份原文件
source ~/.zshrc
执行后终端直接生成 3 个快捷命令(脚本里不包含任何真实 API Key ,真实 Key 只锁在本地 0600 权限的 ~/.openselect/config.json 中):
| 终端别名 | 对应模型 | 适用场景说明 |
|---|---|---|
ds-cli |
deepseek-v4.1-flash[1m] |
日常主力 Editor:走 OpenSelect 17 号池,5 倍极速编码不断流 |
free-cli |
deepseek-v4.1-flash-free |
白嫖模式:走免费模型链,不消耗任何付费套餐额度 |
auto-cli |
coding-auto[1m] |
全自动防线:按 Z.ai → MiniMax → opencode-go → DeepSeek 官方兜底自动降级 |
3. 把手里的所有订阅串成一条「不死防线」
除了管理多个 opencode-go 账号,OpenSelect 原生打通了我手里订阅的各家主流 Coding 平台,并统一纳入额度监控与故障转移池:
| 供应商 | Base / 协议支持 | 模型别名示例 | 默认思考度注入 | 额度与状态监控接口 |
|---|---|---|---|---|
| OpenCode Go | Anthropic / OpenAI / Google | 全部 37 个目录模型 | 原生透传 | GET /inference/go/v1/usage(5h/周/月) |
| Z.ai (智谱 GLM) | Anthropic 原生透传 | zai/glm-5.3-flash、zai/glm-5.3 |
thinking.enabled + effort=max |
GET /api/monitor/usage/quota/limit |
| MiniMax (中国/全球) | Anthropic 原生透传 | minimax/MiniMax-M3.1-Flash、M3 |
output_config.effort=max |
GET /v1/token_plan/remains |
| Command Code | Anthropic + OpenAI | cc/kimi-k3.1-pro、cc/glm-5.3-flash |
原生透传 | 同 Provider 多 Key 故障转移 |
| Ollama Cloud | Anthropic + OpenAI | ollama/<动态发现模型> |
原生透传 | 自动探测 /v1/models |
| DeepSeek 官方 | Anthropic 原生透传 | deepseek/deepseek-flash、v4-pro |
thinking.enabled + effort=max |
GET /user/balance(CNY 余额) |
这里有两个非常实用的工程细节:
coding-auto跨厂商自动降级链 :请求coding-auto时,代理会按 Z.ai GLM-5.3-Flash → MiniMax M3.1-Flash → opencode-godeepseek-v4.1-flash→ DeepSeek 官方deepseek-flash自动接力。其中 DeepSeek 官方账号固定为fallbackOnly=true------正常轮换绝不扣你的按量人民币余额,只有前面所有包月套餐和免费层全部打满或不可用时,才作为最后一道防线顶上。- 防误杀的智能 429 冷却 :针对直连供应商(如 MiniMax),只有响应带有明确
retry-after / limitName或账号用量确实到达 100% 时才按恢复时间冷却;遇到偶发的裸 429 只暂停 3 秒,绝不会把还有余额的账号一棍子打死隐藏 5 分钟。
4. 免费模型「优先白嫖」模式(Free-first & Zen 免费层直通)
为了帮重度用户把付费套餐省在刀刃上,OpenSelect 支持 免费模型中转(关闭 off / 优先 first / 兜底 fallback) ,并且直接打通了 opencode zen 的 7 个免费模型与 Go 计划内的实测可用免费模型(如 longcat-2.5-preview-free、minimax-m3.1-flash-free):
- 在 「优先(first)」 模式下,当你请求付费的
openai/chat模型时,代理会先按你排好的优先级尝试免费候选模型; - 一旦免费模型返回 429、403、5xx 或不可用,代理仅记录 15 分钟
(账号 × 免费模型)负缓存,绝不冷却你的账号(不影响该账号的付费额度池),并毫秒级无缝回落到你原本请求的付费模型; - 请求台账与面板流水会如实记录
请求模型 → 实际服务模型,清清楚楚。
二、 告别繁琐配置:为什么 opensel wire 只需一行命令?
前面提到,我放弃网上现有工具的一大原因是配置太繁琐。
在开发 OpenSelect 的 E2E 测试时,我们还验证出了一个很多人踩坑的底层细节:opencode 客户端其实只认「模型级」的 settings.baseURL 覆盖,你在 provider 级配置的 settings.baseURL 或 legacy provider.options.baseURL 会被它静默忽略!
如果靠手改配置文件去给 37 个模型逐一加 baseURL,不仅容易改错,想切回直连时更是一场灾难。而在 OpenSelect 里,整个接入流程被压缩到了 4 条命令:
bash
# 1. 克隆并初始化 ~/.openselect(权限自动设为 0600)
git clone https://github.com/Acorne-VJ/OpenSelect.git
cd OpenSelect
./bin/opensel init
# 2. 导入账号(二选一)
./bin/opensel import # 直接从本机 opencode 已有凭据一键批量导入全部账号!
./bin/opensel add --key oc_sk_xxx --label go-01 # 或手动添加新账号(自动校验用量并同步凭据)
# 3. 启动守护服务(:8788 代理 + :8789 控制台 + 45s 用量轮询)
./bin/opensel serve
# 4. 一键把 opencode 全部 37 个模型注入本机代理
./bin/opensel wire
- 可逆无损注入 :执行
opensel wire前会自动备份原配置到~/.openselect/backups/,并将每个模型注入前的原值记录到wired.json;任何时候执行./bin/opensel unwire,即可一键还原回直连状态(注入后你手动改过的条目还会智能保留不动)。 - 配置热加载 :平时在面板或
config.json增删账号、调整切换阈值、修改轮询间隔,在 1 个轮询周期内自动热生效,无需重启服务。 - macOS 开机自启 :执行
./bin/opensel install即可注册 launchd 常驻服务与每日自动备份任务。
三、 全景可视化控制台(:8789)与安全备份
虽然核心是一个零依赖的本地单进程服务,但面对 17 个账号与多家订阅的混合调度,可观测性一点没妥协。浏览器打开 http://127.0.0.1:8789 即可使用纯内联、响应极快的本地控制台:
- 驾驶舱
/:实时展示账号池的 5h / 周 / 月三窗口进度条、本机时区重置倒计时、历史用量曲线(带阈值参考线)、当前活跃会话连接(支持一键点击「设为首选」立即重绑在途会话),以及以 DeepSeek 官方 API 为 100% 基准的各家套餐与 API 性价比对比表。 - Token 统计页
/tokens:自动采集 OpenAI / Anthropic / Responses / Google / Ollama 的 input / output / cache usage,按供应商、账号、模型、客户端、时间 多维聚合,展示总 Token、估算支出、缓存命中率、91 天活跃度热力图 与 24 小时使用节奏(流式翻译路径会明确标注为「估算」,绝不伪造数据)。 - 分时线路优化页
/routes:运行bun run collect:pricing可自动抓取 DeepSeek / Ollama Cloud / Z.ai 官方页面的高峰与非高峰分时规则(例如 OpenCode Go 的 DeepSeek 额度在高峰期单价翻倍),按 「有效成本 × 账号压力 × 延迟 × 质量 × 可靠性」 实时计算当前最优线路,并提示下一次切换时间窗口。 - 模型目录同步与体检(
sync-catalog&doctor) :当官方上架或下架模型时,opensel sync-catalog --write会以各账号实际GET /v1/models并集为准自动增删目录,并通过零推理协议探测(按ModelProtocolUnsupported边界级联探测)自动识别新模型协议;opensel doctor则提供从账号、代理、注入状态到备份签名的全链路自检。 - 桌面告警与 Ed25519 签名加密备份 :
- 支持按
rolling / weekly / monthly分窗口设置告警阈值与夜间静默时段(23:00 - 07:00),通过 macOS 原生通知与可选 SMTP 邮件提醒; - 内置
opensel backup采用 SQLiteVACUUM INTO生成一致性快照,支持 Ed25519 数字签名验签 (防篡改、防伪造 sidecar)与 AES-256-CBC 加密推送私有 Git 远端 ,恢复前还会自动生成pre-restore安全快照并清理旧-wal / -shm残留,彻底杜绝单机故障丢配置或丢台账。
- 支持按
四、 写在最后
如果你也在实践高强度的多模型协同开发(比如用 Claude 控架构、用 DeepSeek / GLM 做极速编码主力),或者正在经历以下困扰:
- 单账号额度不够烧,手里囤了好几个甚至十几个
opencode-go账号,每天在终端里反复退出 session 切号; - 同时订阅了
opencode-go、智谱 GLM、MiniMax、Kimi 等多家服务,想要一个统一的 Claude Code / OpenAI 本地高可用入口; - 厌倦了动辄要配一堆容器和复杂规则的笨重工具,想要一套干净、零依赖、随时可
unwire无损还原的本机方案;
欢迎直接拉取代码体验:
🔗 GitHub 仓库 :github.com/Acorne-VJ/O... (MIT License)
如果这个小工具也帮到了你,欢迎在 GitHub 上点个 Star ⭐ 支持一下!有任何使用反馈或新的供应商接入需求,也欢迎直接在仓库提 Issue 或 PR 交流。