Skip to content

Repository files navigation

🚀 atomcode2api

Node.js >= 20 License: MIT Express: 5.1.0 OpenAI Compatible Anthropic Compatible

将 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-AgentAuthorization 头部
⚙️ CC Switch 集成 一键生成 CC Switch provider 配置
📊 健康监控 内置 /health 健康检查端点
🧪 完整测试 内置单元测试、Smoke 测试和 GitHub Actions CI

🚀 快速开始

前提条件

1. 克隆项目

git clone https://github.com/Danbing404/atomcode2api.git
cd atomcode2api

2. 安装依赖

npm install

3. 确认 AtomCode 登录状态

atomcode status

如果尚未登录:

atomcode login

4. 启动服务

npm start

服务默认运行在:

http://127.0.0.1:15739

5. 快速测试

测试 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}'

6. 开发模式(自动重载)

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 估算

CLI 回退模式

备用模式。 当上游接口不可用时,通过本地 atomcode -p 命令完成请求。

工作原理:

atomcode -p <prompt> --max-turns 1 --disable-tools bash,web_fetch --no-telemetry

API 端点:

方法 路径 说明
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.1
  • deepseek-v4-flash
  • Qwen/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 命令

🔌 CC Switch 配置

推荐:本地网关模式

步骤 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:provider

备选:直连 AtomCode 上游

npm 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 check

单元测试

npm test

Smoke 测试

# 测试上游代理模式(真实请求 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

🐛 故障排查

API Key 无效或无权限

如果使用直连 AtomCode 上游,请确认 CC Switch 中选择的是:

API 格式: OpenAI Chat Completions
认证字段: ANTHROPIC_API_KEY

AtomCode 独享模型返回 429

AtomCode 上游需要 User-Agent: atomcode/4.22.2。本地网关会自动添加;直连 CC Switch 时不一定能添加。

CLI 回退模式很慢

atomcode -p 是完整 CLI 调用,不是普通 HTTP 请求。可以适当调大超时:

ATOMCODE_FALLBACK_TIMEOUT_MS=300000 npm start

📁 项目结构

atomcode2api/
├── 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

About

No description, website, or topics provided.

Resources

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages