No description
Find a file
Derrity 9488ad1bfd Fix Dockerfile: upgrade Go image from 1.22 to 1.25 to match go.mod requirement
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 01:59:54 +08:00
config Initial commit: CloudFlare Worker AI account pool proxy 2026-04-05 01:00:43 +08:00
handler Initial commit: CloudFlare Worker AI account pool proxy 2026-04-05 01:00:43 +08:00
instance Initial commit: CloudFlare Worker AI account pool proxy 2026-04-05 01:00:43 +08:00
store Initial commit: CloudFlare Worker AI account pool proxy 2026-04-05 01:00:43 +08:00
web Add pre-built frontend dist and multi-stage Dockerfile 2026-04-05 01:12:18 +08:00
.gitignore Add pre-built frontend dist and multi-stage Dockerfile 2026-04-05 01:12:18 +08:00
docker-compose.yaml Initial commit: CloudFlare Worker AI account pool proxy 2026-04-05 01:00:43 +08:00
Dockerfile Fix Dockerfile: upgrade Go image from 1.22 to 1.25 to match go.mod requirement 2026-04-05 01:59:54 +08:00
go.mod Initial commit: CloudFlare Worker AI account pool proxy 2026-04-05 01:00:43 +08:00
go.sum Initial commit: CloudFlare Worker AI account pool proxy 2026-04-05 01:00:43 +08:00
main.go Initial commit: CloudFlare Worker AI account pool proxy 2026-04-05 01:00:43 +08:00
README.md Initial commit: CloudFlare Worker AI account pool proxy 2026-04-05 01:00:43 +08:00

CloudFlare Worker AI Converter

将多个 CloudFlare Worker AI 账号组成号池,通过负载均衡对外提供标准 OpenAI Chat Completion 兼容 API

支持任何 OpenAI 兼容客户端CherryStudio、NextChat、Open WebUI、Chatbox 等)直接接入。

功能特性

  • 多账号号池:添加多个 CloudFlare 账号,自动负载均衡分发请求
  • OpenAI 兼容 API:标准 /v1/chat/completions/v1/models 接口
  • 流式 & 非流式:完整支持 SSE 流式传输和非流式响应
  • Reasoning 模型支持:自动处理 DeepSeek-R1 的 <think> 标签、Gemma-4 / Nemotron 的 reasoning 字段,正确分离思考过程和最终回复
  • 4 种负载均衡策略
    • round-robin:轮询
    • priority:按优先级选择
    • least-used:最少请求优先
    • smart:加权评分(请求数 + 429 惩罚5 分钟线性衰减)
  • 自动重试:号池模式下 429/5xx 错误自动换账号重试(最多 3 次)
  • 限流保护:全局 + 单账号令牌桶限流
  • 模型白名单:控制允许使用的模型,首次运行自动种子常用模型
  • 模型映射:自定义模型名称映射(如 deepseek-r1@cf/deepseek-ai/deepseek-r1-distill-qwen-32b
  • Web 管理控制台React 前端,可视化管理账号、配置、监控
  • 出站代理:支持配置 HTTP 代理访问 CloudFlare API

快速开始

Docker 部署(推荐)

git clone https://git.viloze.com/Derrity/CFWorkerAI_converter.git
cd CFWorkerAI_converter
docker compose up -d
  • Web 控制台:http://localhost:3000
  • 代理 APIhttp://localhost:4141

手动编译

前置要求Go 1.22+、Node.js 18+

# 编译前端
cd web
npm install
npm run build
cd ..

# 编译运行
go build -o cf-ai-proxy .
./cf-ai-proxy

命令行参数

--web-port     Web 控制台端口(默认 3000
--proxy-port   代理 API 端口(默认 4141
--verbose      开启详细日志
--auto-start   自动启动已启用的账号(默认 true
--reset-password  重置管理员密码并退出

使用方式

1. 初始设置

首次启动后访问 http://localhost:3000,设置管理员用户名和密码。

2. 添加 CloudFlare 账号

在 Web 控制台添加账号,需要:

  • CloudFlare Account ID:在 CloudFlare Dashboard → Workers & Pages 页面右侧可找到
  • API Token:在 API Tokens 页面创建,需要 Workers AI 读取权限

3. 接入客户端

在 CherryStudio / NextChat / Open WebUI 等客户端中配置:

API Base URL:  http://localhost:4141/v1
API Key:       (控制台中对应账号的 Proxy API Key

号池模式

启用号池后,所有请求通过统一的 Pool API Key 访问,自动在多个账号间负载均衡:

API Key:  (号池配置中的 Pool API Key

单账号模式

使用各账号独立的 API Key请求固定发到该账号

API Key:  (各账号的 Proxy API Key

4. 发起请求

# 非流式
curl http://localhost:4141/v1/chat/completions \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "@cf/deepseek-ai/deepseek-r1-distill-qwen-32b",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

# 流式
curl http://localhost:4141/v1/chat/completions \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "@cf/google/gemma-4-26b-a4b-it",
    "messages": [{"role": "user", "content": "Hello!"}],
    "stream": true
  }'

# 模型列表
curl http://localhost:4141/v1/models \
  -H "Authorization: Bearer sk-your-api-key"

支持的模型

首次运行时自动添加以下默认模型白名单(可在控制台管理):

模型 类型
@cf/meta/llama-3.1-8b-instruct Chat
@cf/meta/llama-3.3-70b-instruct-fp8-fast Chat
@cf/meta/llama-4-scout-17b-16e-instruct Chat
@cf/qwen/qwen2.5-coder-32b-instruct Chat
@cf/deepseek-ai/deepseek-r1-distill-qwen-32b Chat (Reasoning)
@cf/mistral/mistral-7b-instruct-v0.1 Chat
@cf/google/gemma-7b-it-lora Chat
@cf/baai/bge-base-en-v1.5 Embedding
@cf/baai/bge-large-en-v1.5 Embedding

可通过控制台添加任何 CloudFlare Worker AI 支持的模型,包括新一代 reasoning 模型:

  • @cf/google/gemma-4-26b-a4b-it
  • @cf/nvidia/nemotron-3-120b-a12b

模型映射

在控制台的「模型映射」中配置简称映射,方便客户端使用:

deepseek-r1  →  @cf/deepseek-ai/deepseek-r1-distill-qwen-32b
llama-3.1    →  @cf/meta/llama-3.1-8b-instruct
gemma-4      →  @cf/google/gemma-4-26b-a4b-it

配置后客户端可直接使用简称:

{"model": "deepseek-r1", "messages": [...]}

Reasoning 模型处理

本项目自动处理两种 reasoning 格式:

DeepSeek-R1 系列(老格式 <think> 标签):

  • <think>...</think> 内的内容 → reasoning 字段
  • </think> 之后的内容 → content 字段

Gemma-4 / Nemotron 系列(新格式 reasoning 字段):

  • CF 返回的 delta.reasoning → 直接映射到 reasoning 字段
  • CF 返回的 delta.content → 直接映射到 content 字段

支持 reasoning 的客户端CherryStudio 等)会自动折叠显示思考过程。

项目结构

├── main.go                  # 入口,双端口启动
├── config/
│   └── config.go            # CF API 常量、HTTP Client 工厂
├── store/
│   ├── paths.go             # 数据目录管理
│   ├── account.go           # 账号 CRUD + 号池配置
│   ├── admin.go             # 管理员认证bcrypt
│   ├── model_map.go         # 模型名称映射
│   ├── model_whitelist.go   # 模型白名单
│   └── proxy_config.go      # 出站 HTTP 代理配置
├── instance/
│   ├── manager.go           # 账号实例管理启停、Token 验证)
│   ├── load_balancer.go     # 4 种负载均衡策略
│   ├── rate_limiter.go      # 令牌桶限流
│   ├── usage.go             # 滑动窗口请求统计
│   └── handler.go           # CF ↔ OpenAI 格式转换(核心)
├── handler/
│   ├── proxy.go             # 代理路由 + 认证 + 重试
│   └── console_api.go       # Web 管理 API
├── web/                     # React + Vite + TypeScript 前端
│   ├── embed.go             # go:embed 打包前端
│   └── src/
│       ├── App.tsx           # 主界面
│       ├── api.ts            # API 客户端
│       └── components/       # UI 组件
├── Dockerfile
└── docker-compose.yaml

数据存储

数据保存在 ~/.local/share/cf-worker-ai-pool/Docker 中为 volume

accounts.json          # 账号信息
pool-config.json       # 号池配置
model_whitelist.json   # 模型白名单
model_map.json         # 模型映射
admin.json             # 管理员凭据
proxy-config.json      # 出站代理配置

环境变量

变量 说明 默认值
RATE_LIMIT_RPM 全局请求限制(次/分钟) 不限制

常见问题

忘记管理员密码?

./cf-ai-proxy --reset-password

重启后重新设置。

模型请求超时?

  • 部分 CF 模型首次请求需要冷启动,可能需要 30-60 秒
  • 非流式请求默认超时 120 秒,流式请求无超时
  • 可配置出站 HTTP 代理加速访问

Reasoning 模型只显示思考过程没有回复?

  • 确保客户端未设置过小的 max_tokens
  • 代理默认 max_tokens 为 8192足够 reasoning 模型使用
  • 如果客户端传了较小的 max_tokens,以客户端设置为准

License

MIT