面向 Cloudflare Workers 的 Z.ai OpenAI 兼容代理,内置中文后台,可管理账号池、安全设置与审计日志。
- 运行时:
TypeScript + Hono + Cloudflare Workers - 持久化:
D1 - 后台页面:
Workers Assets - 上游:
https://chat.z.ai
POST /v1/chat/completionsPOST /v1/responsesGET /v1/models- 中文后台:初始化、登录、账号管理、安全设置、日志查看
- 支持
ZAI_JWT自动刷新会话 - 支持
ZAI_SESSION_TOKEN直连并先走/api/v1/auths/校验/刷新 - 支持
ZAI_GUEST_ENABLED=true或后台安全设置开启游客来源,并在后台单独展示游客状态 - 支持持久化账号失败后回退到环境变量账号
- 安装依赖
npm install- 复制开发变量
cp .dev.vars.example .dev.vars- 创建 D1 数据库并把
wrangler.jsonc里的database_id改成真实值
npx wrangler d1 create zai2api- 应用迁移
npx wrangler d1 migrations apply zai2api- 启动本地开发
npm run dev- 创建 D1 数据库并更新
wrangler.jsonc - 配置 Secrets
npx wrangler secret put ACCOUNT_ENCRYPTION_KEY
npx wrangler secret put SETUP_TOKEN
npx wrangler secret put PANEL_PASSWORD
npx wrangler secret put API_PASSWORD
npx wrangler secret put ZAI_JWT说明:
ACCOUNT_ENCRYPTION_KEY:必填,用于加密存储账号凭证SETUP_TOKEN:必填,用于首次初始化后台,避免匿名占坑SETUP_TOKEN:调用/api/admin/setup时仅支持放在Authorization: Bearer <token>中PANEL_PASSWORD:建议首发时直接设置;若不设置,则必须带SETUP_TOKEN先完成一次初始化API_PASSWORD:可选,不填则/v1/*默认不开启密码ZAI_JWT或ZAI_SESSION_TOKEN:二选一即可,推荐ZAI_JWTZAI_GUEST_ENABLED:可选,设为true后可启用游客来源;默认关闭
- 应用 D1 迁移
npx wrangler d1 migrations apply zai2api --remote- 部署
npm run deployZAI_JWT:首选认证来源ZAI_SESSION_TOKEN:可选,会先向/api/v1/auths/校验/刷新ZAI_GUEST_ENABLED:显式开启游客来源,默认falseDEFAULT_MODEL:默认glm-5.1REQUEST_TIMEOUT:默认120秒LOG_RETENTION_DAYS:默认7ACCOUNT_POLL_INTERVAL_SECONDS:默认300ACCOUNT_MAX_ATTEMPTS_PER_REQUEST:默认4,限制单次请求最多尝试的账号数,避免 Cloudflare subrequest 限制ADMIN_COOKIE_NAME:默认zai2api_admin_sessionADMIN_SESSION_TTL_HOURS:默认168ADMIN_COOKIE_SECURE:默认trueADMIN_AUTH_MAX_ATTEMPTS:默认5ADMIN_AUTH_WINDOW_SECONDS:默认900ADMIN_AUTH_LOCK_SECONDS:默认900
curl https://your-worker.example.com/v1/chat/completions \
-H 'content-type: application/json' \
-H 'authorization: Bearer your-api-password' \
-d '{
"model": "glm-5.1",
"messages": [
{"role": "system", "content": "请简洁回答。"},
{"role": "user", "content": "打个招呼。"}
]
}'curl https://your-worker.example.com/v1/responses \
-H 'content-type: application/json' \
-H 'authorization: Bearer your-api-password' \
-d '{
"model": "glm-5.1",
"input": "打个招呼。"
}'- 仓库中仍保留原 Python 代码作为迁移参考
- Cloudflare 版为当前主线,后续新增功能默认在
worker-src/和public/中演进 - 当前仅稳定支持
model、messages/input、stream max_tokens、max_completion_tokens、max_output_tokens会为兼容常见 OpenAI 客户端而放行,但当前不会严格控制上游输出长度temperature、top_p、tools、tool_choice、response_format等常见 OpenAI 参数会做兼容忽略,不再直接返回400- 其中
tools/tool_choice当前仅做兼容透传前忽略,不会真正执行函数调用或工具编排 - 后台写接口仅接受
application/json,并要求同源请求或显式管理请求头,避免 CSRF
Zeabur 可以直接识别根目录 Dockerfile,按 Python FastAPI 版本部署,不依赖 Cloudflare Worker / D1。
建议配置:
- 构建方式:GitHub 仓库导入,使用根目录
Dockerfile - HTTP 端口:使用 Zeabur 注入的
PORT,镜像默认监听8000 - 持久化硬盘:挂载到
/app/data,用于保存 SQLite 数据库与账号池 - 必填环境变量:
PANEL_PASSWORD - 推荐环境变量:
DEFAULT_MODEL=glm-5.1、REQUEST_TIMEOUT=120、ADMIN_COOKIE_SECURE=true - 可选环境变量:
API_PASSWORD、ZAI_JWT、ZAI_SESSION_TOKEN
如果不挂载 /app/data,重启或重新部署后后台账号与日志会丢失。