零成本将 ChatJimmy 转为 OpenAI API:cj2api 项目实战

痛点场景

你在开发一个需要接入 AI 能力的应用,但不想在前端暴露真实的 ChatJimmy API Key。团队成员需要通过统一接口调用,内部系统已经对接了 OpenAI 格式的 SDK,换一个 AI 来源意味着要改一堆代码。

更麻烦的是,你只是想做个快速原型验证,租一台服务器来跑代理服务成本太高。

这时候,一个能将 ChatJimmy 转换为 OpenAI 兼容接口的轻量方案就显得尤为重要。

cj2api 是什么

cj2api 是一个开源项目,通过 Cloudflare Worker 实现 ChatJimmy 到 OpenAI API 格式的转换。项目只有 23 个 GitHub Stars,但功能完整:

  • 将 ChatJimmy 的请求/响应转换为 OpenAI 兼容格式
  • 支持流式输出(Server-Sent Events)
  • 自带 Web 测试页面
  • 零成本部署在 Cloudflare 全球边缘网络
  • 无需维护自己的服务器

核心原理

cj2api 本质上是一个协议转换层,它做了以下工作:

// 请求转换:OpenAI 格式 → ChatJimmy 格式
const chatJimmyRequest = {
  prompt: openaiRequest.messages,
  model: openaiRequest.model || 'jimmy-v3'
};

// 响应转换:ChatJimmy 格式 → OpenAI 格式
const openAIResponse = {
  id: `chatcmpl-${Date.now()}`,
  object: 'chat.completion',
  model: chatJimmyResponse.model,
  choices: [{
    index: 0,
    message: { role: 'assistant', content: chatJimmyResponse.response },
    finish_reason: 'stop'
  }]
};

关键点在于两种格式的映射关系处理,以及流式输出时对数据帧的正确解析和重组。

部署步骤

部署仅需几分钟,无需安装复杂工具:

方式一:使用 Wrangler CLI

# 安装 Wrangler
npm install -g wrangler

# 登录 Cloudflare
wrangler login

# 直接部署
wrangler deploy

方式二:使用 Cloudflare Dashboard

  1. 创建新的 Worker
  2. wrangler.tomlsrc/index.js 的内容复制到编辑器
  3. 点击 Deploy

部署完成后,通过环境变量配置 ChatJimmy 的 API 地址和 Key:

# 在 Cloudflare Worker 设置中添加
CHAT_JIMMY_API_URL=https://api.chatjimmy.com/v1
CHAT_JIMMY_API_KEY=your_api_key_here

使用方式

部署成功后,可以像调用 OpenAI API 一样使用:

curl -X POST https://your-worker.xxx.workers.dev/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer any-string" \
  -d '{
    "model": "jimmy-v3",
    "messages": [{"role": "user", "content": "Hello"}],
    "stream": false
  }'

项目自带的测试页面位于 /test 路由,可以直接在浏览器中验证接口是否正常工作。

与同类工具的差异

对比传统的 API 代理方案,cj2api 的优势在于:

特性 传统代理服务 cj2api
部署成本 需要 VPS 月费 免费额度内零成本
全球延迟 取决于服务器位置 Cloudflare 边缘就近响应
维护工作 需要监控服务器 无服务器,无需运维
冷启动 可能存在延迟 边缘计算无冷启动

唯一的限制是 Cloudflare Worker 的免费配额(每天 10 万次请求),对大多数个人项目和小团队使用场景来说足够。

适用场景

  • 快速原型开发,需要临时接入 AI 能力
  • 团队内部统一 API 调用入口
  • 不想在前端暴露真实 API Key
  • 已有 OpenAI SDK 的项目需要切换到 ChatJimmy

项目代码结构简单,如果你需要自定义功能(比如添加日志记录、请求限流),可以直接修改 src/index.js 中的逻辑。