204 lines
11 KiB
Markdown
204 lines
11 KiB
Markdown
# AI API 反代(反向代理)研究笔记
|
||||
|
|
|
|||
|
|
> 整理日期:2026-11-04
|
|||
|
|
> 资料来源:CLIProxyAPI / new-api / sub2api / one-api / workbuddy2api-panel 官方 README(一手抓取)
|
|||
|
|
> 目标:搞清楚"反代"到底是什么、CPA / new-api / sub2api / workbuddy2api 各是什么角色、"20x 这类中转站"的真相
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 0. 一句话理解
|
|||
|
|
|
|||
|
|
**反代 = 自己跑一个程序,拿着你"网页版/订阅版账号"的登录凭证,伪装成官方客户端去调上游接口,对外暴露成一个标准 OpenAI 兼容 API。**
|
|||
|
|
|
|||
|
|
客户端(Cherry Studio、ChatBox、Claude Code……)只认标准 API,根本不知道背后是白嫖的网页/订阅账号。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 先分清两种"反代"
|
|||
|
|
|
|||
|
|
| | 传统反代(Nginx/Caddy) | AI 圈说的反代 |
|
|||
|
|
|---|---|---|
|
|||
|
|
| 干什么 | 转发 HTTP 请求、隐藏源站、负载均衡 | **把账号变成 API**(协议转换 + 账号池) |
|
|||
|
|
| 谁在用 | 运维 | 白嫖党 / 中转站站长 |
|
|||
|
|
| 难点 | 配置 | 逆向上游协议 + 对抗风控 |
|
|||
|
|
|
|||
|
|
底层都是"代理转发",但 AI 圈反代的核心价值是**协议转换**:上游根本没有开放 API(或 API 按 token 收钱),反代硬是用你的网页/订阅账号造出一个 API 来。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 动机:为什么要反代
|
|||
|
|
|
|||
|
|
- **Gemini**:网页版 / AI Studio 免费,官方 API 按 token 计费 → 账号反代 = 免费用
|
|||
|
|
- **Claude / GPT 订阅**:Claude Pro、ChatGPT Plus 包月,API 另收费 → 订阅反代成 API,包月费摊进 API 调用
|
|||
|
|
- **CodeBuddy(WorkBuddy)**:只有客户端、没有开放 API → workbuddy2api 硬造一个
|
|||
|
|
- **统一格式**:背后无论哪家,客户端只写一套 OpenAI 格式
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 原理拆解:一次请求的完整旅程
|
|||
|
|
|
|||
|
|
以 CPA(CLIProxyAPI)+ Gemini 为例:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
你的电脑
|
|||
|
|
┌──────────────────────────────────────────────────────┐
|
|||
|
|
│ 客户端 (Cherry Studio 等) │
|
|||
|
|
│ │ ① POST /v1/chat/completions │
|
|||
|
|
│ │ Authorization: Bearer sk-你自己设的key │
|
|||
|
|
│ ▼ │
|
|||
|
|
│ 反代网关 (CPA, 本地 127.0.0.1:8317) │
|
|||
|
|
│ ② 验 key → ③ 账号池选号 → ④ 协议转换 │
|
|||
|
|
│ │ ⑤ 用该账号的 OAuth token,伪装成 Gemini CLI │
|
|||
|
|
└────┼─────────────────────────────────────────────────┘
|
|||
|
|
▼ (出站走代理 / 外国 IP)
|
|||
|
|
Google 内部接口
|
|||
|
|
│ ⑥ SSE 流式返回
|
|||
|
|
▼
|
|||
|
|
网关把流转成 OpenAI 格式 → 客户端收到标准响应
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
四个关键部件:
|
|||
|
|
|
|||
|
|
1. **凭证(auths)**:OAuth 登录拿到的 accessToken / refreshToken,存本地文件(`auths/*.json`),程序自动刷新。这就是"你的账号"本体。
|
|||
|
|
2. **协议转换**:OpenAI `chat/completions` ↔ 上游私有格式(Gemini internal、Claude Messages、CodeBuddy SSE……)双向翻译,流式 SSE 逐帧转换。
|
|||
|
|
3. **账号池治理**(工程量最大的部分):
|
|||
|
|
- 轮询 / 加权选号(快过期额度优先消耗)
|
|||
|
|
- 429 限流 → 软冷却 + 指数退避;402 余额耗尽 → 硬冷却到次日
|
|||
|
|
- 熔断、会话粘性(同一会话固定同号,保证多轮上下文不跳号)
|
|||
|
|
4. **自签发 key**:网关对外发自己的 `sk-xxx`,客户端拿它调用,真实凭证永远不离开你的机器。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 为什么必须外国 IP
|
|||
|
|
|
|||
|
|
- Google / OpenAI / Anthropic 对中国大陆 IP 有地区限制或风控,**OAuth 登录这一步就过不去**
|
|||
|
|
- 即使登录成功,国内 IP 直连调用风控打分高 → 容易封号
|
|||
|
|
- 所以两条路:本地部署 + 网关出站挂梯子;或直接部署在国外服务器
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 生态地图:三层结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
第 1 层:账号 → API(协议转换层)
|
|||
|
|
CLIProxyAPI、sub2api、workbuddy2api
|
|||
|
|
输入:OAuth 账号 / 订阅 / API key
|
|||
|
|
输出:OpenAI 兼容 API
|
|||
|
|
│
|
|||
|
|
▼
|
|||
|
|
第 2 层:网关 / 分发(管理层)
|
|||
|
|
one-api、new-api
|
|||
|
|
输入:各种"渠道"(官方 key、反代端点、中转站 key)
|
|||
|
|
输出:统一 API + 用户 / 额度 / 计费 / 负载均衡
|
|||
|
|
│
|
|||
|
|
▼
|
|||
|
|
第 3 层:商业中转站(别人替你搭好的第 1+2 层)
|
|||
|
|
PackyCode、APIKEY.FUN……(CPA README 赞助商列表一大排)
|
|||
|
|
直接卖 key 给你 —— 之前用的 20x 就是这类
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**20x 的真相**:站长在自己服务器上跑账号池(批量注册/收购的账号)+ 网关,把白嫖额度包装成 key 卖给你。所以价格能压到官方一折以下——因为上游根本不是官方 API。这也解释了朋友那句"不然哪里有那么多 api 可以用"。
|
|||
|
|
|
|||
|
|
典型自建组合:**CPA(白嫖账号)→ new-api(统一分发、记用量)→ 各客户端**
|
|||
|
|
|
|||
|
|
同类思路的其他出口:MCP(chat-on-steroids、MCPod 把网页版 GPT 接成 MCP 工具)——同一套逆向,换个协议出口而已。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. 五个工具横评
|
|||
|
|
|
|||
|
|
| 工具 | 定位 | 吃什么账号 | 吐什么 | 部署 | 状态 |
|
|||
|
|
|---|---|---|---|---|---|
|
|||
|
|
| **CLIProxyAPI (CPA)** | 账号→API | Gemini / Codex / Claude / Grok / Kimi / Meta 等的 OAuth 或 key | OpenAI / Claude / Gemini / Codex / Grok 全兼容 | 单文件 / Docker / **桌面版 EasyCLIProxyAPI** | ✅ 活跃,中文文档 help.router-for.me |
|
|||
|
|
| **sub2api** | 账号→API + 计费分发 | Claude / Codex / Grok / Antigravity 等订阅号 | OpenAI / Anthropic 兼容 + 用户/额度/支付系统 | Docker Compose(Go + Vue + PG + Redis) | ✅ 活跃,README 顶部明确警告 ToS 风险 |
|
|||
|
|
| **workbuddy2api-panel** | 账号→API | 腾讯 CodeBuddy / WorkBuddy | OpenAI 兼容 | Docker / Windows 单文件 exe | ⚠️ **2026-10-21 已停止维护** |
|
|||
|
|
| **one-api** | 网关分发 | 各种官方 API key 渠道 | OpenAI 格式统一出口 | Docker,初始 root/123456 | ✅ 老牌"祖师爷"(MIT) |
|
|||
|
|
| **new-api** | 网关分发 | 渠道(可挂反代端点/中转站 key) | OpenAI / Claude / Gemini + 用户/计费/插件市场 | Docker 一条命令起 | ✅ 活跃(one-api 二开,功能更多) |
|
|||
|
|
|
|||
|
|
选型直觉:
|
|||
|
|
|
|||
|
|
- 只想**用自己账号白嫖 Gemini/Claude** → CPA(新手直接上桌面版)
|
|||
|
|
- 想**管一堆渠道、分发给团队** → new-api
|
|||
|
|
- 想**搞订阅账号池运营**(站长向)→ sub2api
|
|||
|
|
- workbuddy2api → 别再投入时间(见下节)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. 重要情报:workbuddy2api 已死
|
|||
|
|
|
|||
|
|
朋友 10/17 还在推荐它,但 **10/21 官方宣布停止维护**,README 给出三个原因:
|
|||
|
|
|
|||
|
|
1. **上游已开始禁用反代**——WorkBuddy 对非官方客户端的识别与拦截正在收紧(通道校验、账号限制),反代通道存活周期不可控
|
|||
|
|
2. 个人精力有限,无力长期跟进协议变化与风控对抗
|
|||
|
|
3. 非法转卖泛滥(批量小号、卡密售卖),与项目初衷相悖
|
|||
|
|
|
|||
|
|
这件事本身就是最好的教材:**反代是猫鼠游戏,上游一收紧,工具随时死**。sub2api 的 README 同样把"ToS 风险、封号自负"写在最顶上。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. 风险清单(研究归研究,心里要有数)
|
|||
|
|
|
|||
|
|
| 风险 | 说明 |
|
|||
|
|
|---|---|
|
|||
|
|
| 封号 | 违反上游 ToS 是明确的;轻则限流重则封号(WorkBuddy 已动手) |
|
|||
|
|
| 随时失效 | 上游改协议 / 收紧风控 → 工具停更(活例:workbuddy2api) |
|
|||
|
|
| 中转站不可信 | 你的**全部对话内容和 key** 都过别人服务器;跑路、泄露、掺水(偷换便宜模型)都常见 |
|
|||
|
|
| 法律合规 | one-api README 特别提醒《生成式AI服务管理暂行办法》:国内对公众提供未备案生成式 AI 服务违规。自用没问题,**别搞成对外服务** |
|
|||
|
|
| 凭证安全 | auths/ 里是明文 token;来路不明的"收费版/卡密版"可能直接偷号 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9. 上手路线(Windows + F:\AI\docker + 梯子)
|
|||
|
|
|
|||
|
|
**第一步(零门槛,跑通"账号→API"流程)**
|
|||
|
|
装 EasyCLIProxyAPI(CPA 官方桌面客户端,图形界面、一键启停),OAuth 登录一个 Google 账号,本地就有 `127.0.0.1:8317/v1` 可调,用 curl 或 Cherry Studio 打一发。
|
|||
|
|
|
|||
|
|
**第二步(练 Docker,理解"分发层")**
|
|||
|
|
`docker run` 起 new-api(不需要任何 AI 账号,纯看网关概念:渠道/令牌/负载均衡),再把第一步 CPA 的端点作为一个"渠道"挂进去——这正是聊天记录里"放在 CPA 里面用"的玩法:CPA 做上游,new-api 做分发。
|
|||
|
|
|
|||
|
|
**第三步(可选,网络进阶)**
|
|||
|
|
整套 compose 化,跑通"本地容器 + 梯子出站":容器内访问宿主机代理用 `host.docker.internal:7890`(按梯子实际端口改),CPA 也在配置里支持出站代理。
|
|||
|
|
|
|||
|
|
不建议再花时间研究 workbuddy2api。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 10. 参考链接
|
|||
|
|
|
|||
|
|
- CLIProxyAPI(CPA):https://github.com/router-for-me/CLIProxyAPI (中文文档 https://help.router-for.me/cn/ )
|
|||
|
|
- CPA 桌面客户端:https://github.com/router-for-me/EasyCLIProxyAPI
|
|||
|
|
- new-api:https://github.com/QuantumNous/new-api (文档 https://docs.newapi.ai )
|
|||
|
|
- one-api:https://github.com/songquanpeng/one-api
|
|||
|
|
- sub2api:https://github.com/Wei-Shaw/sub2api
|
|||
|
|
- workbuddy2api-panel(已停维护):https://github.com/linguo2625469/workbuddy2api-panel
|
|||
|
|
- MCP 方向:https://github.com/totec448-spec/chat-on-steroids 、https://github.com/fb0sh/MCPod
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 11. 结合我自己的 NewAPI 实战架构再理解一遍
|
|||
|
|
|
|||
|
|
> 参照:《NewAPI搭建与上线完整实战指南》(F:\AI\Obsidian\工具相关\)
|
|||
|
|
> 实战环境:腾讯云新加坡 2C2G + Xray 共存,域名 api.trivoo.website
|
|||
|
|
|
|||
|
|
已上线的栈,按三层模型对号入座:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Cline / Cherry Studio
|
|||
|
|
│ HTTPS 443
|
|||
|
|
▼
|
|||
|
|
Nginx 反向代理 ← 「字面意义的反代」:转发 + TLS + 隐藏后端(指南第五阶段)
|
|||
|
|
│ 127.0.0.1:3000
|
|||
|
|
▼
|
|||
|
|
New API 容器 ← 第2层 网关分发:渠道/令牌/计费/负载均衡
|
|||
|
|
├─→ 渠道1:DeepSeek 官方 API (正规军,按量付费)
|
|||
|
|
└─→ 渠道2:apikey.fan ← 第3层 商业中转站(背后是站长搭的第1层账号池)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
四条结论:
|
|||
|
|
|
|||
|
|
1. **同一套架构里同时存在两种"反代"**:Nginx(字面意义的反向代理)+ New API(广义的转发/中继,源码模块就叫 relay)。而 AI 圈黑话里的"反代"特指**第 1 层:账号→API 协议转换**。
|
|||
|
|
2. **反代是概念,CPA 是软件**。"反代和 CPA 是不是一回事" ≈ "数据库和 MySQL 是不是一回事"。CPA 是黑话意义上"反代"的最主流实现之一。
|
|||
|
|
3. 现状 = 自建第 2 层(new-api)+ 买第 3 层(apikey.fan 渠道)。补上 CPA(第 1 层)即完整闭环:**账号 → CPA → 挂成 new-api 渠道 → api.trivoo.website 统一分发**。
|
|||
|
|
4. 新加坡服务器本身就是外国 IP,CPA 放这台机器上出站不需要梯子;唯一要浏览器的是 OAuth 授权那一步,常规做法是本地登录后把 `auths/*.json` 凭证传上服务器(或用支持远程 OAuth 的管理面板)。
|
|||
|
|
|
|||
|
|
一个佐证细节:apikey.fan 正好出现在 CPA 和 sub2api 官方 README 的赞助商列表里("价格低至官方原价的 7%")——第 3 层中转站的本质一眼见底。
|