1天干穿1个周额度!手握17个 opencode-go 账号的我,开源了 Claude Code 无感切号代理 OpenSelect

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),这就带来了一个每天都要折磨我好几次的痛点:

  1. 17 个账号轮流撞墙,频繁退出 Session 切号极其打断心流 :当正在跑代码的账号触发 5 小时滚动窗口(rolling)或周额度(weekly)的 429 限流,或者我想切到 GLM / MiniMax 时,就必须退出当前的 Claude Code session,去改配置或切号,再重新进入会话。架构思路正推演到关键处,一退重进,心流瞬间断掉。
  2. 网上现有的切号/代理工具配置太繁琐:我也去 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,576 tokens 时,代理直接在本地返回标准 Anthropic prompt 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 余额)

这里有两个非常实用的工程细节:

  1. coding-auto 跨厂商自动降级链 :请求 coding-auto 时,代理会按 Z.ai GLM-5.3-Flash → MiniMax M3.1-Flash → opencode-go deepseek-v4.1-flash → DeepSeek 官方 deepseek-flash 自动接力。其中 DeepSeek 官方账号固定为 fallbackOnly=true------正常轮换绝不扣你的按量人民币余额,只有前面所有包月套餐和免费层全部打满或不可用时,才作为最后一道防线顶上。
  2. 防误杀的智能 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 即可使用纯内联、响应极快的本地控制台:

  1. 驾驶舱 / :实时展示账号池的 5h / 周 / 月三窗口进度条、本机时区重置倒计时、历史用量曲线(带阈值参考线)、当前活跃会话连接(支持一键点击「设为首选」立即重绑在途会话),以及以 DeepSeek 官方 API 为 100% 基准的各家套餐与 API 性价比对比表。
  2. Token 统计页 /tokens :自动采集 OpenAI / Anthropic / Responses / Google / Ollama 的 input / output / cache usage,按供应商、账号、模型、客户端、时间 多维聚合,展示总 Token、估算支出、缓存命中率、91 天活跃度热力图 与 24 小时使用节奏(流式翻译路径会明确标注为「估算」,绝不伪造数据)。
  3. 分时线路优化页 /routes :运行 bun run collect:pricing 可自动抓取 DeepSeek / Ollama Cloud / Z.ai 官方页面的高峰与非高峰分时规则(例如 OpenCode Go 的 DeepSeek 额度在高峰期单价翻倍),按 「有效成本 × 账号压力 × 延迟 × 质量 × 可靠性」 实时计算当前最优线路,并提示下一次切换时间窗口。
  4. 模型目录同步与体检(sync-catalog & doctor) :当官方上架或下架模型时,opensel sync-catalog --write 会以各账号实际 GET /v1/models 并集为准自动增删目录,并通过零推理协议探测(按 ModelProtocolUnsupported 边界级联探测)自动识别新模型协议;opensel doctor 则提供从账号、代理、注入状态到备份签名的全链路自检。
  5. 桌面告警与 Ed25519 签名加密备份 :
    • 支持按 rolling / weekly / monthly 分窗口设置告警阈值与夜间静默时段(23:00 - 07:00),通过 macOS 原生通知与可选 SMTP 邮件提醒;
    • 内置 opensel backup 采用 SQLite VACUUM 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 交流。

相关推荐
zhidian_AI1 小时前
Claude Code 装到一半总超时?其实是下载了两次
人工智能
国科安芯1 小时前
长期在轨的计算底座:商业空间站与在轨服务飞行器健康管理中的抗辐射MCU—— 面向可维护空间平台的分层容错与安全通信综述
人工智能·单片机·嵌入式硬件·安全·低轨卫星·抗辐射
加宝的起点雷达1 小时前
40 行原子写入:为什么临时文件必须写在同一个目录
人工智能·代码规范
科技新资讯2 小时前
AI如何批量处理Excel文件? 从数据合并、清洗到自动生成报表,看看 AI Agent 怎么完成任务
大数据·人工智能·excel
郝学胜-神的一滴2 小时前
AI 编程智能体 22:解析器赋能与实战落地全指南
人工智能·程序人生·游戏·unity·游戏引擎
Sayai2 小时前
让动漫角色复刻真人动作!MiniMax H3 动作控制实战:一段视频驱动角色动画(12G 显存,附模型下载)
人工智能·aigc·音视频·comfyui·动作捕捉·minimax
绿算技术2 小时前
从单点性能到体系效能:存算网创新联合体启航
大数据·人工智能
衡石科技2 小时前
让多轮问数保持口径一致:Data Agent 的上下文、偏好与学习开关
人工智能·学习·安全