claude2api
basketikun/claude2api加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你手上有一个 Claude.ai 账号,订阅费按月付。但你手上有三个东西想用:一个是写着 openai.ChatCompletion.create() 的 Python 脚本,一个是公司规定必须走 Anthropic 协议的 Claude Code CLI,还有一个是只认 OpenAI /v1/responses 的 Codex CLI。
正常情况下你得放弃其中两个。原因很简单:Claude.ai 给你的是网页,不是 API。它没有给你 API Key,没有给你 endpoint,只有一个登录 Cookie。
Claude2API 做的事情,可以概括成一句话:它站在你的账号和你的代码中间,把网页里那条 HTTP 链路原样搬出来,再在外面套一层 OpenAI / Anthropic 的标准接口外壳。
它还额外干了两件事:把多个 Claude.ai 账号做成一个"号池",请求失败自动换号重试;再把 claude.ai 官网本身镜像出来,你可以在自己的域名下访问一个看起来像 Claude 的页面。

作者 basketikun 是一个把"协议逆向"做成系列的开发者。他的 GitHub 主页上排着三个同类项目:chatgpt2api(6.8k star)、infinite-canvas(9.3k star)、以及本文的主角 claude2api。这个系列共享同一套技术思路:不去接官方 API(那要钱、要审核),而是复用已经付费的网页订阅,把网页内部用的接口逆向出来,用自己的网关重新封装。
这个思路在开源社区有个通俗名字,叫 "2api"(从 A 到 API)。它填补了一个真实存在的空白:很多人有订阅但没有 API 额度,两者之间缺一座桥。
把 Claude2API 想成一台自动售货机的改造工程。
Claude.ai 原本是一台只能投币、只能按按钮的机器。你不能直接对着它说"给我 JSON 格式的输出"。Claude2API 做的事情是:
internal/adapter/)负责把 OpenAI 的 tools/tool_calls、Anthropic 的 tool_use、Responses 的 function_call 这三套互不兼容的调用协议,翻译成 Claude.ai 能懂的网页请求格式,再把返回翻译回去。handler.ServeMainProxy 把 claude.ai 的页面原样反代出来,Cookie、浏览器指纹(uTLS 模拟 TLS 指纹)自动维护。
路由表(internal/router/router.go)写得很清楚:
| 端点 | 协议 | 典型接入方 |
|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | OpenAI SDK、绝大多数第三方客户端 |
POST /v1/responses | OpenAI Responses | Codex CLI |
POST /v1/messages | Anthropic Messages | Anthropic SDK、Claude Code |
外加 GET /v1/models 返回当前可用模型,模型名带 -thinking 后缀即开启扩展思考。
internal/service/dispatcher.go 负责选号:请求进来后从池里挑一个可用账号,失败时按配置的 retry_count 换号重试。后台支持批量导入 sessionKey(每行一个),导入后自动回查账号的邮箱和组织信息,并有定期巡检(默认 6 小时一次)与失效清理。
这是一个容易踩坑的细节:max_history_length 默认 12000,超过阈值时上游不再接受直接提交,而是自动转成文本附件再发。这解决了"提示词太长直接提交报错"的经典问题。
delete_chat: true(默认开启),请求完成后自动删除 Claude.ai 上游会话,避免账号侧的会话堆积。这既是稳定性考虑,也是降低留痕的做法。
调用日志记录:调用时间、接口、模型、使用账号、响应状态、输入输出 Token、总耗时、首字延迟和 TPS。这个指标组合对做自建网关的人非常实用——你能直接看出是哪个账号慢、哪条链路首字延迟高。日志支持批量删除和"仅保留最近 N 条"。

路线 A:Docker Compose(推荐)
git clone https://github.com/basketikun/claude2api.git
cd claude2api
cp config.example.yaml config.yaml
docker compose up -d
镜像 ghcr.io/basketikun/claude2api:latest 由 GitHub Actions 在打 tag 时自动构建,同时发布 linux/amd64 和 linux/arm64,Mac 的 Apple Silicon 也能原生跑。服务监听 0.0.0.0:8787。
路线 B:源码编译
需要 Go 1.25+(Dockerfile 用的是 golang:1.25-alpine),go build -o claude2api ./cmd/server 即可,运行时只需 config.yaml 和 data/ 目录。
首次启动后的三步:
claude2api 登录 → 立刻改密码(admin_password 默认值是明文写在示例配置里的)。config.yaml)proxy: "" # 出口代理(国内直连不上 claude.ai 时必填)
web_host: 0.0.0.0
admin_password: claude2api # 管理密码,务必修改
status_check_seconds: 21600 # 账号巡检间隔
delete_chat: true # 自动清理上游会话
max_history_length: 12000 # 超长上下文转附件阈值
remove_invalid_account: false
detailed_api_log: true # 记录完整请求与输出
后端用 SQLite(GORM + glebarez/sqlite 纯 Go 驱动,WAL 模式,单连接串行写),数据全在 data/app.db,无需外部数据库。

这一节比前面的功能列表更重要。
项目 README 顶部有一个醒目的 WARNING 块,逐条列出:仅供个人学习与非商业技术交流;严禁商业用途、批量操作、规模化调用;严禁倒卖服务;使用者自行承担账号封禁与法律责任。这不是客套话,是这个项目的真实风险边界。
Claude2API 的技术本质是绕过 Claude.ai 的官方 API 授权体系,把付费订阅的网页能力转售为 API。这触碰了 Anthropic 服务条款,也触碰了"网页订阅 ≠ API 授权"这条基本界线。企业内网部署、二次分发、多租户售卖,性质完全不同。
项目自己在免责声明里写了:"上游接口、风控策略及页面结构的变化都可能导致部分功能失效"。这是所有 2api 项目的通病——逆向出来的协议没有兼容性承诺。Claude.ai 改一次前端 JS,某个字段名变了,你的账号池可能集体返回异常。维护者需要持续跟版本,这也是为什么它至今还在高频提交(最近一次推送 2026-10-29)。
批量导入账号 + 自动轮询 + 出口代理,这三个特征组合在一起,在风控侧就是非常明显的"自动化滥用"信号。作者反复强调"请勿使用重要账号、常用账号或高价值账号进行测试",这句话是字面意义上的风险提示。
翻 go.mod 会发现一个明显异常:module 名是 github.com/prasenjeet-symon/ogcode,依赖里还挂着 tree-sitter(十几种语言的语法解析器)、go-fitz(PDF 渲染)、goose(数据库迁移)、modelcontextprotocol/go-sdk、以及一个 replace 指向 ./controlplane 的本地模块——但仓库里根本没有 controlplane 目录。
而源码里的 import 全部是 claude2api/internal/...,和 go.mod 的 module 名完全对不上。
结论很清楚:这个仓库是从 prasenjeet-symon/ogcode 这个模板改造而来,但没有清理 go.mod。这带来两个实际后果:一是 go mod download 会拉一堆用不上的依赖(包括 tree-sitter 这种编译负担很大的 cgo 包),拖慢构建、增加镜像体积;二是 module 路径与 import 路径不一致,说明项目无法用标准的 go build ./... 直接构建,作者大概率是靠 IDE 或手工改过 go.mod 才跑起来的。
这不是小瑕疵,它说明项目的构建流程缺乏规范性。对想二次开发的人,第一件事就是先把 go.mod 收拾干净。
admin_password 默认值 claude2api 写在示例配置里,任何人 clone 下来不改就是裸奔;管理后台路由只靠一个明文密码做 Authorization 头校验(AdminCredentialValid 是直接字符串相等比较)。detailed_api_log: true 默认开启,会把完整的请求与响应内容写进数据库——你的对话历史、你的提示词、可能夹带的敏感信息都在里面。MaxAPIBodyBytes),单端口同时承载主站和 artifact 沙箱。代码里是有测试的(adapter 下有 api_test.go、image_test.go、tagged_test.go、sdk_integration_test.go,service/claude_test.go,handler/proxy_test.go),这点比多数同类项目好。但 GitHub Actions 只有一条构建镜像的流水线,没有跑 go test 的步骤,也没有覆盖率报告、lint、依赖安全扫描。
Claude2API 单独看是个小工具(163 star、64 fork),放进趋势里看则是一块清晰的拼图。
第一,它验证了"订阅即额度"的二次分发需求真实存在。 这个项目 2026-08-31 建仓,两个月涨到 163 star,64 个 fork——fork 数是 star 的四成。这个比例很说明问题:大部分人不是来"用"的,是来"改"的,是想在自己业务里塞一个 Claude 后端。
第二,它是"MCP 之前"的代理层实践。 官方 MCP 生态把工具接入标准化了,但模型接入本身仍割裂——不同客户端认不同协议。这类"多协议统一网关"(同期还有 Sub2API、New API、one-api 一类项目)正在成为 Agent 基础设施的标配层。
第三,它揭示了闭源模型时代的一个结构性矛盾。 官方 API 按 token 计费,订阅按月计费,两套定价、两种速率限制、两套风控。2api 项目做的不是技术创新,而是定价套利——把固定月费的订阅转换成按量计费的 API。这是灰色地带的产物,也是所有模型厂商定价策略必须回应的信号。
第四,技术栈的选择印证了工程现实。 Go + 单文件静态前端 + SQLite + 单端口部署,镜像压到最小、启动毫秒级、没有数据库依赖。作者是写生产工具的人,不是写 demo 的人。

internal/adapter/ 里把三套协议互转的实现,配合 16k 行的单文件前端和 47KB 的 app.js,能完整看到"一个网关产品"是怎么长出来的。
| 维度 | 结论 |
|---|---|
| 语言 / 框架 | Go 1.25+ / Gin |
| 前端 | 原生 HTML+CSS+JS(无构建链),go:embed 内嵌 |
| 存储 | SQLite(WAL,gorm + glebarez/sqlite 纯 Go 驱动) |
| 网络层 | github.com/refraction-networking/uTLS 模拟浏览器 TLS 指纹 |
| 部署 | Dockerfile 多阶段 + docker-compose,GHCR 多架构镜像 |
| CI | GitHub Actions tag 触发构建,未包含测试 |
| 许可 | MIT |
| 规模 | 163 star / 64 fork / 3 open issues,Go 为主,仓库约 108 KB |
免责声明:本报告仅作技术分析。项目作者已明确声明该项目涉及对 Claude.ai 的逆向研究,仅供个人学习与技术研究,禁止商业用途与规模化调用。是否使用、用在何处,风险与责任完全由使用者自行承担。