将 AtomCode 模型能力无缝接入 Claude Code、CC Switch 和 OpenAI 兼容客户端的本地 API 网关
English | 功能特性 | 快速开始 | 运行模式 | 故障排查
| 特性 | 描述 |
|---|---|
| 🎯 Claude Code 兼容 | 原生支持 POST /v1/messages Anthropic Messages API |
| 🤖 OpenAI 兼容 | 完整支持 POST /v1/chat/completions OpenAI Chat Completions API |
| 🔄 双模式运行 | 上游代理模式 + CLI 回退模式,确保服务高可用 |
| 🔌 SSE 实时流式 | 支持 OpenAI SSE 透传和 Anthropic SSE 转换 |
| 🗺️ 智能模型映射 | Claude 模型别名自动映射到 AtomCode 模型 |
| 🛡️ 安全认证 | 自动携带 User-Agent 和 Authorization 头部 |
| ⚙️ CC Switch 集成 | 一键生成 CC Switch provider 配置 |
| 📊 健康监控 | 内置 /health 健康检查端点 |
| 🧪 完整测试 | 内置单元测试、Smoke 测试和 GitHub Actions CI |
- Node.js >= 20
- 已安装并登录 AtomCode CLI
git clone https://github.com/Danbing404/atomcode2api.git
cd atomcode2apinpm installatomcode status如果尚未登录:
atomcode loginnpm start服务默认运行在:
http://127.0.0.1:15739
测试 OpenAI Chat Completions:
curl http://127.0.0.1:15739/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"GLM-5.1","messages":[{"role":"user","content":"Reply with exactly: pong"}],"max_tokens":16}'测试 Anthropic Messages:
curl http://127.0.0.1:15739/v1/messages \
-H "Content-Type: application/json" \
-d '{"model":"claude-sonnet-4-5","messages":[{"role":"user","content":"Reply with exactly: pong"}],"max_tokens":16}'npm run dev默认模式。 读取本机 AtomCode 登录凭据,请求 AtomCode 的 OpenAI 兼容上游,并在本地完成协议适配。
自动读取配置:
| 文件 | 作用 |
|---|---|
~/.atomcode/auth.toml |
获取 access_token |
~/.atomcode/config.toml |
获取默认 provider、模型和上游地址 |
自动携带请求头:
Authorization: Bearer <access_token>User-Agent: atomcode/4.22.2
API 端点:
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/health |
健康检查 |
GET |
/v1/models |
模型列表 |
POST |
/v1/chat/completions |
OpenAI Chat Completions 兼容接口 |
POST |
/v1/messages |
Anthropic Messages 兼容接口 |
POST |
/v1/messages/count_tokens |
本地近似 token 估算 |
备用模式。 当上游接口不可用时,通过本地 atomcode -p 命令完成请求。
工作原理:
atomcode -p <prompt> --max-turns 1 --disable-tools bash,web_fetch --no-telemetryAPI 端点:
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/fallback/health |
健康检查 |
GET |
/fallback/v1/models |
模型列表 |
POST |
/fallback/v1/chat/completions |
OpenAI Chat Completions 包装 |
POST |
/fallback/v1/responses |
OpenAI Responses 包装 |
POST |
/fallback/v1/messages |
Anthropic Messages 包装 |
强制使用回退模式:
- URL 参数:
?fallback=1 - 请求头部:
x-atomcode-fallback: 1
注意: 非流式请求返回标准 JSON 响应,流式请求返回一次性 SSE 并以
data: [DONE]结束。
| 客户端模型名 | AtomCode 模型名 | 说明 |
|---|---|---|
claude-sonnet-4-5 |
GLM-5.1 |
Claude Sonnet 别名 |
claude-opus-4-1 |
GLM-5.1 |
Claude Opus 别名 |
claude-haiku-4-5 |
deepseek-v4-flash |
Claude Haiku 别名 |
直接支持的 AtomCode 模型:
GLM-5.1deepseek-v4-flashQwen/Qwen3.6-35B-A3B
复制 .env.example 后按需配置:
| 变量 | 默认值 | 说明 |
|---|---|---|
PORT |
15739 |
HTTP 端口 |
BIND_HOST |
127.0.0.1 |
监听地址 |
API_KEY |
atomcode-local |
本地网关 key |
ATOMCODE_AUTH_PATH |
~/.atomcode/auth.toml |
AtomCode token 文件路径 |
ATOMCODE_CONFIG_PATH |
~/.atomcode/config.toml |
AtomCode 配置文件路径 |
ATOMCODE_UPSTREAM_BASE_URL |
配置文件中的值 | OpenAI 兼容上游地址 |
ATOMCODE_USER_AGENT |
atomcode/4.22.2 |
上游模型校验所需 User-Agent |
FALLBACK_API_KEY |
空 | CLI 回退接口的可选 Bearer key |
ATOMCODE_FALLBACK_CONCURRENCY |
1 |
CLI 队列并发数 |
ATOMCODE_FALLBACK_TIMEOUT_MS |
300000 |
CLI 请求超时(毫秒) |
ATOMCODE_FALLBACK_MODEL |
空 | CLI 默认模型 |
ATOMCODE_FALLBACK_PROVIDER |
空 | CLI 默认 provider |
ATOMCODE_FALLBACK_COMMAND |
atomcode |
AtomCode CLI 命令 |
步骤 1: 启动本地服务
npm start步骤 2: 在 CC Switch 中新增 Claude provider:
API 格式: Anthropic Messages(原生)
认证字段: ANTHROPIC_AUTH_TOKEN
ANTHROPIC_BASE_URL: http://127.0.0.1:15739
ANTHROPIC_AUTH_TOKEN: atomcode-local
主模型: GLM-5.1
Sonnet 默认模型: GLM-5.1
Opus 默认模型: GLM-5.1
Haiku 默认模型: deepseek-v4-flash
快捷生成配置:
npm run ccswitch:providernpm run ccswitch:direct生成文件:
| 文件 | 用途 |
|---|---|
.atomcode/atomcode-direct-ccswitch-config-json.json |
粘贴到 CC Switch "配置 JSON" 框 |
.atomcode/atomcode-direct-ccswitch-provider.json |
完整 provider 记录 |
.atomcode/atomcode-direct-ccswitch-provider.env |
环境变量格式 |
.atomcode/atomcode-direct-ccswitch-*.redacted.json |
脱敏预览 |
直连时 UI 配置:
API 格式: OpenAI Chat Completions
认证字段: ANTHROPIC_API_KEY
⚠️ 警告: 直连 AtomCode 上游可能受限于 CC Switch 是否能设置User-Agent: atomcode/4.22.2。如果直连报无权限,请使用本地网关配置。
npm run checknpm test# 测试上游代理模式(真实请求 AtomCode 上游)
npm run smoke:ab
# 测试 CLI 回退模式(真实调用本地 atomcode -p)
npm run smoke:c注意:
smoke:c可能因为限流或首次启动而耗时较久。CI 默认只跑语法检查和单元测试。
- ✅
.atomcode/输出目录已加入.gitignore - ❌ 不要提交
auth.toml、直连 provider JSON、env 文件或任何 token 截图 - 🔄 如果 token 泄露,立即执行:
atomcode logout
atomcode login
npm run ccswitch:direct如果使用直连 AtomCode 上游,请确认 CC Switch 中选择的是:
API 格式: OpenAI Chat Completions
认证字段: ANTHROPIC_API_KEY
AtomCode 上游需要 User-Agent: atomcode/4.22.2。本地网关会自动添加;直连 CC Switch 时不一定能添加。
atomcode -p 是完整 CLI 调用,不是普通 HTTP 请求。可以适当调大超时:
ATOMCODE_FALLBACK_TIMEOUT_MS=300000 npm startatomcode2api/
├── src/
│ ├── server.js # Express 应用主入口
│ ├── anthropic.js # Anthropic/OpenAI 协议转换
│ ├── openai.js # OpenAI Chat Completions 代理
│ ├── upstream.js # AtomCode 上游请求
│ ├── config.js # AtomCode TOML 配置解析
│ ├── fallback.js # CLI 回退队列和执行
│ └── fallback-route.js # CLI 回退 API 路由
├── scripts/
│ ├── smoke-ab.js # 上游代理 Smoke 测试
│ ├── smoke-c.js # CLI 回退 Smoke 测试
│ ├── check-js.js # JavaScript 语法检查
│ ├── print-ccswitch-provider.js # 生成 CC Switch 本地配置
│ └── export-atomcode-direct-ccswitch-provider.js # 生成 CC Switch 直连配置
├── test/
│ └── *.test.js # 单元测试
├── .github/
│ └── workflows/ # GitHub Actions CI
├── docs/ # 文档
├── .env.example # 环境变量模板
├── package.json
└── README.md / README_EN.md
本项目的设计和实现参考了以下优秀开源项目:
| 项目 | 作者 | 说明 |
|---|---|---|
| OpenCode2API | @TiaraBasori | OpenCode 到 OpenAI 兼容 API 的网关实现,为本项目提供了核心架构参考 |
| Sub2API | @Wei-Shaw | 一站式开源 AI API 中转服务平台,启发了本项目的网关设计理念 |
| claude-code-gateway | @enescingoz | Claude Code CLI 到 OpenAI API 的 Python 网关,提供了 CLI 包装模式的参考 |
| claude-adapter | @shantoislamdev | OpenAI 到 Anthropic 的协议适配器,为协议转换逻辑提供参考 |
| auth2api | @AmazingAng | 轻量级 Claude OAuth 到 OpenAI 兼容 API 代理,启发了认证代理模式 |
| agent-cli-to-api | @xudaolong | 多 Agent CLI 到 OpenAI 兼容 API 的统一网关,提供了多模式代理的参考 |
MIT