claude-to-chatgpt
让所有 ChatGPT 工具无缝调用 Claude API 的轻量级协议适配器
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
让所有 ChatGPT 工具无缝调用 Claude API 的轻量级协议适配器
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:jtsang4 的 GitHub 项目头像
你是否曾经遇到这样的困境:看上了一款基于 OpenAI GPT-3.5/GPT-4 接口开发的极客工具,却发现手边只有 Claude API 的余额?或者反过来,你精心调试的 prompt 只能在 ChatGPT 上跑出理想效果,换到 Claude 却水土不服?
Claude to ChatGPT 正是为解决这一痛点而生。这是一个由独立开发者 jtsang4 创建的轻量级代理服务,通过协议转换让任何兼容 OpenAI Chat API 的客户端——无论是 ChatBox、ChatGPT-Next-Web 还是你自己写的脚本——都能以相同的调用方式,无缝使用 Anthropic 的 Claude 系列模型。
从技术上看,Claude 与 OpenAI 的接口设计存在根本性差异:
| Claude Completion API | OpenAI Chat API | |
|---|---|---|
| 请求格式 | /v1/complete,纯 prompt 文本 | /v1/chat/completions,messages 数组 |
| 对话角色 | Human / Assistant | system / user / assistant |
| 停止原因 | stop_sequence / max_tokens | stop / length |
| 模型标识 | claude-instant-1 / claude-2 | gpt-3.5-turbo 等 |
Claude to ChatGPT 在中间层做了完整的双向转换:请求时将 OpenAI 格式的 messages 数组还原为 Claude 的 prompt 文本(Human: / Assistant: 前缀),响应时再将 Claude 的 completion 结果包装成 OpenAI 标准的 chat.completion JSON 结构返回。开发者完全不感知底层差异,继续写他们熟悉的 OpenAI SDK 代码即可。
多模型自动路由:项目内置 model_map,当请求中 model 参数为 gpt-3.5-turbo 或 gpt-3.5-turbo-0613 时,自动映射为 claude-instant-1;其余情况默认使用 claude-2。这意味着同一段客户端代码,换一个 model 名字就能切换底座模型。
流式响应(Streaming):Claude to ChatGPT 支持 SSE(Server-Sent Events)流式输出。适配层逐行解析 Claude 的流式响应,逐 token 将 completion 内容转换为 OpenAI 格式的 delta.content 字段,并正确处理 stop_reason 终止信号,返回 data: [DONE] 结束标记。这对于构建实时对话 UI 至关重要。
Token 计费兼容:通过 tiktoken 库计算 completion token 数量,填充 OpenAI 响应格式中 usage.completion_tokens 字段,使得调用方的用量统计和成本计算逻辑无需修改。
代理与超时:依赖 httpx.AsyncClient 实现异步 HTTP 调用,支持通过 HTTP_PROXY / SOCKS_PROXY 环境变量配置代理,并设置了 120 秒请求超时保护。
项目提供两种零门槛部署路径:
Docker(推荐本地部署):
docker run -p 8000:8000 wtzeng/claude-to-chatgpt:latest
或使用 docker-compose:
services:
claude-to-chatgpt:
image: wtzeng/claude-to-chatgpt:latest
restart: unless-stopped
environment:
CLAUDE_BASE_URL: "https://api.anthropic.com"
ports:
- "8000:8000"
容器基于 python:3.9-slim-buster,使用 Poetry 管理依赖,启动后 API 端点为 http://localhost:8000/v1/chat/completions,与 OpenAI API 地址完全对齐。
Cloudflare Workers(零服务器方案):将 cloudflare-worker.js 的代码粘贴到 Cloudflare Worker 编辑器即可。免费额度每天 10 万次请求,适合轻度使用场景,也支持绑定自定义域名。
项目代码极其精简,总共约 300 行 Python:
app.py:FastAPI 入口,注册 /v1/chat/completions 和 /v1/models 两个端点,配置 CORS 中间件允许跨域。adapter.py:核心转换引擎。包含 ClaudeAdapter 类,负责请求格式转换(openai_to_claude_params)、响应格式转换(非流式 claude_to_chatgpt_response / 流式 claude_to_chatgpt_response_stream)。角色映射表 role_map 将 OpenAI 的 system/user/assistant 映射为 Claude 的 Human/Assistant。models.py:模型映射表和模型列表定义。util.py:Token 计数辅助函数(基于 tiktoken)。cloudflare-worker.js:Cloudflare Workers 版本,用 JavaScript 实现相同逻辑。Python 依赖:fastapi + uvicorn(Web 框架)、httpx(异步 HTTP 客户端)、tiktoken(token 计数)、socksio(SOCKS 代理支持)。代码质量整洁,有完整的类型注解和异步支持。
gpt-3.5-turbo → claude-instant-1 和默认 → claude-2 的映射,新增模型需要修改代码。allow_origins=["*"] 在生产环境中存在安全风险,建议按需限制。/v1/complete 接口,Claude 3 的 /v1/messages 接口有完全不同的请求结构,本项目不兼容。截至分析时,该项目已获得约 1300 颗 GitHub Stars,147 个 forks,被标记为 anthropic / chatgpt / claude / openai 等主题,在 Claude-API 适配器类项目中具有较高知名度。MIT 许可证允许商业使用和二次开发。