One API on Workers

一个基于 Cloudflare Workers 分布式、低延迟、高性能的 AI 统一网关,支持渠道管理、负载均衡、用量统计。
本项目基于 dreamhunter2333/awsl-one-api 由 AI 驱动二次开发
## 项目概览 - 基于 Cloudflare Workers:全球分布式网络、低延迟、高性能 - 统一代理入口:支持 `/v1/chat/completions`、`/v1/messages`、`/v1/responses`、`/v1/audio/speech`、`/v1/models` - 负载均衡路由:支持按权重路由,单渠道多 Key,失败重试、Key 轮换和跨渠道 fallback - 配额与计费:支持 Token 级额度控制、全局模型定价、渠道级模型定价 - 观测能力:写入 Cloudflare Analytics Engine,后台提供概览、趋势、分布和用量日志检索 - 管理后台:React + Vite 管理界面,覆盖渠道、令牌、定价、API 测试、系统设置 - 管理员安全:默认管理员令牌登录,可选 Telegram 二次验证,后台登录链路带限速与 session cookie - API 文档:基于 Chanfana 暴露 Swagger、ReDoc、OpenAPI JSON,可在系统设置中开关 ## 支持范围 ### 代理接口 | 路由 | 说明 | 对应渠道类型 | | --- | --- | --- | | `/v1/chat/completions` | OpenAI Chat Completions 兼容代理 | `openai`、`azure-openai`、`gemini` | | `/v1/messages` | Anthropic Claude Messages 兼容代理 | `claude`、`claude-to-openai` | | `/v1/responses` | OpenAI / Azure Responses 代理 | `openai-responses`、`azure-openai-responses` | | `/v1/audio/speech` | TTS 语音生成代理 | `openai-audio`、`azure-openai-audio` | | `/v1/models` | 按 Token 权限和额度过滤后的模型列表 | 根据 Token 可访问渠道动态返回 | ## 部署方式 ### 一键部署: [![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/Tokinx/one-api-workers) ### 手动部署 ```bash 创建 D1 数据库,获取数据库 Name、ID 启用 Analytics Engine 并创建一张数据集,获取数据集 Name 将上述数据更新入 wrangler.jsonc # 设置生产 Secret wrangler secret put ADMIN_TOKEN wrangler secret put CF_API_TOKEN wrangler secret put CF_ACCOUNT_ID # 发布 Worker bun run deploy ``` ### 管理后台 当前后台页面包括: - `Dashboard`:总请求数、成功率、成本、耗时、Token/渠道/模型/提供商分布 - `Usage Logs`:按时间范围、维度、关键字和结果筛选明细日志 - `Channels`:渠道配置、权重、自动重试/轮换、模型映射、拉取上游模型列表 - `Tokens`:API Token 管理、渠道访问范围、额度限制、用量重置 - `Pricing`:全局模型定价编辑,支持按量和按次计费 - `API Test`:直接在后台测试 `/v1/chat/completions`、`/v1/messages`、`/v1/responses`、`/v1/audio/speech` - `System Settings`:Telegram 管理员验证、金额显示精度、API 文档开关 ## 项目结构 ```text one-api-workers/ ├── src/ │ ├── admin/ # 管理接口:auth / channel / token / pricing / analytics / system │ ├── analytics/ # Analytics Engine 写入与查询 │ ├── db/ # D1 初始化与迁移 │ ├── providers/ # 各类上游代理实现 │ ├── billing.ts # 计费与金额精度 │ ├── channel-config.ts # 渠道配置归一化 │ ├── system-config.ts # 系统配置与 Telegram 安全配置 │ └── index.ts # Worker 入口 ├── frontend/ │ ├── src/pages/ # Dashboard / Channels / Tokens / Pricing / Usage Logs / Settings │ ├── src/components/ # 布局、图表、UI 组件 │ └── package.json # 前端构建与 lint ├── public/ # 前端构建产物,由 Worker 直接托管 ├── docs/ # 使用文档与安全文档 ├── tests/ # Mock upstream + 本地 E2E 脚本 ├── wrangler.jsonc # 生产配置 ├── wrangler.local.jsonc # 本地 Worker 配置 ├── type.d.ts # Worker 绑定与共享类型 └── package.json # 根 workspace 与开发命令 ``` ## 快速开始 ### 环境要求 - Bun 1.3+ - Cloudflare 账户,Workers + D1 database + Analytics Engine (`usage_events_by_token`) ### 安装依赖 ```bash bun install ``` ### 配置 Cloudflare 绑定 当前仓库里的 `wrangler.jsonc` / `wrangler.local.jsonc` 已经包含运行所需绑定结构,但你需要替换成自己的环境信息: - `d1_databases[].database_name` / `database_id`:替换为自己的 D1 - `analytics_engine_datasets[].dataset`:默认使用 `usage_events_by_token` - `vars.FRONTEND_DEV_SERVER_URL`:仅本地联调时使用,默认 `http://127.0.0.1:5173` - `assets`:保持 `public/` 与 `ASSETS` 绑定即可 当前配置中的关键 secrets: - `ADMIN_TOKEN`:管理员登录令牌,必需 - `CF_API_TOKEN`:用于查询 Analytics Engine SQL,支持后台分析看板和用量日志 - `CF_ACCOUNT_ID`:与 `CF_API_TOKEN` 配套,用于 Cloudflare Analytics 查询 示例: ```bash wrangler secret put ADMIN_TOKEN wrangler secret put CF_API_TOKEN wrangler secret put CF_ACCOUNT_ID ``` 本地开发可以用 `.dev.vars` 提供这些值;`tests/` 下的脚本也会优先读取这个文件。 ### 数据库初始化与迁移 项目会在首次请求时自动执行 D1 schema 初始化和迁移,不需要额外手动跑 SQL。 如果你希望在部署后主动触发初始化,也可以在通过管理员认证后访问: ```text POST /api/admin/db_initialize ``` ### 本地开发 启动前后端联调: ```bash bun run dev ``` 常用地址: - 前端 Vite 开发服务器:`http://127.0.0.1:5173` - Worker 本地服务:`http://127.0.0.1:8787` 其他常用命令: ```bash bun run dev:worker bun run build bun run cf-typegen cd frontend && bun run lint ``` ## 文档 - [使用与配置](docs/usage-and-configuration.md) - [管理员认证与防护](docs/security/admin-auth-protection.md) - [测试与验证](docs/testing.md) ## 贡献 欢迎提交 Issue 和 Pull Request。 ## 许可证 MIT License 鸣谢:dreamhunter2333/awsl-one-api ## 支持 如有问题或建议,请创建 Issue 或联系维护者。