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 的用量限制和稳定性需求。