# one-api
**Repository Path**: foreignwool/one-api
## Basic Information
- **Project Name**: one-api
- **Description**: 开源api,用来api中转和配置
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-05-03
- **Last Updated**: 2026-05-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
中文 | English
# One Hub
> [!WARNING]
> 本项目为个人学习使用,不保证稳定性,且不提供任何技术支持,使用者必须在遵循各 AI 供应商的使用条款以及法律法规的情况下使用,不得用于非法用途。
> 根据[《生成式人工智能服务管理暂行办法》](http://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm)的要求,请勿对中国地区公众提供一切未经备案的生成式人工智能服务。
---
## 目录
- [项目简介](#项目简介)
- [功能特性](#功能特性)
- [技术架构](#技术架构)
- [项目结构](#项目结构)
- [快速开始](#快速开始)
- [Docker 部署](#docker-部署)
- [环境变量说明](#环境变量说明)
- [支持的模型列表](#支持的模型列表)
- [贡献指南](#贡献指南)
- [许可证](#许可证)
---
## 项目简介
One Hub 是一个基于 [one-api](https://github.com/songquanpeng/one-api) 二次开发的 **大模型 API 网关与管理平台**。它提供了一个统一的 OpenAI 兼容接口,能够将请求智能路由到 40+ 个不同的 AI 供应商,包括 OpenAI、Anthropic、Google Gemini、百度文心、通义千问等国内外主流大模型服务。
通过 One Hub,你可以:
- **统一接口** — 用一套 API Key 调用所有供应商的大模型
- **负载均衡** — 多渠道智能调度,支持故障自动转移
- **精细管控** — 用户分组、令牌管理、模型权限、用量计费一站式管理
- **灵活扩展** — 支持虚拟模型映射、自定义价格、模型通配符
[演示网站](https://one-hub.xiao5.info/) | [在线文档](https://one-hub-doc.vercel.app/)
---
## 功能特性
### 核心功能
- **全新 UI 界面** — 基于 React + Material UI 的现代化管理后台
- **用户仪表盘** — 用户可查看用量、消费、模型统计等数据
- **管理员数据统计** — 多维度数据分析与可视化统计界面
- **供应商管理** — 重构的供应商模块,支持 40+ AI 供应商的统一接入
- **渠道管理** — 支持批量管理、健康检查、余额查询、自动测试
- **用户管理** — 多级用户分组,支持分组自动升级
- **令牌管理** — 灵活的 API Token 配置,支持模型权限控制与用量限制
### 模型与计费
- **模型通配符** — 支持通配符匹配模型名称
- **模型按次收费** — 支持按 Token 和按次两种计费模式
- **自定义价格** — 支持自定义模型价格与完成倍率
- **模型价格更新** — 支持自动从价格服务更新模型定价(覆盖更新、只更新现有价格、只新增价格等多种策略)
- **虚拟模型** — 支持虚拟模型配置,可映射到实际模型并控制路由
- **用户月度账单** — 支持生成用户月度账单数据
### 认证与安全
- **多种登录方式** — 密码登录、GitHub OAuth、飞书 OAuth、微信登录、OIDC、WebAuthn/Passkey
- **Telegram Bot** — 集成 Telegram 机器人,支持用户绑定与通知
- **内容安全** — 可配置的关键词内容审查
- **速率限制** — 全局 API 与 Web 接口速率限制
### API 兼容性
- **OpenAI 兼容接口** — 完全兼容 OpenAI API 格式(`/v1/`)
- **Claude 原生接口** — 支持 Claude 格式 API 请求(`/claude/v1/`)
- **Gemini 原生接口** — 支持 Gemini 格式 API 请求(`/gemini/`)
- **函数调用** — 支持和优化非 OpenAI 模型的 Function Call
- **流式响应** — 完整的 SSE 流式传输支持
### 部署与运维
- **多数据库支持** — SQLite(默认)、MySQL、PostgreSQL
- **Redis 缓存** — 可选 Redis 缓存,提升并发性能
- **多节点部署** — 支持主从节点分布式部署
- **Prometheus 监控** — 内置 Prometheus 指标端点
- **Uptime Kuma** — 支持集成 Uptime Kuma 状态页展示
- **日志管理** — 基于 zap 的结构化日志,支持日志轮转与压缩
- **配置文件** — 支持 YAML 配置文件启动程序
### 其他特性
- **MCP 服务** — 支持 Model Context Protocol 服务器
- **支付功能** — 支持支付宝、微信支付、Stripe、ePay 等支付方式
- **通知系统** — 支持邮件、企业微信、钉钉、飞书、PushDeer、Telegram 等通知渠道
- **对象存储** — 支持 SMMS、Imgur、阿里云 OSS、S3 兼容存储
- **搜索引擎集成** — 支持 SearxNG、Tavily 搜索
- **国际化** — 支持中文、英文、日文、繁体中文
---
## 技术架构
```
┌─────────────────────────────────────────────────────────┐
│ 前端 (React/Vite) │
│ MUI · Redux · React Router · i18next │
├─────────────────────────────────────────────────────────┤
│ HTTP 路由层 (Gin) │
│ Web SPA · REST API · OpenAI Relay · Claude/Gemini │
├────────────┬────────────┬────────────┬──────────────────┤
│ 中间件层 │ 认证层 │ 限流层 │ 安全检查 │
│ 日志/会话 │ JWT/OAuth │ Rate Limit│ 内容审查 │
├────────────┴────────────┴────────────┴──────────────────┤
│ Relay 中继层 │
│ 请求解析 · 虚拟模型映射 · 供应商路由 · 重试策略 │
├─────────────────────────────────────────────────────────┤
│ 供应商适配层 (40+) │
│ OpenAI · Claude · Gemini · 文心 · 千问 · Deepseek ... │
├─────────────────────────────────────────────────────────┤
│ 数据层 │
│ GORM (MySQL / PostgreSQL / SQLite) │
│ Redis (可选缓存/限流) │
└─────────────────────────────────────────────────────────┘
```
### 技术栈
| 层级 | 技术选型 |
|------|---------|
| 前端 | React 18 + Vite + Material UI 5 + Redux + i18next |
| 后端 | Go 1.25 + Gin + GORM + Viper |
| 数据库 | SQLite / MySQL 8 / PostgreSQL |
| 缓存 | Redis (可选) + FreeCache (内存缓存) |
| 日志 | Zap + Lumberjack (日志轮转) |
| 认证 | JWT + OAuth2 + OIDC + WebAuthn |
| 监控 | Prometheus + Uptime Kuma |
| 部署 | Docker + Docker Compose + Systemd |
---
## 项目结构
```
one-api/
├── main.go # 程序入口
├── go.mod / go.sum # Go 依赖管理
├── config.example.yaml # 配置文件示例
├── docker-compose.yml # Docker Compose 编排文件
├── Dockerfile # Docker 构建文件
├── makefile # 构建脚本
├── deploy.sh # 一键部署脚本
├── one-api.service # Systemd 服务模板
│
├── cli/ # CLI 参数与数据导出
├── common/ # 公共工具包
│ ├── config/ # 配置变量与常量
│ ├── cache/ # 内存缓存
│ ├── redis/ # Redis 客户端
│ ├── logger/ # 日志
│ ├── notify/ # 通知分发
│ ├── oidc/ # OIDC 认证
│ ├── webauthn/ # WebAuthn 认证
│ ├── telegram/ # Telegram Bot
│ ├── storage/ # 对象存储
│ ├── search/ # 搜索引擎
│ └── requester/ # HTTP 客户端
├── controller/ # HTTP 控制器(约 38 个文件)
├── middleware/ # Gin 中间件
├── model/ # 数据库模型与迁移
├── router/ # 路由注册
├── relay/ # 请求中继与路由
│ ├── midjourney/ # Midjourney 中继
│ ├── relay_util/ # 配额计算工具
│ └── task/ # 异步任务(Kling、Suno)
├── providers/ # 供应商适配器(40+ 个供应商)
│ └── base/ # 供应商基础接口
├── payment/ # 支付网关
│ ├── gateway/ # 支付宝/微信/Stripe/ePay
│ └── types/ # 支付类型定义
├── mcp/ # Model Context Protocol
│ └── tools/ # MCP 工具
├── safty/ # 内容安全/审查
├── metrics/ # Prometheus 指标
├── cron/ # 定时任务
├── i18n/ # 国际化资源
├── docs/ # VitePress 文档站点
└── web/ # React 前端
└── src/ # 前端源码
```
---
## 快速开始
### 环境要求
- Go 1.25+
- Node.js 22+ (仅开发前端时需要)
- Yarn (仅开发前端时需要)
### 方式一:直接运行(开发模式)
```bash
# 克隆项目
git clone https://github.com/MartialBE/one-api.git
cd one-api
# 构建前端
cd web
yarn install
yarn build
cd ..
# 构建并运行后端
go build -o one-api .
./one-api
```
程序默认监听 `3000` 端口,访问 `http://localhost:3000` 即可进入管理界面。
### 方式二:使用 Makefile
```bash
make web # 构建前端
make one-api # 构建前端 + 后端
```
### 方式三:使用配置文件启动
将 `config.example.yaml` 复制为 `config.yaml`,根据需要修改配置后启动:
```bash
cp config.example.yaml config.yaml
# 编辑 config.yaml 修改配置
./one-api
```
### 默认管理员账号
首次启动后,使用以下默认账号登录:
- 用户名:`root`
- 密码:`123456`
> 请在首次登录后立即修改默认密码!
---
## Docker 部署
### 使用 Docker Compose(推荐)
```bash
# 克隆项目
git clone https://github.com/MartialBE/one-api.git
cd one-api
# 复制并修改配置
cp config.example.yaml config.yaml
# 编辑 config.yaml 和 docker-compose.yml 中的数据库密码等配置
# 启动服务
docker-compose up -d
```
`docker-compose.yml` 包含三个服务:
| 服务 | 镜像 | 说明 |
|------|------|------|
| one-hub | 本地构建 | 主应用,端口 3000 |
| redis | redis:latest | Redis 缓存 |
| db | mysql:8.2.0 | MySQL 数据库 |
查看日志:
```bash
docker-compose logs -f one-hub
```
### 使用 Docker 单独运行
如果已有数据库和 Redis,可以直接运行应用容器:
```bash
docker run -d \
--name one-hub \
-p 3000:3000 \
-v $(pwd)/data:/data \
-v $(pwd)/config.yaml:/data/config.yaml \
-e SQL_DSN="user:password@tcp(host:3306)/one-api" \
-e REDIS_CONN_STRING="redis://default:password@host:6379" \
-e SESSION_SECRET="your-random-session-secret" \
-e USER_TOKEN_SECRET="your-random-token-secret-at-least-32-chars" \
-e TZ=Asia/Shanghai \
--restart always \
ghcr.io/martialbe/one-api:latest
```
### Docker 镜像
Docker 镜像在以下平台可用:
- **GitHub Container Registry**: `ghcr.io/martialbe/one-api`
- **Docker Hub**: `martialbe/one-api`
### 使用 SQLite(无需外部数据库)
如果不想部署 MySQL/PostgreSQL,可以使用默认的 SQLite:
```bash
docker run -d \
--name one-hub \
-p 3000:3000 \
-v $(pwd)/data:/data \
-e SESSION_SECRET="your-random-session-secret" \
-e USER_TOKEN_SECRET="your-random-token-secret-at-least-32-chars" \
-e TZ=Asia/Shanghai \
--restart always \
ghcr.io/martialbe/one-api:latest
```
---
## 环境变量说明
配置支持通过环境变量或 `config.yaml` 配置文件设置。配置文件中的键名中的 `.` 在环境变量中替换为 `_`(例如 `global.api_rate_limit` 对应环境变量 `GLOBAL_API_RATE_LIMIT`)。
### 服务器设置
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `PORT` | `3000` | 服务监听端口 |
| `GIN_MODE` | `release` | Gin 运行模式,可选 `release` / `debug` |
| `LOG_LEVEL` | `info` | 日志级别:`debug` / `info` / `warn` / `error` / `fatal` / `panic` |
| `LOG_DIR` | `./logs` | 日志输出目录 |
| `SESSION_SECRET` | 随机值 | 会话加密密钥 |
| `LANGUAGE` | `zh_CN` | 默认 UI 语言,支持 `zh_CN` / `en_US` / `ja_JP` / `zh_HK` |
| `TRUSTED_HEADER` | 空 | 可信代理头,如 `CF-Connecting-IP`(Cloudflare) |
| `FICON` | 空 | 自定义 Favicon,支持 URL 或文件路径 |
| `FRONTEND_BASE_URL` | 空 | 前端重定向地址,仅从节点使用 |
### 数据库设置
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `SQL_DSN` | 空 | 数据库连接串;为空时使用 SQLite |
| `SQLITE_PATH` | `one-api.db` | SQLite 数据库文件路径 |
| `SQLITE_BUSY_TIMEOUT` | `3000` | SQLite 忙等待超时(毫秒) |
| `REDIS_CONN_STRING` | 空 | Redis 连接串,格式:`redis://default:password@host:port` |
| `REDIS_DB` | `0` | Redis 数据库编号 |
### 缓存与同步
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `MEMORY_CACHE_ENABLED` | `false` | 启用内存缓存 |
| `SYNC_FREQUENCY` | `600` | 缓存模式下数据库同步间隔(秒) |
| `NODE_TYPE` | `master` | 节点类型:`master`(主节点)/ `slave`(从节点) |
| `BATCH_UPDATE_ENABLED` | `false` | 启用数据库批量更新 |
| `BATCH_UPDATE_INTERVAL` | `5` | 批量更新间隔(秒) |
### 安全设置
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `USER_TOKEN_SECRET` | 空 | 用户令牌签名密钥(至少 32 位随机字符串) |
| `HASHIDS_SALT` | 空 | Sqids 编码字母表参数 |
| `DISABLE_TOKEN_ENCODERS` | `false` | 禁用 tiktoken 编码器(可节省约 40MB 内存,但 Token 计数不精确) |
### 速率限制
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `GLOBAL_API_RATE_LIMIT` | `180` | API 速率限制(单 IP / 3 分钟) |
| `GLOBAL_WEB_RATE_LIMIT` | `100` | Web 速率限制(单 IP / 3 分钟) |
### 连接设置
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `RELAY_TIMEOUT` | `0` | 中继请求超时时间(秒),0 表示不限制 |
| `CONNECT_TIMEOUT` | `5` | 连接超时时间(秒) |
| `POLLING_INTERVAL` | `0` | 渠道检查的请求间隔(秒) |
### 自动更新价格
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `AUTO_PRICE_UPDATES` | `false` | 启用模型价格自动更新 |
| `AUTO_PRICE_UPDATES_MODE` | `system` | 更新模式:`add`(仅新增)/ `overwrite`(全部覆盖)/ `update`(只更新现有)/ `system`(使用程序内置) |
| `AUTO_PRICE_UPDATES_INTERVAL` | `1440` | 更新间隔(分钟) |
### Telegram 设置
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `TG_BOT_API_KEY` | 空 | Telegram Bot API 密钥 |
| `TG_WEBHOOK_SECRET` | 空 | Webhook 密钥(为空时使用轮询模式) |
| `TG_HTTP_PROXY` | 空 | Telegram 代理地址 |
### 通知设置
在 `config.yaml` 的 `notify` 节点下配置通知渠道:
- **email** — 邮件通知(需配置 SMTP)
- **wecom** — 企业微信机器人
- **dingTalk** — 钉钉机器人
- **lark** — 飞书机器人
- **pushdeer** — PushDeer
- **telegram** — Telegram 通知
### 存储设置
在 `config.yaml` 的 `storage` 节点下配置对象存储(用于图片生成场景):
- **smms** — SM.MS 图床
- **imgur** — Imgur
- **alioss** — 阿里云 OSS
- **s3** — S3 兼容存储(支持 Cloudflare R2 等)
### MCP 设置
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `MCP_ENABLE` | `false` | 启用 Model Context Protocol 服务 |
### 监控设置
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `METRICS_USER` | 空 | Prometheus 指标端点用户名 |
| `METRICS_PASSWORD` | 空 | Prometheus 指标端点密码 |
### Uptime Kuma
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `UPTIME_KUMA_ENABLE` | `false` | 启用 Uptime Kuma 状态页 |
| `UPTIME_KUMA_DOMAIN` | 空 | Uptime Kuma 地址 |
| `UPTIME_KUMA_STATUS_PAGE_NAME` | 空 | 状态页面 slug |
---
## 支持的模型列表
One Hub 支持 40+ 个 AI 供应商,通过 OpenAI 兼容接口统一调用。
### 供应商能力总览
| 供应商 | Chat | Embeddings | Audio | Images | 其他 |
|--------|------|------------|-------|--------|------|
| [OpenAI](https://platform.openai.com/) | ✅ | ✅ | ✅ | ✅ | — |
| [Azure OpenAI](https://oai.azure.com/) | ✅ | ✅ | ✅ | ✅ | — |
| [Azure Speech](https://portal.azure.com/) | — | — | ⚠️ TTS | — | — |
| [Azure Databricks](https://azure.microsoft.com/) | ✅ | — | — | — | — |
| [Anthropic / Claude](https://www.anthropic.com/) | ✅ | — | — | — | — |
| [Google Gemini](https://aistudio.google.com/) | ✅ | — | — | — | — |
| [Google Vertex AI](https://cloud.google.com/vertex-ai) | ✅ | — | — | — | — |
| [百度文心](https://console.bce.baidu.com/qianfan/overview) | ✅ | ✅ | — | — | — |
| [通义千问](https://dashscope.console.aliyun.com/overview) | ✅ | ✅ | — | — | — |
| [讯飞星火](https://console.xfyun.cn/) | ✅ | — | — | — | — |
| [智谱 AI](https://open.bigmodel.cn/overview) | ✅ | ✅ | — | ⚠️ 图片生成 | — |
| [腾讯混元](https://cloud.tencent.com/product/hunyuan) | ✅ | — | — | — | — |
| [百川](https://platform.baichuan-ai.com/) | ✅ | ✅ | — | — | — |
| [MiniMax](https://www.minimaxi.com/) | ✅ | ✅ | — | — | — |
| [Deepseek](https://platform.deepseek.com/) | ✅ | — | — | — | — |
| [Moonshot](https://moonshot.ai/) | ✅ | — | — | — | — |
| [Mistral](https://mistral.ai/) | ✅ | ✅ | — | — | — |
| [Groq](https://console.groq.com/) | ✅ | — | — | — | — |
| [Amazon Bedrock](https://console.aws.amazon.com/bedrock/) | ⚠️ 仅 Anthropic 模型 | — | — | — | — |
| [零一万物](https://platform.lingyiwanwu.com/) | ✅ | — | — | — | — |
| [Cloudflare AI](https://ai.cloudflare.com/) | ✅ | — | ⚠️ STT | ⚠️ 图片生成 | — |
| [Cohere](https://cohere.com/) | ✅ | — | — | — | — |
| [Stability AI](https://platform.stability.ai/) | — | — | — | ⚠️ 图片生成 | — |
| [Coze](https://www.coze.com/) | ✅ | — | — | — | — |
| [Ollama](https://github.com/ollama/ollama) | ✅ | ✅ | — | — | — |
| [OpenRouter](https://openrouter.ai/) | ✅ | — | — | — | — |
| [Midjourney](https://www.midjourney.com/) | — | — | — | — | midjourney-proxy |
| [Suno](https://suno.com/) | — | — | — | — | Suno-API |
| [xAI](https://x.ai/) | ✅ | — | — | — | — |
| [GitHub Models](https://github.com/marketplace/models) | ✅ | — | — | — | — |
| [Siliconflow](https://siliconflow.cn/) | ✅ | — | — | — | — |
| [Jina](https://jina.ai/) | — | ✅ | — | — | Rerank |
| [Recraft AI](https://www.recraft.ai/) | — | — | — | ✅ | 向量化 |
| [Replicate](https://replicate.com/) | ✅ | — | — | — | — |
| [可灵 Kling](https://klingai.kuaishou.com/) | — | — | — | — | 视频生成 |
### 原生 API 兼容
除 OpenAI 兼容接口外,One Hub 还支持以下原生 API 格式:
- **Claude 格式** — `/claude/v1/messages`
- **Gemini 格式** — `/gemini/v1beta/models/{model}`
- **OpenAI Billing 兼容** — `/dashboard/billing/subscription`
### 模型价格管理
如果发现缺少新模型,请在管理后台的 **模型价格 → 更新价格** 中进行更新。支持以下策略:
- **system** — 使用程序内置价格,启动时自动从价格服务器更新
- **overwrite** — 全部覆盖现有价格
- **update** — 只更新已有模型的价格
- **add** — 只新增不存在的模型价格
---
## 贡献指南
欢迎提交 Issue 和 Pull Request 来帮助改进项目!
### 开发环境搭建
```bash
# 1. Fork 并克隆仓库
git clone https://github.com/your-username/one-api.git
cd one-api
# 2. 启动前端开发服务器
cd web
yarn install
yarn dev # 默认运行在 localhost:5173,代理到 localhost:3000
# 3. 启动后端
cd ..
go run main.go
```
### 提交规范
- 使用清晰的提交信息,描述修改的目的和内容
- 一个 PR 只做一件事,保持变更范围小且聚焦
- 确保代码通过现有测试
- 新功能请补充必要的测试用码
### 代码规范
- Go 代码遵循标准 Go 规范
- 前端代码遵循项目 ESLint + Prettier 配置
---
## 许可证
本项目基于 [MIT License](./LICENSE) 开源。
---
## 致谢
本项目基于以下开源项目:
- [one-api](https://github.com/songquanpeng/one-api) — 本项目的基础
- [Berry Free React Admin Template](https://github.com/codedthemes/berry-free-react-admin-template) — 前端界面
- [minimal-ui-kit](https://github.com/minimal-ui-kit/material-kit-react) — 部分样式
- [new-api](https://github.com/Calcium-Ion/new-api) — Midjourney / Suno 模块
- [go-zero](https://github.com/zeromicro/go-zero) — Token 限流器实现
感谢以上项目的作者和所有贡献者!