cj2api:将 ChatJimmy 转换为 OpenAI 兼容 API 的零成本方案
痛点引入
你正在开发一个需要 AI 能力的应用,熟悉的 OpenAI SDK 已经写好了,突然发现目标模型是 ChatJimmy。没有 OpenAI 兼容接口,SDK 无法直接使用,改代码又太麻烦。
这就是 cj2api 要解决的问题。
核心原理
cj2api 本质是一个 Cloudflare Worker,它充当中间层:
你的应用 → OpenAI SDK → cj2api → ChatJimmy API
Worker 接收 OpenAI 格式的请求,自动转换为 ChatJimmy 的请求格式,然后将响应再转回 OpenAI 格式返回。这个转换过程对调用方完全透明。
Cloudflare Worker 的优势在于边缘部署,响应速度快,且有免费额度支撑个人项目。
快速部署
项目提供两种部署方式,推荐使用 Wrangler CLI:
# 克隆项目
git clone https://github.com/your-repo/cj2api.git
cd cj2api
# 安装依赖
npm install
# 部署到 Cloudflare
npx wrangler deploy
部署完成后,Worker 的 URL 即为你的 API 端点。
配置与使用
在 Cloudflare Dashboard 或通过 wrangler 配置环境变量:
| 变量名 | 说明 |
|---|---|
CHAT_JIMMY_API_KEY |
ChatJimmy 的 API 密钥 |
CHAT_JIMMY_BASE_URL |
ChatJimmy 的 API 地址 |
使用方式与调用 OpenAI 完全一致:
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'dummy', // 占位符,Worker 不验证此字段
baseURL: 'https://your-worker.workers.dev/v1'
});
const response = await client.chat.completions.create({
model: 'jimmy-model',
messages: [{ role: 'user', content: '你好' }],
stream: true
});
流式输出支持
cj2api 支持 Server-Sent Events 格式的流式输出。只需在请求中添加 stream: true,即可获得实时的打字机效果。响应会自动转换为 OpenAI 的流式格式,SDK 无需任何修改。
自带测试页面
部署后访问 Worker URL,会看到一个简洁的 Web 界面。你可以直接在页面上:
- 输入 API 密钥
- 选择模型
- 发送测试消息
- 查看完整请求响应
这个功能对调试和快速验证非常实用,省去了写测试脚本的步骤。
适用场景
- 已有 OpenAI 项目,想切换到 ChatJimmy 但不想改代码
- 需要在多个 AI 服务间快速切换
- 个人项目或学习用途,不想承担额外成本
对于生产环境,建议评估 Cloudflare Worker 的用量限制和稳定性需求。