cj2api:将 ChatJimmy 转为 OpenAI 兼容 API 的零成本方案
痛点场景:想用 ChatJimmy,却舍不得重写代码
很多开发者在项目中已经封装好了 OpenAI 的 API 调用逻辑。突然发现 ChatJimmy 效果不错,想切换过去,却发现:
- API 返回格式完全不同
- 需要改动现有代码
- 调试成本不可忽视
cj2api 正是为解决这个矛盾而生。它在 Cloudflare Worker 上运行,把 ChatJimmy 的响应实时转换为 OpenAI 兼容格式,让你的旧代码直接复用。
核心原理:Worker 层做协议转换
cj2api 的架构非常轻量,本质是一个 HTTP 中间层:
客户端 → OpenAI 格式请求 → cj2api Worker → ChatJimmy API
ChatJimmy 响应 → cj2api Worker → OpenAI 格式 → 客户端
Worker 接收符合 OpenAI Chat Completion 规范的请求,将请求体解析后重新组装,调用 ChatJimmy 的接口,再将响应流式或同步地转换回 OpenAI 格式。
关键实现点包括:
- 请求体重构:提取
messages数组、模型参数等核心字段 - 流式响应处理:使用
ReadableStream实时转换 SSE 数据 - 错误标准化:将 ChatJimmy 的错误映射为 OpenAI 风格的错误码
为什么选择 Cloudflare Worker
部署在 Cloudflare Worker 上有几个实际好处:
- 免费额度充足:每天 10 万次请求,完全够个人或小团队使用
- 全球边缘节点:延迟低,无需自己维护服务器
- 冷启动几乎为零:比传统 Node 服务响应更快
- 一键部署:通过 Wrangler CLI 即可完成发布
快速部署指南
前置准备
- Cloudflare 账号(免费即可)
- ChatJimmy 的 API Key
部署步骤
# 安装 Wrangler CLI
npm install -g wrangler
# 克隆项目
git clone https://github.com/your-repo/cj2api.git
cd cj2api
# 配置环境变量
wrangler secret put CHATJIMMY_API_KEY
# 输入你的 ChatJimmy API Key
# 部署到 Cloudflare
wrangler deploy
部署完成后,你会获得一个 .workers.dev 域名,格式类似:
https://cj2api.xxx.workers.dev/v1/chat/completions
快速验证
项目自带测试页面,访问部署后的域名即可打开 Swagger UI。填入测试消息,点击发送,查看返回的 JSON 结构是否与 OpenAI API 一致。
用 cURL 测试也很简单:
curl https://cj2api.xxx.workers.dev/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer dummy-key" \
-d '{
"model": "chatjimmy-model",
"messages": [{"role": "user", "content": "你好"}],
"stream": true
}'
如果开启 stream: true,你会看到标准的 SSE 流式输出,与 OpenAI 的 /v1/chat/completions 行为完全一致。
与同类工具的差异
| 特性 | cj2api | 传统代理方案 |
|---|---|---|
| 部署成本 | 零成本 | 需要购买服务器 |
| 冷启动 | 几乎无 | 有明显延迟 |
| 流式支持 | 原生支持 | 部分方案不支持 |
| 自带测试页 | 是 | 通常需要额外配置 |
| 维护成本 | 无(Cloudflare 托管) | 需要自己运维 |
适用场景
cj2api 特别适合以下情况:
- 快速原型开发:想先用 ChatJimmy 试试效果,不确定长期使用
- 现有项目迁移:已有 OpenAI 调用代码,想换后端模型
- 个人项目:没有预算购买服务器,只想免费跑起来
- 学习研究:想了解 API 转换层如何实现
如果你正面临 API 格式不兼容的问题,又不想投入运维精力,cj2api 是个值得一试的轻量方案。