手头有几个 CodeBuddy 账号,有的是自己注册的,有的是朋友送的。积分都不一样,有的还剩一大截,有的早就见底。
平时没觉得有什么。真到连着用的时候才烦——客户端只认一个 API Key,想换号就得改配置、重启,偶尔还要重新登录一遍。一天来回几次,人就麻了。
后来在 GitHub 上翻到 workbuddy2api,正好是干这个的:把几个账号收进一个池子,对外只露一条 OpenAI 兼容的接口。客户端一行代码都不用改,把 base_url 指过来、填上 Key 就行。
我在自己的服务器上部署了一份,用了有一阵。下面是用下来的感受,最后附一份部署教程。
几个号怎么轮
我一开始想得很简单:轮流用不就行了。真跑起来才知道没那么简单——有的号正在限流,请求过去就卡着;有的号积分快过期,却一直轮不到;还有的号其实积分早就用光了,非要等排到它才报错。
这些它自己会处理,有两件事我用下来觉得挺省心。
一是同一个对话不会乱跳号。多轮对话中间要是换了账号,上游的缓存会失效,不光慢,上下文偶尔还会串。它会把同一个对话粘在同一个号上,闲置一阵子才释放。
二是它优先用免费的额度。每次请求成功,上游会回一个积分消耗,它折算成每千 token 的单价记下来,跑一段时间就摸清了每个号在每个模型上是免费还是收费。选号时优先用免费的,免费号忙不过来才动别的。我手头这几个号哪个免费、哪个快没钱了,自己根本记不住,这一层最省心。
还有个细节:限流是按模型算的。某个模型被限,换一个模型马上能用,不用等整个账号恢复。
面板是我自己用 Codex 写的
项目本身不带管理面板,作者把这块留给了社区项目单独维护。我不想再装一套,就用 Codex 照着它暴露出来的接口自己写了个页面,读账号状态和模型数据。
页面上能看到累计的 Token、请求数、成功率,下面是账号池——每个号的成败、连败、最近一次成功时间,再下面是模型用量表。UID 和昵称我打了码。
我平时看得最多的是可用模型列表,每个模型后面标着上游给的倍率,x0.00 就是免费。哪些能白嫖一眼就清楚,不用挨个去试。
绑定账号也不用开终端了
以前加号要跑命令行脚本:终端吐一条授权链接,复制到浏览器登录,然后盯着终端等轮询。能用,但每次都得开个终端。
面板里直接做了个绑定向导。先选国内版还是国际版:
选完,会申请一条一次性的授权链接,然后开始轮询:
点「打开登录页」,用要绑的号登录就行。登录完弹窗自己往下走,账号直接进池子,不用重启,回面板刷一下就能看到。
部署教程
1. 拉代码、准备配置
需要 Docker 和 Docker Compose。
git clone https://github.com/dandanliangle/workbuddy2api.git
cd workbuddy2api
cp config.example.json config.json然后编辑 config.json,至少把 api_key 设上。留空就是不鉴权,公网部署一定要设。
2. 添加账号
./login.sh按提示打开授权链接、登录,完成一个账号的绑定。要加多个账号,重复执行即可。
如果是在非 root 用户下部署,登录脚本落盘的凭证属主可能和容器里的用户对不上,网关读不到,
/status里账号数是 0。这时执行chown -R 10001:10001 ./auths;之后再加账号要进容器里跑./login.sh。
3. 启动
docker compose up -d --build
curl -s http://localhost:7863/healthz
# {"healthy":2,"total":3,"service":"workbuddy2api"}返回里 healthy 不为 0,就说明账号已经读进去了。
4. 接入客户端
把客户端的 base_url 指到网关,Key 填 config.json 里的 api_key:
base_url: http://<服务器地址>:7863/v1
api_key: <config.json 里的 api_key>5. 验证
curl -sN http://127.0.0.1:7863/v1/chat/completions \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: application/json" \
-d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"hi"}],"stream":true}'能正常出内容就通了。
不想用 Docker 也行,源码构建就是一个
go build;Windows 下仓库里带了启停脚本。