# anyrouter2proxy
**Repository Path**: lankii/anyrouter2proxy
## Basic Information
- **Project Name**: anyrouter2proxy
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-07-05
- **Last Updated**: 2026-07-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# LLM API Protocol Converter Proxy
> 在 OpenAI 和 Anthropic API 协议之间进行双向转换的代理服务集合,通过 Node.js SDK 中转绕过 WAF 检测




---
## 什么是 AnyRouter.top
**AnyRouter.top** 是一个提供 API 转发服务的中转站网站。
- **用途**: 帮助国内用户绕过网络限制,直接通过本地终端调用 Claude 的 API
- **现状**: 常被社区用于低成本使用 Claude Code 功能
### 免费体验
- **体验地址**: http://115.190.165.156:3000/
- **体验 Key**: `sk-eKU0nC4uERD0OVirefq6VgcD2FCwn7t7lvqy84c9xIQrlD1S` (100 美金用完即止)
### 推荐站点
| 站点 | 类型 | 特点 |
|------|------|------|
| [AnyRouter.top](https://anyrouter.top/register?aff=XYGH) | 公益站 | 每天登录送 25 美金 |
| [AgentRouter](https://agentrouter.org/register?aff=u6Z4) | 公益站 | 可抽奖、登录送 25 美金 |
| [CodeMirror](https://api.codemirror.codes/register?aff=q9ke) | 非公益 | 邀请新户送积分 |
| [GemAI](https://api.gemai.cc/register?aff=ND9Y) | 非公益 | 有 gemini-3-pro-image-preview |
| [GeekNow](https://go.geeknow.top/register?aff=EdIn) | 非公益 | 有 gemini-3-pro-image-preview、gpt5.2 |
| [JXinCM](https://api.jxincm.cn/register?aff=SeEB) | 付费 | 支持 Sora2 |
| [CPass](https://api.cpass.cc/register?aff=vkvc) | 非公益 | 邀请新户送积分 |
| [GoGoGo公益站](https://api.chengtx.vip/register?aff=r4UI) | 公益站 | 新户送100,每天可签到,gemini-3-pro/flash-preview |
| [hotaruapi](https://api.hotaruapi.top/register?aff=vOPH) | 非公益 | 新户送20,每天可签到 |
---
## 项目介绍
本项目包含多个代理服务和客户端示例,实现了 OpenAI 和 Anthropic API 协议的互相转换。通过 Node.js SDK 中转绕过 WAF 检测,实现 API 接口和 Claude Code 的便捷使用。
### 核心特性
- **Node.js SDK 中转**: 使用官方 Anthropic SDK 绕过 WAF/TLS 指纹检测
- **Claude Code 请求伪装**: 自动注入 Claude Code CLI 完整请求特征,绕过高级模型负载限制
- **双向协议转换**: OpenAI ↔ Anthropic 协议互相转换
- **Codex Responses API 代理**: 支持 Codex `wire_api = "responses"`,直连 `https://anyrouter.top/v1`
- **客户端头部透传**: 完整透传客户端请求头到上游,支持 Claude Code 等工具直连
- **透传代理模式**: 客户端提供 API Key,服务端只做协议转换
- **多 Key 负载均衡**: 支持逗号分隔的多个 Key 自动轮询
- **Docker 一键部署**: Node.js、Anthropic、OpenAI、Codex 代理容器化编排
---
## 调用链路图
```
┌─────────────────────────────────────────────────────────────────────────────────────────────┐
│ AnyRouter2Proxy 调用链路总览 │
├─────────────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ Claude / Anthropic 模式(需要 Node.js 层处理 WAF、TLS 指纹和 Claude Code 请求伪装) │
│ │
│ ┌──────────────┐ ┌─────────────────────┐ ┌────────────────┐ ┌──────────────┐ │
│ │ OpenAI 客户端 │ ──► │ anyrouter2openai.py │ ──► │ node-proxy │ ──► │ AnyRouter.top │ │
│ │ Bearer Key │ │ Python :9999 │ │ Node.js :4000 │ │ Claude API │ │
│ │ Chat API │ │ OpenAI→Anthropic │ │ WAF / TLS / SDK │ │ │ │
│ └──────────────┘ └─────────────────────┘ └────────────────┘ └──────────────┘ │
│ │
│ ┌──────────────┐ ┌─────────────────────┐ ┌────────────────┐ ┌──────────────┐ │
│ │ Anthropic │ ──► │ anyrouter2anthropic │ ──► │ node-proxy │ ──► │ AnyRouter.top │ │
│ │ 客户端 │ │ Python :9998 │ │ Node.js :4000 │ │ Claude API │ │
│ │ x-api-key │ │ 头部透传 │ │ Codex/Claude │ │ │ │
│ └──────────────┘ └─────────────────────┘ └────────────────┘ └──────────────┘ │
│ │
│ Anthropic AgentRouter 直连模式(不经过 Node.js WAF 层) │
│ │
│ ┌──────────────┐ ┌──────────────────────────────┐ ┌──────────────┐ │
│ │ Anthropic │ ──► │ anyrouter2anthropic_ │ ─────────────────► │ AnyRouter.top │ │
│ │ 客户端 │ │ agentrouter.py Python :9997 │ 直连 │ Claude API │ │
│ └──────────────┘ └──────────────────────────────┘ └──────────────┘ │
│ │
│ Codex / OpenAI Responses 模式(直连 AnyRouter OpenAI 兼容 /v1,不经过 Node.js 层) │
│ │
│ ┌──────────────┐ ┌──────────────────────────────┐ ┌──────────────┐ │
│ │ Codex Desktop │ ──► │ codex_anyrouter_proxy.py │ ─────────────────► │ AnyRouter.top │ │
│ │ wire_api= │ │ Python :9996 │ /v1/responses │ OpenAI /v1 │ │
│ │ responses │ │ Codex 请求头/metadata 兼容 │ │ gpt-5.5 │ │
│ └──────────────┘ └──────────────────────────────┘ └──────────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────────────────────┐ ┌──────────────┐ │
│ │ CherryStudio │ ──► │ codex_anyrouter_proxy.py │ ─────────────────► │ AnyRouter.top │ │
│ │ sub2api 等 │ │ Python :9996 │ /v1/responses │ OpenAI /v1 │ │
│ │ OpenAI 兼容 │ │ /chat/completions→responses │ │ gpt-5.5 │ │
│ └──────────────┘ └──────────────────────────────┘ └──────────────┘ │
│ │
│ Web 管理端(随 Codex 代理容器一起提供) │
│ │
│ ┌──────────────┐ ┌──────────────────────────────┐ ┌────────────────────────────┐ │
│ │ 浏览器 │ ──► │ http://host:9996/admin │ ──► │ /app/config/.env │ │
│ │ 管理员登录 │ │ 管理上游 Key、代理 Key、模型 │ │ 宿主机 .env 文件持久化 │ │
│ └──────────────┘ └──────────────────────────────┘ └────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────┘
```
---
## 技术架构
| 技术 | 版本 | 用途 |
|------|------|------|
| Python | 3.11+ | 代理服务主语言 |
| Node.js | 20+ | SDK 中转层(绕过 WAF) |
| FastAPI | 0.116+ | Web 框架 |
| httpx | 0.28+ | 异步 HTTP 客户端 |
| @anthropic-ai/sdk | 0.71+ | 官方 Anthropic Node.js SDK |
| Uvicorn | 0.35+ | ASGI 服务器 |
---
## 安装说明
### 环境要求
- Python 3.11+
- Node.js 20+
- pip / npm
### 安装依赖
```bash
# Python 依赖
pip install -r requirements.txt
# Node.js 依赖
cd node-proxy && npm install && cd ..
```
---
## 使用说明
### 启动服务
```bash
# 1. 启动 Node.js 代理(端口 4000,必须最先启动)
cd node-proxy && npm start &
# 2. 启动 Anthropic 协议代理(端口 9998)
python anyrouter2anthropic.py
# 3. 启动 OpenAI 协议代理(端口 9999)
python anyrouter2openai.py
# 4. 启动 Codex Responses API 代理(端口 9996,直连 anyrouter.top/v1)
python codex_anyrouter_proxy.py
```
### Codex 代理调用
先在 `.env` 中配置 AnyRouter Key:
```bash
ANYROUTER_API_KEY=sk-your-anyrouter-api-key
PROXY_API_KEY=sk-proxy-your-local-client-key
ANYROUTER_OPENAI_BASE_URL=https://anyrouter.top/v1
CODEX_PROXY_MODEL=gpt-5.5
ADMIN_USERNAME=admin
ADMIN_PASSWORD=changeme
```
然后将 Codex 配置里的 `base_url` 指向本地代理:
```toml
model_provider = "custom"
model = "gpt-5.5"
model_reasoning_effort = "medium"
[model_providers.custom]
name = "custom"
wire_api = "responses"
requires_openai_auth = true
base_url = "http://127.0.0.1:9996/v1"
```
Web 管理端地址:
```text
http://127.0.0.1:9996/admin
```
默认账号是 `admin / changeme`。首次进入后建议立刻在管理端修改密码;如果要暴露到公网,请务必设置强密码和 `ADMIN_TOKEN_SECRET`。
CherryStudio、sub2api 等第三方平台调用时填写:
```text
Base URL: http://你的服务器:9996/v1
API Key: 管理端“第三方平台接入”里生成的代理 API Key
Model: gpt-5.5
```
如果第三方平台使用 `/v1/chat/completions`,Codex 代理会在模型为 `gpt-5.5` 时自动转成上游 `/v1/responses` 请求,再把响应转换回 Chat Completions 格式。
### OpenAI 协议调用
```python
import openai
client = openai.OpenAI(
api_key="sk-your-anyrouter-api-key",
base_url="http://localhost:9999/v1"
)
response = client.chat.completions.create(
model="claude-haiku-4-5-20251001",
messages=[{"role": "user", "content": "你好"}],
stream=True
)
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
```
### 多 Key 负载均衡
```python
import openai
# 多个 Key 用逗号分隔,代理会自动轮询
client = openai.OpenAI(
api_key="sk-key1,sk-key2,sk-key3",
base_url="http://localhost:9999/v1"
)
```
### Anthropic 协议调用
```python
import anthropic
client = anthropic.Anthropic(
api_key="sk-your-anyrouter-api-key",
base_url="http://localhost:9998"
)
response = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[{"role": "user", "content": "你好"}]
)
print(response.content[0].text)
```
---
### web管理
访问地址http://127.0.0.1:9996/admin

## 配置说明
### 环境变量
复制 `.env.example` 为 `.env` 并按需修改:
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `NODE_PROXY_PORT` | `4000` | Node.js 代理端口 |
| `NODE_PROXY_URL` | `http://127.0.0.1:4000` | Python 代理连接 Node.js 的地址 |
| `ANYROUTER_BASE_URL` | `https://anyrouter.top` | 上游服务地址(Node.js 使用) |
| `PORT` | `9998` | Anthropic 代理端口 |
| `OPENAI_PROXY_PORT` | `9999` | OpenAI 代理端口 |
| `CODEX_PROXY_PORT` | `9996` | Codex Responses API 代理端口 |
| `HOST` | `0.0.0.0` | 绑定地址 |
| `HTTP_TIMEOUT` | `120` | HTTP 请求超时时间(秒) |
| `DEFAULT_MAX_TOKENS` | `8192` | 默认最大 tokens |
| `FORCE_NON_STREAM` | `false` | 强制非流式模式(OpenAI 代理) |
| `ANYROUTER_OPENAI_BASE_URL` | `https://anyrouter.top/v1` | Codex 代理转发的 OpenAI 兼容上游 |
| `ANYROUTER_API_KEY` | 空 | Codex 代理服务端使用的 AnyRouter Key,支持逗号分隔多个 key |
| `PROXY_API_KEY` | 空 | 对外提供给第三方平台的本地代理 Key,支持逗号分隔多个 key |
| `CODEX_PROXY_MODEL` | `gpt-5.5` | Codex 请求未传 model 时使用的默认模型 |
| `CODEX_PROXY_FORCE_MODEL` | `false` | 是否强制覆盖请求中的 model |
| `ADMIN_USERNAME` | `admin` | Codex Web 管理端用户名 |
| `ADMIN_PASSWORD` | `changeme` | Codex Web 管理端密码 |
| `ADMIN_TOKEN_SECRET` | 随机生成 | 管理端登录 token 签名密钥 |
| `ADMIN_TOKEN_TTL_SECONDS` | `86400` | 管理端登录有效期(秒) |
Anthropic/OpenAI 转 Anthropic 的透传模式不需要在服务端配置 API Key,客户端必须在请求头中提供。Codex 代理推荐在服务端配置 `ANYROUTER_API_KEY`。
---
## Docker 部署
### 镜像构建
```bash
# 构建 Codex 代理镜像(包含 admin-ui 管理端,Dockerfile 会自动执行前端构建)
docker build -t wwwzhouhui569/anyrouter2proxy:codex-local .
# 构建通用 Python 代理镜像(可选,用于 Anthropic/OpenAI 代理)
docker build -t wwwzhouhui569/anyrouter2proxy:latest .
# 构建 Node.js 代理镜像
docker build -t wwwzhouhui569/anyrouter-node-proxy:latest ./node-proxy
```
构建 Codex 镜像时不需要手动执行 `cd admin-ui && npm install && npm run build`,多阶段 Dockerfile 会在镜像构建过程中自动完成管理端编译。
### Docker Compose 部署(推荐)
```bash
# 首次部署先创建宿主机 .env 文件,避免 Docker 将不存在的文件挂载成目录
mkdir -p /home/app/anyrouter2proxy
touch /home/app/anyrouter2proxy/.env
chmod 600 /home/app/anyrouter2proxy/.env
# 只打包并启动 Codex 代理和管理端(端口 9996)
docker compose up -d --build codex-proxy
# 如果已经先执行过 docker build,也可以直接启动
docker compose up -d codex-proxy
# 开发环境:本地构建并启动全部服务
docker compose -f docker-compose-dev.yml up -d --build
# 启动全部服务
docker compose up -d
# 查看状态
docker compose ps
# 查看日志
docker compose logs -f
# 停止服务
docker compose down
```
### Docker Run 单独运行
需要先创建 Docker 网络,确保相关容器互通:
```bash
# 创建网络
docker network create anyrouter-proxy
# 1. 启动 Node.js 代理(必须最先启动)
docker run -d \
--name anyrouter-node-proxy \
--network anyrouter-proxy \
-p 4000:4000 \
-e NODE_PROXY_PORT=4000 \
-e ANYROUTER_BASE_URL=https://anyrouter.top \
anyrouter-node-proxy:latest
# 2. 启动 Anthropic 代理
docker run -d \
--name anyrouter-anthropic-proxy \
--network anyrouter-proxy \
-p 9998:9998 \
-e RUN_MODE=anthropic \
-e NODE_PROXY_URL=http://anyrouter-node-proxy:4000 \
-e PORT=9998 \
anyrouter2proxy:latest
# 3. 启动 OpenAI 代理
docker run -d \
--name anyrouter-openai-proxy \
--network anyrouter-proxy \
-p 9999:9999 \
-e RUN_MODE=openai \
-e NODE_PROXY_URL=http://anyrouter-node-proxy:4000 \
-e OPENAI_PROXY_PORT=9999 \
anyrouter2proxy:latest
# 4. 启动 Codex Responses API 代理
docker run -d \
--name anyrouter-codex-proxy \
--network anyrouter-proxy \
-p 9996:9996 \
-e RUN_MODE=codex \
-e CODEX_PROXY_PORT=9996 \
-e ANYROUTER_OPENAI_BASE_URL=https://anyrouter.top/v1 \
-e ANYROUTER_API_KEY=sk-your-anyrouter-api-key \
-e PROXY_API_KEY=sk-proxy-your-local-client-key \
-e CODEX_PROXY_MODEL=gpt-5.5 \
-e ADMIN_USERNAME=admin \
-e ADMIN_PASSWORD=change-this-password \
-e ADMIN_TOKEN_SECRET=change-this-random-secret \
-v /home/app/anyrouter2proxy/.env:/app/config/.env \
wwwzhouhui569/anyrouter2proxy:codex-local
```
### 验证部署
```bash
# 检查 Node.js 代理
curl http://localhost:4000/health
# 检查 Anthropic 代理(含 Node.js 状态)
curl http://localhost:9998/health
# 检查 OpenAI 代理(含 Node.js 状态)
curl http://localhost:9999/health
# 检查 Codex Responses API 代理
curl http://localhost:9996/health
# 测试调用
curl -X POST http://localhost:9999/v1/chat/completions \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{"model": "claude-haiku-4-5-20251001", "messages": [{"role": "user", "content": "你好"}]}'
```
### 推送镜像
```bash
# Codex 镜像已由 docker build 直接打好标签
# docker build -t wwwzhouhui569/anyrouter2proxy:codex-local .
# 标记其他镜像
docker tag anyrouter2proxy:latest wwwzhouhui569/anyrouter2proxy:latest
docker tag anyrouter-node-proxy:latest wwwzhouhui569/anyrouter-node-proxy:latest
# 推送到 Docker Hub
docker push wwwzhouhui569/anyrouter2proxy:codex-local
docker push wwwzhouhui569/anyrouter2proxy:latest
docker push wwwzhouhui569/anyrouter-node-proxy:latest
```
---
## API 端点
### AgentRouter 直连代理 (端口 9997)
| 端点 | 方法 | 说明 |
|------|------|------|
| `/v1/messages` | POST | Anthropic Messages API(直连上游) |
| `/v1/models` | GET | 列出可用模型 |
| `/health` | GET | 健康检查 |
| `/stats` | GET | 负载均衡统计 |
| `/` | GET | 服务信息 |
### Node.js 代理 (端口 4000)
| 端点 | 方法 | 说明 |
|------|------|------|
| `/v1/messages` | POST | Anthropic Messages API(含 WAF 处理) |
| `/health` | GET | 健康检查 |
| `/` | GET | 服务信息 |
### Anthropic 代理 (端口 9998)
| 端点 | 方法 | 说明 |
|------|------|------|
| `/v1/messages` | POST | Anthropic Messages API |
| `/v1/models` | GET | 列出可用模型 |
| `/health` | GET | 健康检查(含 Node.js 状态) |
| `/` | GET | 服务信息 |
### OpenAI 代理 (端口 9999)
| 端点 | 方法 | 说明 |
|------|------|------|
| `/v1/chat/completions` | POST | OpenAI Chat Completions API |
| `/v1/models` | GET | 列出可用模型 |
| `/health` | GET | 健康检查(含 Node.js 状态) |
| `/` | GET | 服务信息 |
### Codex Responses API 代理 (端口 9996)
| 端点 | 方法 | 说明 |
|------|------|------|
| `/v1/responses` | POST | Codex `wire_api = "responses"` 主接口 |
| `/v1/models` | GET | 透传 AnyRouter 模型列表 |
| `/v1/chat/completions` | POST | OpenAI Chat Completions API;`gpt-5.5` 自动桥接到 `/v1/responses` |
| `/v1/{path}` | 多方法 | 其它 OpenAI 兼容端点透传 |
| `/admin` | GET | Web 管理端 |
| `/admin/api/config` | GET | 读取当前配置(需登录) |
| `/admin/api/keys` | GET/POST/PUT | 管理 AnyRouter API Keys(需登录) |
| `/admin/api/keys/{index}` | DELETE | 删除指定 AnyRouter API Key(需登录) |
| `/admin/api/proxy-keys` | GET/POST/PUT | 管理对外提供的本地代理 Key(需登录) |
| `/admin/api/proxy-keys/generate` | POST | 生成新的本地代理 Key(需登录) |
| `/admin/api/proxy-keys/{index}` | DELETE | 删除指定本地代理 Key(需登录) |
| `/admin/api/settings` | PUT | 修改上游地址、默认模型、强制模型开关(需登录) |
| `/admin/api/password` | PUT | 修改管理端密码(需登录) |
| `/admin/api/reload` | POST | 从 `.env` 重载配置(需登录) |
| `/health` | GET | 健康检查 |
| `/` | GET | 服务信息 |
---
## 认证方式
### OpenAI 代理 (9999)
```http
Authorization: Bearer sk-your-api-key
# 多 Key 负载均衡
Authorization: Bearer sk-key1,sk-key2,sk-key3
```
### Anthropic 代理 (9998)
```http
x-api-key: sk-your-api-key
# 或
Authorization: Bearer sk-your-api-key
# 多 Key 负载均衡
x-api-key: sk-key1,sk-key2,sk-key3
```
### Codex 代理 (9996)
推荐在 `.env` 或 Docker 环境变量中设置:
```bash
ANYROUTER_API_KEY=sk-your-api-key
PROXY_API_KEY=sk-proxy-your-local-client-key
```
`ANYROUTER_API_KEY` 是服务端调用 AnyRouter 的上游 Key,可配置多个做轮询。`PROXY_API_KEY` 是你对外提供给 CherryStudio、sub2api 等第三方平台的本地代理 Key。
第三方平台请求本代理时使用:
```http
Authorization: Bearer sk-proxy-your-local-client-key
```
如果未设置 `PROXY_API_KEY`,代理不会校验本地访问 Key;如果未设置 `ANYROUTER_API_KEY`,代理会退回透传客户端的 `Authorization` 或 `x-api-key` 作为上游 Key。
---
## 支持的模型
| 模型名称 | 说明 |
|---------|------|
| `gpt-5.5` | Codex Responses API 代理默认模型 |
| `claude-haiku-4-5-20251001` | Claude Haiku 4.5 |
| `claude-3-5-haiku-20241022` | Claude 3.5 Haiku |
| `claude-3-5-sonnet-20241022` | Claude 3.5 Sonnet |
| `claude-3-7-sonnet-20250219` | Claude 3.7 Sonnet |
| `claude-sonnet-4-20250514` | Claude Sonnet 4 |
| `claude-sonnet-4-5-20250929` | Claude Sonnet 4.5 |
| `claude-sonnet-4-6` | Claude Sonnet 4.6 |
| `claude-opus-4-5-20251101` | Claude Opus 4.5 |
| `claude-opus-4-6` | Claude Opus 4.6 |
---
## 项目结构
```
anyrouter2proxy/
├── anyrouter2anthropic.py # Anthropic 协议代理 - Node.js 中转模式 (端口 9998)
├── anyrouter2openai.py # OpenAI 协议代理 - Node.js 中转模式 (端口 9999)
├── anyrouter2anthropic_agentrouter.py # Anthropic 协议代理 - 直连模式 (端口 9997)
├── codex_anyrouter_proxy.py # Codex Responses API 代理 - 直连 anyrouter.top/v1 (端口 9996)
├── node-proxy/ # Node.js 代理层(WAF 绕过 + Claude Code 伪装)
│ ├── server.mjs # Node.js 代理服务 (端口 4000)
│ ├── package.json # Node.js 依赖配置
│ └── Dockerfile # Node.js 镜像构建文件
├── Dockerfile # Python 代理镜像构建文件
├── docker-compose.yml # 生产环境 Docker Compose
├── docker-compose-dev.yml # 开发环境 Docker Compose
├── .env.example # 环境变量示例
├── .env.agentrouter # AgentRouter 直连模式配置
├── requirements.txt # Python 依赖
├── test_openai_proxy.py # OpenAI 代理测试
├── test_agentrouter_proxy.py # Anthropic 代理测试
│
├── # LiteLLM 方案
├── anthropic2openai_proxy.py # Anthropic → OpenAI 代理 (端口 8088)
├── conf_anthropic20251212.yaml # LiteLLM 配置文件
├── openai_client.py # OpenAI SDK 客户端示例
├── anthropic_client.py # Anthropic SDK 客户端示例
│
└── README.md
```
---
## 客户端配置
### Claude Code
**方式一:通过 Node.js 中转代理(推荐,可使用高级模型)**
```json
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "sk-your-anyrouter-api-key",
"ANTHROPIC_BASE_URL": "http://localhost:9998",
"ANTHROPIC_MODEL": "claude-sonnet-4-6"
}
}
```
**方式二:直连 AnyRouter(需配合 Claude Code 环境变量)**
```json
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "sk-your-anyrouter-api-key",
"ANTHROPIC_BASE_URL": "https://anyrouter.top",
"ANTHROPIC_MODEL": "claude-opus-4-6",
"CLAUDE_CODE_ATTRIBUTION_HEADER": "0",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
}
}
```
> **注意**:直连方式仅适用于 Claude Code 等 CC 工具,普通 API 客户端无法添加这两个环境变量。推荐使用方式一通过代理调用,代理会自动注入所有必要的 Claude Code 请求特征。
### Cherry Studio
1. 添加新的 API 提供商
2. API 地址:`http://localhost:9999/v1`(OpenAI)或 `http://localhost:9998`(Anthropic)
3. API Key:填入你的 anyrouter.top API Key
4. 选择模型并开始使用
---
## 常见问题
Q: 401 Unauthorized 错误?
A: 确保请求头包含有效的 API Key。OpenAI 协议使用 `Authorization: Bearer sk-xxx`,Anthropic 协议使用 `x-api-key: sk-xxx`。
Q: 服务无法访问?
A: 检查服务状态:`docker compose ps` 和 `docker compose logs`。确保 Node.js 代理已启动。
Q: health 接口显示 node_status 为 unreachable?
A: Node.js 代理未启动或网络不通。检查 node-proxy 容器是否运行:`docker compose logs node-proxy`。
Q: 如何使用多个 API Key?
A: 在客户端将多个 Key 用逗号分隔,如 `sk-key1,sk-key2,sk-key3`,代理会自动轮询。
Q: 遇到 WAF 拦截返回 HTML 内容?
A: Node.js 代理内置了 WAF 自动解决机制。确保请求经过 Node.js 代理(4000 端口),而不是直连上游。
Q: Docker 容器启动顺序?
A: Node.js 代理必须最先启动。使用 Docker Compose 时已通过 `depends_on` + `service_healthy` 自动保证启动顺序。
Q: 高级模型(sonnet-4-6、opus-4-6)报"负载已达上限"?
A: 这是上游服务对非 Claude Code 请求的限制。使用 Node.js 中转模式(端口 9998/9999)可自动注入 Claude Code 请求特征绕过限制。直连模式(端口 9997)无此能力。
Q: "invalid claude code request" 错误?
A: 上游检测到 Claude Code 的 User-Agent 但请求体不符合 Claude Code 特征。请确保使用 Node.js 中转模式,代理会自动注入完整的 Claude Code 系统提示、thinking 字段和 SDK 指纹头。
---
## 版本记录
### v0.0.3 (2026-06-20)
**新增功能:Codex Responses API 代理 & Web 管理端**
- **新增 Codex Responses API 代理**:新增 `codex_anyrouter_proxy.py`,默认端口 `9996`,支持 Codex `wire_api = "responses"` 通过 `https://anyrouter.top/v1` 调用 `gpt-5.5`
- **新增 OpenAI Chat Completions 桥接**:第三方平台请求 `/v1/chat/completions` 且模型为 `gpt-5.5` 时,自动转换为上游 `/v1/responses`,再转换回 OpenAI Chat Completions 响应格式,方便 CherryStudio、sub2api 等客户端接入
- **新增 Web 管理端**:新增 React + Vite + TypeScript 管理页面,支持管理上游 AnyRouter API Key、对外代理 API Key、默认模型、强制模型开关、管理员密码
- **新增对外代理 Key 管理**:支持通过管理端生成或添加本地 `PROXY_API_KEY`,第三方平台可使用该 Key 调用本代理;服务端使用 `ANYROUTER_API_KEY` 多账号轮询调用上游
- **新增 Docker 持久化配置**:Codex 代理容器使用 `/app/config/.env` 保存管理端配置,并通过宿主机 `/home/app/anyrouter2proxy/.env` 文件挂载持久化,方便直接备份和编辑
- **新增容器内前端构建**:Dockerfile 改为多阶段构建,镜像构建时自动执行 `admin-ui` 的 `npm ci` 和 `npm run build`,不再需要手动构建管理端静态文件
- **新增调用链路总览图**:README 中更新完整调用链路,覆盖 `9996` Codex/OpenAI Responses、`9997` AgentRouter 直连、`9998/9999` Node.js 中转模式和 Web 管理端配置流
**改进与修复:**
- `/v1/*` 鉴权、配置和上游连接错误统一返回 OpenAI 兼容的顶层 `{"error": {...}}`,避免 CherryStudio/sub2api 等客户端类型校验失败
- `.gitignore` 新增 `.env.backup.*` / `*.env.backup.*`,避免管理端生成的密钥备份文件被误提交
- `docker-compose.yml`、`docker-compose-dev.yml` 新增 `codex-proxy` 服务,统一使用 `wwwzhouhui569/anyrouter2proxy:codex-local` 镜像标签
- README 更新 Docker 打包、Compose 启动、Docker Run、镜像推送、Codex 配置和第三方平台接入说明
### v0.0.2 (2026-02-19)
**新增功能:Claude Code 请求伪装 & 高级模型支持**
- **Claude Code 请求伪装**:Node.js 代理层自动注入完整 Claude Code CLI 请求特征,包括:
- `User-Agent: claude-cli/2.1.39 (external, cli)`
- `anthropic-beta: claude-code-20250219,...` 等 beta 特性标识
- `x-app: cli`、`x-stainless-*` SDK 指纹头、`sec-fetch-mode` 等完整头部
- Claude Code 系统提示(system prompt)
- `thinking: {"type": "adaptive"}` 自适应思维
- `metadata` 用户身份信息
- **客户端头部完整透传**:Python 代理层(9998/9999)不再硬编码请求头,改为完整透传客户端所有特殊头到 Node.js 层,支持 Claude Code 等工具直连时的头部原样传递
- **绕过高级模型负载限制**:通过模拟 Claude Code 请求特征,解决 `claude-sonnet-4-6`、`claude-opus-4-6` 等高级模型 "负载已达到上限" 的问题
- **新增模型支持**:`claude-sonnet-4-6`、`claude-opus-4-6`
- **请求日志增强**:Python 代理层增加完整请求头和请求体日志(脱敏),便于调试和抓包分析
**修复问题:**
- 修复 `anyrouter2openai.py` 硬编码系统提示导致 Node.js 层无法注入 Claude Code 特征的问题
- 修复 Python httpx 的 `User-Agent: python-httpx/0.28.1` 泄露导致上游识别为非 Claude Code 请求的问题
- 修复 Node.js 代理缺少 `anthropic-version` 头导致非流式请求被拒绝的问题
- 修复小写/大写重复头(`content-type`/`Content-Type`、`accept`/`Accept`)导致上游解析异常的问题
### v0.0.1
- 初始版本
- Node.js SDK 中转模式,绕过 WAF/TLS 指纹检测
- OpenAI ↔ Anthropic 双向协议转换
- 多 Key 负载均衡
- Docker 容器化部署
- AgentRouter 直连代理模式
---
## 整体调用流程

---
## License
MIT License
---
## 技术交流群
欢迎加入技术交流群,分享你的使用心得和反馈建议:

---
## 作者联系
- **微信**: laohaibao2025
- **邮箱**: 75271002@qq.com

---
## 打赏
如果这个项目对你有帮助,欢迎请我喝杯咖啡
**微信支付**

---
## Star History
如果觉得项目不错,欢迎点个 Star
[](https://star-history.com/#wwwzhouhui/anyrouter2proxy&Date)