零成本部署 cj2api:用 Cloudflare Worker 将 ChatJimmy 转为 OpenAI 兼容 API

为什么需要协议转换

一个常见的困境:你的应用已经跑在 OpenAI SDK 上,功能开发完毕,准备上线。这时产品说 ChatJimmy 的成本更低,想切换模型。

问题来了——重写所有调用代码至少需要两三天,中间还要测试兼容性。能不能不重写?cj2api 的思路是让 ChatJimmy “伪装” 成 OpenAI:客户端以为自己在调 OpenAI,实际上请求被转换层截获,转发给 ChatJimmy,响应再转回 OpenAI 格式。

工作原理

cj2api 部署在 Cloudflare Worker,核心技术是协议转换。整个流程分三步:

请求接收:Worker 接收标准 OpenAI Chat Completion 格式的请求,包含 messages、model、stream 等参数。

格式转换:将 OpenAI 请求体转换为 ChatJimmy 能理解的协议,包括请求头重组、认证信息注入、参数映射。

响应回传:ChatJimmy 返回数据后,Worker 转换为 OpenAI 格式。对于流式输出,还需要处理 Server-Sent Events 数据格式的转换。

因为部署在边缘节点,请求会路由到最近的 Cloudflare PoP,相比部署在传统 VPS 的方案,延迟通常能降低 30-50ms。

部署步骤

项目使用 Wrangler CLI 部署,整个过程不超过五分钟。

前置条件:Node.js 环境、Cloudflare 账号(免费注册即可)。

# 安装 Wrangler
npm install -g wrangler

# 克隆项目
git clone https://github.com/你的fork/cj2api.git
cd cj2api

# 登录 Cloudflare(浏览器授权)
wrangler login

# 部署
wrangler deploy

部署完成后会返回 Worker URL,格式类似 https://cj2api-xxxx.your-subdomain.workers.dev

接下来配置两个必需的环境变量:

# 填入 ChatJimmy 的 API Key
wrangler secret put CHATJIMMY_API_KEY

# 填入 ChatJimmy 的 API 端点
wrangler secret put CHATJIMMY_ENDPOINT

Cloudflare Workers 免费额度为每天 10 万次请求,个人项目和小团队使用完全足够。

使用方式

内置测试页

部署成功后直接访问 Worker URL,会打开一个交互式测试页面,可以选择模型、输入对话内容、切换流式/同步模式。调试阶段非常方便。

程序调用

只需将 baseURL 指向你的 Worker 地址:

import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://cj2api-xxxx.your-subdomain.workers.dev/v1',
  apiKey: 'placeholder'  // 实际认证由 Worker 内部处理
});

// 同步调用
const response = await client.chat.completions.create({
  model: 'chatgpt-4',
  messages: [{ role: 'user', content: '解释什么是边缘计算' }]
});

// 流式输出
const stream = await client.chat.completions.create({
  model: 'chatgpt-4',
  messages: [{ role: 'user', content: '写一首关于云的小诗' }],
  stream: true
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0].delta.content ?? '');
}

原有基于 OpenAI SDK 的代码只需改动 baseURL,其他逻辑保持不变。

与其他方案对比

维度 cj2api 自建 VPS 代理 商业 API 转发服务
部署成本 零成本(免费额度内) 服务器月费约 $5-20 按调用量计费
流式支持 原生 SSE 需自行实现 部分服务商不支持
测试工具 内置测试页 依赖 Postman 等 多数无内置界面
延迟 边缘节点,低延迟 取决于服务器位置 中等
维护成本 无服务器无需运维 需要维护服务器 无需维护

如果你的日均调用量在 10 万次以内,且不需要复杂的请求日志分析,cj2api 的性价比优势明显。

适用场景

这个方案适合三类场景:

快速模型切换:已有产品想低成本试水 ChatJimmy,不需要大规模代码改造。接入 cj2api 后,同一个后端可以通过修改 baseURL 切换不同模型。

统一接口层:团队内部维护多个 AI 服务(OpenAI、Claude、ChatJimmy),可以用 cj2api 作为统一出口,前端调用逻辑保持一致。

学习研究:如果你在研究 OpenAI API 的协议细节,或者需要模拟 OpenAI 行为做测试,cj2api 的源码可以作为参考实现。

快速上手

从克隆仓库到调通第一个接口,通常需要十分钟:

git clone https://github.com/你的用户名/cj2api.git
cd cj2api
npm install
wrangler login
wrangler deploy
wrangler secret put CHATJIMMY_API_KEY
wrangler secret put CHATJIMMY_ENDPOINT

然后访问你的 Worker URL,在测试页输入一条消息验证是否正常工作。遇到问题可以查看项目 README 中的常见问题部分。

项目地址:https://github.com/你的用户名/cj2api