cj2api 实战:用 Cloudflare Worker 将 ChatJimmy 转为 OpenAI 兼容 API

痛点场景

你正在使用 ChatJimmy 进行日常开发,它在中文理解和上下文记忆上表现出色。但当你尝试在 Cursor 编辑器中使用 Continue 插件、或搭建基于 LangChain 的 RAG 系统时,这些工具都只认 OpenAI 格式的 API。

换接口?成本飙升。继续用 ChatJimmy?生态工具全废了。

cj2api 正是为解决这个"接口孤岛"问题而生。

核心原理

cj2api 本质是一个协议转换层,部署在 Cloudflare Worker 上运行。架构如下:

Cursor/Continue/LangChain
        ↓ (OpenAI 格式)
   Cloudflare Worker (cj2api)
        ↓ (ChatJimmy 格式)
      ChatJimmy API
        ↓ (流式/非流式响应)
   Worker 转换后返回
        ↓ (OpenAI 格式)
   上游客户端

当客户端发送 /v1/chat/completions 请求时,cj2api 接收请求头、body 和 stream 参数,将 OpenAI 的 messages 格式映射为 ChatJimmy 的请求格式,代理转发后再将响应转换回 OpenAI 格式返回给客户端。

快速部署

部署只需三步,全程免费:

# 1. 安装 Wrangler CLI
npm install -g wrangler

# 2. 克隆项目
git clone https://github.com/your-repo/cj2api.git
cd cj2api

# 3. 部署到 Cloudflare
wrangler deploy

部署完成后,Worker 域名即是你的 API 端点。

配置与调用

在 ChatJimmy 控制台获取 API Key 后,在 Cloudflare Worker 的环境变量中配置:

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

调用示例(Python):

from openai import OpenAI

client = OpenAI(
    api_key="dummy",  # 本地 Worker 不需要真实 key
    base_url="https://cj2api.your-subdomain.workers.dev/v1"
)

response = client.chat.completions.create(
    model="chat Jimmy",
    messages=[{"role": "user", "content": "解释什么是向量数据库"}],
    stream=True  # 支持流式输出
)

for chunk in response:
    print(chunk.choices[0].delta.content, end="", flush=True)

与同类工具的差异

特性 cj2api API Hub 类方案 自建代理服务
部署成本 零成本(CF 免费额度) 依赖第三方稳定性 需要服务器费用
延迟 全球边缘,低延迟 中等 取决于服务器位置
流式输出 原生支持 部分支持 需额外开发
数据安全 完全自控,无第三方中转 数据经过第三方 完全自控
测试工具 内置测试页 需额外工具

最关键的优势是零成本 + 完全自托管:你不需要为 API 转换支付任何费用,数据也不会经过任何第三方服务器。

适用场景

cj2api 适合以下场景:

  • CursorVS Code + Continue 中使用 ChatJimmy 作为代码助手
  • 搭建本地 RAG 系统时,想用 ChatJimmy 作为 LLM 后端
  • 任何需要 OpenAI 兼容接口但你想继续使用 ChatJimmy 的工具

只需一个 Worker,你就能打通 ChatJimmy 与整个 OpenAI 生态的工具链。