零成本部署:cj2api 将 ChatJimmy 转换为 OpenAI 兼容 API 全攻略

痛点场景:你的 AI 工具链无法直接用 ChatJimmy

作为一名独立开发者,你正在构建一个 AI 应用。某天你发现了 ChatJimmy——一个性价比极高的 AI 服务,但它的 API 格式与 OpenAI 不兼容。

问题来了:你现有的工具(curl 命令、Postman、代码库)都是基于 OpenAI API 格式设计的。换言之,你需要为 ChatJimmy 单独适配,工作量不小。

cj2api 正是为解决这个「格式孤岛」问题而生。

什么是 cj2api

cj2api 是一个运行在 Cloudflare Worker 上的开源代理服务,核心功能是将 ChatJimmy 的 API 响应转换为 OpenAI 兼容格式。

项目地址:GitHub - cj2api(Stars: 22)

关键特性:

  • 零成本部署:利用 Cloudflare Worker 免费额度
  • 流式输出:完整支持 Server-Sent Events
  • 即开即用:自带测试页面,无需额外工具验证

核心原理

cj2api 的架构非常简洁:

用户请求(OpenAI格式) → Cloudflare Worker → ChatJimmy API → 转换响应 → 返回用户

Worker 端做了两件事:

  1. 请求转换:将 OpenAI 格式的请求体转换为 ChatJimmy 所需的格式
  2. 响应转换:将 ChatJimmy 的响应重新格式化为 OpenAI 标准输出

关键代码片段(简化版):

export default {
  async fetch(request) {
    const body = await request.json();
    
    // 构建 ChatJimmy 请求
    const jimmyRequest = {
      model: body.model,
      messages: body.messages,
      stream: body.stream
    };
    
    // 发送到 ChatJimmy
    const response = await fetch('https://api.chatjimmy.com/v1/chat/completions', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_KEY}` },
      body: JSON.stringify(jimmyRequest)
    });
    
    // 流式或非流式处理
    if (body.stream) {
      return handleStreamResponse(response);
    }
    
    return new Response(await response.text(), {
      headers: { 'Content-Type': 'application/json' }
    });
  }
};

部署步骤

方式一:Wrangler CLI(推荐)

# 安装 Wrangler
npm install -g wrangler

# 登录 Cloudflare
wrangler login

# 创建新 Worker 项目
wrangler init cj2api

# 进入目录并安装依赖
cd cj2api
npm install

# 配置 API Key
wrangler secret put CHATJIMMY_API_KEY
# 输入你的 ChatJimmy API Key

# 部署
wrangler deploy

方式二:在线部署

  1. 访问 Cloudflare Dashboard
  2. 创建新的 Worker
  3. 粘贴 cj2api 源码
  4. 设置环境变量 CHATJIMMY_API_KEY
  5. 点击部署

部署完成后,你将获得一个类似 cj2api.xxx.workers.dev 的域名。

使用示例

部署成功后,可以这样调用:

curl https://cj2api.xxx.workers.dev/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-3.5-turbo",
    "messages": [{"role": "user", "content": "你好"}],
    "stream": false
  }'

响应格式完全兼容 OpenAI:

{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "model": "gpt-3.5-turbo",
  "choices": [{
    "index": 0,
    "message": {"role": "assistant", "content": "你好!"},
    "finish_reason": "stop"
  }]
}

与同类工具的差异

特性 cj2api 传统代理服务
部署成本 免费(Cloudflare) 需要付费服务器
冷启动 < 50ms 数百毫秒
扩展性 自动弹性 需手动扩容
配置复杂度 极简 中等

适用场景

  • 快速验证 ChatJimmy 与现有系统的兼容性
  • 不想维护独立服务器的个人项目
  • 原型开发阶段的技术选型

需要注意的是,由于依赖 Cloudflare 网络,特定地区可能存在访问延迟。项目代码开源,安全性可自行审计。