搜 索

Sub2Api 从入门到放弃

  • 7阅读
  • 2026年09月20日
  • 0评论
首页 / AI/大数据 / 正文

一、故事的起点是一笔很不爽的账单

事情通常是这样开始的。

你先买了订阅。二十刀,一百刀,或者那个让你在付款页面深呼吸了三秒的二百刀档位。用得很爽,白天写代码有人陪,晚上问点乱七八糟的也有人答。

然后你开始写自己的小工具。一个定时抓取的 agent,一个自动整理笔记的脚本,一个你自己都说不清为什么要做但就是想做的东西。这时候你发现,订阅那套额度,程序调不着。

于是你去开了 API。充了十刀试试水。跑了一个下午。

余额还剩三块二。

这时候你脑子里会浮现出一个特别朴素、特别理直气壮的念头:我那个二百刀的订阅额度,此刻正在我睡觉的时候原地蒸发。凭什么?

恭喜,你已经站在 Sub2Api 的门口了。

二、它到底想干什么

Sub2Api 这个名字起得挺直白:Subscription to API。把一个卖给人类的订阅,掰成一个喂给程序的接口。

大模型厂商在定价上挖了一道很宽的沟,两边各站一群人:

订阅这边,固定月费,按滚动时间窗口限流。设计前提是"一个人,一双手,一次只能打一行字"。你手速再快,一天也就那么多。厂商赌的就是这个——人类的生理带宽是有上限的,所以敢卖包月。

API 那边,按 token 计费,不封顶。设计前提是"程序,不睡觉,可以并发一百个"。厂商很清楚这边能跑出多少量,所以按量收钱,一分不让。

问题是,同样一段文字,从这两边流过去,价格能差一个数量级。重度用户的订阅额度换算成官方 API 单价,一个月跑出四位数美元不是罕见事。

Sub2Api 干的事情,本质上就是在这道沟上偷偷搭一块板:让程序假装成人,站到便宜的那一边去。

三、这块板是怎么搭的

技术上无非一层协议转换——在"人类客户端"该在的位置上,插一个自己人。

graph LR A[你的代码/Agent] -->|OpenAI 格式请求| B[Sub2Api 适配层] B --> C{三条路} C -->|A. 包官方 CLI| D[官方 Agent 客户端] C -->|B. 复用会话凭据| E[网页端接口] C -->|C. 转给别人| F[第三方账号池] D --> G[厂商服务端] E --> G F --> G G -->|响应| B B -->|OpenAI 格式响应| A style F fill:#ffe0e0 style E fill:#fff4e0

路线 A:包官方 CLI。

厂商自己发了 agent 命令行工具,而且允许订阅账号直接登录使用。那么最"体面"的做法就是:起一个官方 CLI 进程,把它的标准输入输出接到一个 HTTP server 上,对外吐 OpenAI 格式。

这条路最像样。因为你确实是在用官方客户端,凭据也是官方登录流程拿的,没有任何逆向成分。代价是它慢——一个进程一次只能干一件事,你想并发?排队。而且 CLI 是为交互设计的,有一堆你不需要的开销和它自己的 agent 逻辑,你想要一个纯净的 completion 接口,它偏要先给你分析一下当前目录。

路线 B:复用会话凭据。

从浏览器里把 session token 或者 OAuth 凭据抠出来,然后直接对着网页端的接口发请求。快、轻、不用跑 CLI。

也最脆。网页接口不是公开 API,厂商随时能改,改了不会通知你,因为你本来就不该在这儿。而且这个路线的行为特征最"不像人"——没有浏览器该有的那一堆前置请求,时序也不对。

路线 C:交给别人。

有人搭了一池订阅账号,帮你把上面那些脏活全干了。你充值、拿 key、按量扣,价格远低于官方。什么都不用部署。

听起来完美。代价是你把凭据、请求内容、以及预充值的钱,一次性全交给了一个你不知道是谁的人。这条路的风险不在技术,在"你凭什么信他"。

四、实操:怎样把这块板真正搭起来

既然你还没死心,那我们就动手搭一次。

目前社区里以 Go 写的 Sub2Api 为例,比起早期那堆跑着跑着就泄露内存的 Python/Node 脚本,这玩意儿已经体面得像个正经微服务了——Go、PostgreSQL、Redis、Docker Compose,架势摆得比你的业务主库还齐整。

整个过程分四步:拉服务、抠凭据、配网关、接客户端。

1. 起服务:先把架子支起来

找一台“网络通畅且 IP 干净”的小鸡(别用万人骑的劣质机房 IP,那等于直接往风控枪口上撞),写一个 docker-compose.yml

version: '3.8'

services:
  sub2api:
    image: ghcr.io/your-sub2api-repo/sub2api:latest
    container_name: sub2api
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      - DB_HOST=postgres
      - DB_PORT=5432
      - DB_USER=sub2api
      - DB_PASSWORD=your_secure_password
      - DB_NAME=sub2api
      - REDIS_ADDR=redis:6379
      - JWT_SECRET=change_me_to_something_random
    depends_on:
      - postgres
      - redis

  postgres:
    image: postgres:15-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: sub2api
      POSTGRES_PASSWORD: your_secure_password
      POSTGRES_DB: sub2api
    volumes:
      - pgdata:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    restart: unless-stopped

volumes:
  pgdata:

在同级目录下敲下:

docker compose up -d

打开 http://你的服务器IP:8080,你会看到一个做得甚至比某些正经云厂商还清爽的管理后台。初始化一个管理员账号,这一步走完,你离“天才”感觉还剩 50%。

2. 抠凭据:当一把体面的数据搬运工

这是最考验心理素质的一步。系统支持多种模式,但本质上都是搞定“认证”:

  • 如果你走 CLI/OAuth 链路:
    在后台添加账号时,选择对应的平台提供商。它会生成一段授权 URL 或唤起本地终端登录,你在浏览器点完授权,把回调的 Token/Refresh Token 贴回面板。
  • 如果你走 Session 路线:
    打开你花了两百刀订阅的主力账号,登录网页版。按下 F12,切到 Network(网络)或 Application(存储)标签页。
    翻出那个至关重要的 Cookie(比如 session-tokensessionKey)。
    复制,粘贴到 Sub2Api 的后台「账号管理 -> 添加账号」里。

点下保存的那一瞬间,面板通常会变绿,显示:“账号健康 / 额度有效”。
恭喜,你已经把价值两百刀的身家性命,交给了容器里的几行环境变量。

3. 分发配置:假装自己是一家云厂商

Sub2Api 最迷人的地方就在这里,它不仅转发,还自带一套极其逼真的“老板面板”:

  1. 建渠道/分组: 把你刚刚绑的账号挂到对应的渠道上(比如 claude-pro-poolopenai-plus-team)。如果有好几个账号,它还能顺手帮你做权重轮询和负载均衡。
  2. 建用户 & 发 Key: 给自己生成一个专属的 API Key,格式长得跟正品一模一样:sk-sub2api-xxxxxxxxxxxx。你甚至可以顺手给自己设个每日额度上限,仪式感直接拉满。

4. 接入与见证奇迹:Hello World

打开终端,把平时调官方接口的脚本翻出来,只改两行:

  1. BASE_URL 改成你的服务器地址:http://你的服务器IP:8080/v1
  2. API_KEY 换成刚才面板发出来的 sk-sub2api-xxxxxxxxxxxx

跑个测试:

curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-sub2api-xxxxxxxxxxxx" \
  -d '{
    "model": "claude-3-5-sonnet-20241022",
    "messages": [{"role": "user", "content": "你好,请确认你是否在线?"}],
    "stream": false
  }'

回车。

屏幕卡顿了大约一秒,光标闪烁,随后吐出一段工整的标准 JSON:

{
  "id": "chatcmpl-sub2api-7x9281",
  "object": "chat.completion",
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "你好!我在线,请问有什么我可以帮你的吗?"
      }
    }
  ],
  "usage": {
    "prompt_tokens": 12,
    "completion_tokens": 15,
    "total_tokens": 27
  }
}

紧接着,把 Cursor、Cline 或者你的 Agent 框架的 base_url 统统填上它。看着 IDE 里的代码补全像流水一样倾泻而出,后台面板里的调用计数像电表倒转一样跳动。

你靠在椅子上,长舒一口气。

你觉得官方按 Token 卖接口的那帮人简直是把全世界当韭菜割,而你,仅仅用了一个周末的下午,就用一套 Go 网关完成了对资本主义价格歧视的技术反抗。

然后,你带着这种胜利者的微笑关上电脑睡觉。

五、跑通那一刻是真的爽

我得承认,第一次把 base_url 一改、原来的代码一行没动、然后看着请求从订阅额度里扣出去的时候,那个感觉是相当好的。

成本曲线肉眼可见地拍平了。 API 最折磨人的从来不是贵,是没有上限。你写了个循环,里面有个边界条件没处理好,半夜跑飞了——这种故事每个月都有人在群里讲,配图是一张后台账单截图和一个死亡表情。订阅是硬封顶,最坏结果就是这个月不能用了,钱不会多掉一分。

沉没成本被盘活了。 订阅费是预付的,你不用它也不会退。一天二十四小时里你真正在用的可能就六小时,剩下十八小时的额度纯粹在原地腐烂。接上自动化任务之后,边际成本看起来是零。

工具链零改造。 因为吐的是 OpenAI 兼容格式,你那一堆 SDK、IDE 插件、自己搭的中间件,全都不用管,换个地址就跑。

偶尔还能蹭到订阅独占的东西。 某些模型档位、某些 agent 能力,厂商只在订阅侧放,API 侧要么没有要么另算钱。

那几天你会觉得自己特别聪明。

六、然后你会慢慢发现,你手里的不是 API

这是整件事里最关键的认知转折:你拿到的不是一个 API,是一个长得像 API 的聊天会话。

你以为你有你实际有
并发单账号强限流,并发这个词基本不存在
Prompt caching 省钱没有。长上下文每次原价重来
Batch 折扣没有。这功能只在 API 侧
精确的 token usage通常是估的,成本核算靠玄学
完整的 tool use / 结构化输出看封装层心情,普遍缺胳膊少腿
版本化和弃用公告上游一改就挂,你从日志里得知
数据处理条款路线 B/C 上,这一栏是空的

更微妙的是,订阅额度的消耗逻辑本来就是按"人类节奏"设计的。你想用它跑批量任务,会发现窗口额度消耗得极快——因为限流器压根没预期有人会连续不停地打满上下文。

于是那个漂亮的成本模型开始松动:你以为买断了一个月,实际上前三天就把窗口撞穿了,剩下二十七天在等重置。

而你为此付出的调试时间,如果按你自己的时薪算一遍……算了,别算。

七、风险,罗列一下

按会不会让你真正难受排序:

  1. 数据。 路线 B 和 C 意味着请求内容经过不受控的环节。里面只要有客户数据、内部代码、业务逻辑、凭据片段,性质就从"省钱"变成"事故"。有雇主的人,这条应该直接结束讨论。
  2. 封号且不退款。 订阅条款普遍禁止绕过速率限制和非授权访问方式。订阅费预付,封了就是没了,申诉基本没戏——因为你确实违约了。
  3. 供应链投毒。 你要把最高权限的会话凭据,交给一个 star 数不高、作者不认识、更新记录不规律的仓库。这是个多理想的下毒目标,不用我多说。
  4. 中转站跑路。 预充值 + 匿名运营 + 业务本身就不合规,这三样凑齐了,风控等级大概和路边扫码充话费差不多。
  5. 不可建设性。 你没法在这上面盖任何东西。上线当天就是违约,尽调那天就是暴雷,被断供那天就是全线故障。
  6. 隐性时间成本。 跟上游版本赛跑、调协议、处理莫名截断,这部分开销通常在第二个月超过你省下的钱。

八、放弃的那一刻

flowchart TD S([已有订阅, 心有不甘]) --> S1[搭好适配层] S1 --> S2[跑通, 感觉自己是天才] S2 --> T{长期运行} T -->|上游客户端升级| R1[协议不兼容, 挂] T -->|额度按人类节奏算| R2[三天撞穿窗口, 等重置] T -->|风控识别| R3[账号受限或封禁] T -->|中转站涨价/消失| R4[余额归零] T -->|想接生产| R5[合规直接一票否决] R1 --> E([放弃]) R2 --> E R3 --> E R4 --> E R5 --> E T -->|低频玩具, 挂了无所谓| K([留着自娱自乐]) style E fill:#ffd6d6 style K fill:#e0f0e0

标题里那个"放弃"不是凑系列名。这张图上每条路最后都通向同一个出口,区别只在于你是从哪个岔口下来的。

我是从"上游升级"那条下来的。某天早上起来发现昨晚的任务全挂了,翻日志,协议变了。修了半小时,跑通了。第二周又挂了。

修到第三次的时候我坐在那儿想了个问题:我到底是在省钱,还是在给一个随时会掀桌子的人打白工?

结语

Sub2Api 是个挺漂亮的 hack。它精准地戳中了厂商定价里的一道缝,作为一次"这玩意儿到底行不行"的验证,值得你花一个周末。

但工程上真正长本事的地方,是分得清"能跑通"和"能依赖"。它的结构性问题从来不在技术——技术上它早就跑通了——而在于它成立的前提是对方没打算让你这么用。建在这个前提上的东西,都只是在借时间,利息还挺高。

入门很容易。

放弃也是。

生命在于折腾,但折腾完了记得回来把活干完。

评论区
暂无评论
avatar