Spaces:
Running
Running
File size: 7,478 Bytes
5e69343 cef045d 5e69343 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 | ---
title: OB1-2API
emoji: 🏆
colorFrom: blue
colorTo: green
sdk: docker
pinned: false
app_port: 8081
---
<div align="center">
# OB1-2API
**将 [OB-1](https://openblocklabs.com) AI 服务转为 OpenAI 兼容 API**
[快速开始](#快速开始) | [功能特性](#功能特性) | [配置说明](#配置说明) | [API 文档](#api-接口)
</div>
## 功能特性
- 🔄 **OpenAI 兼容** — `/v1/chat/completions`、`/v1/models`,直接对接主流客户端
- 🤖 **Anthropic Messages API** — `/v1/messages`,兼容 Claude Code 等 Anthropic 原生客户端
- 👥 **多账号轮换** — 缓存优先 / 平衡轮换 / 性能优先三种调度策略
- 🔐 **自动 Token 管理** — 基于 WorkOS OAuth 设备授权,自动续期,401 即时重试
- 📡 **流式输出** — 完整 SSE 流式响应,实时返回生成内容
- 🖥️ **Web 管理面板** — 账号、API Key、系统设置、设备授权一站式操作
- ⚡ **热重载配置** — 后台修改即时生效,无需重启服务
- 🌐 **代理支持** — HTTP 代理配置,可视化连通性测试
## 快速开始
### 直接运行
```bash
# 克隆项目
git clone https://github.com/longnghiemduc6-art/ob12api.git
cd ob12api
# 安装依赖
pip install -r requirements.txt
# 启动服务
python main.py
```
### Docker 部署
```bash
docker run -d \
--name ob12api \
-p 8081:8081 \
-v ./config:/app/config \
-v ./data:/app/data \
ob12api
```
### Docker Compose
```yaml
version: '3.8'
services:
ob12api:
build: .
ports:
- "8081:8081"
volumes:
- ./config:/app/config
- ./data:/app/data
restart: unless-stopped
```
服务启动后访问 `http://localhost:8081` 进入管理面板。
## 配置说明
编辑 `config/setting.toml`:
```toml
[global]
api_key = "your-api-key" # 客户端调用使用的 API Key
[server]
host = "0.0.0.0"
port = 8081
[admin]
username = "admin"
password = "admin" # ⚠️ 请务必修改默认密码
[proxy]
url = "" # HTTP 代理地址(可选)
[ob1]
rotation_mode = "cache-first" # 调度模式:cache-first / balanced / performance
[logging]
level = "INFO" # 日志级别:DEBUG / INFO / WARNING / ERROR
```
## 添加账号
进入管理面板后,支持两种方式添加 OB-1 账号:
| 方式 | 说明 |
|------|------|
| **设备授权** | 点击「设备授权」按钮,获取授权码后在 OB-1 网站完成授权 |
| **JSON 导入** | 批量导入已有账号的 JSON 数据 |
## 调度模式
| 模式 | 策略 | 适用场景 |
|------|------|----------|
| `cache-first` | 优先使用上次成功的账号,减少切换开销 | 稳定使用 |
| `balanced` | 轮流使用各账号,均衡分配请求负载 | 日常使用,延长账号寿命 |
| `performance` | 随机选择可用账号,分散请求压力 | 高并发场景 |
## API 接口
### 获取模型列表
```bash
curl http://localhost:8081/v1/models \
-H "Authorization: Bearer your-api-key"
```
### 对话补全(流式)
```bash
curl http://localhost:8081/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-4",
"messages": [{"role": "user", "content": "Hello"}],
"stream": true
}'
```
### 对话补全(非流式)
```bash
curl http://localhost:8081/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-4",
"messages": [{"role": "user", "content": "Hello"}],
"stream": false
}'
```
## 项目结构
```
ob12api/
├── main.py # 启动入口
├── requirements.txt # Python 依赖
├── config/
│ ├── setting.toml # 配置文件
│ ├── accounts.json # 账号数据(自动生成)
│ └── api_keys.json # API Key 数据(自动生成)
├── data/
│ └── tokens.json # OAuth Token 存储
├── src/
│ ├── main.py # FastAPI 应用
│ ├── api/
│ │ ├── routes.py # OpenAI 兼容路由
│ │ └── admin.py # 管理后台接口
│ ├── core/
│ │ ├── config.py # 配置加载(热重载)
│ │ ├── auth.py # 认证鉴权
│ │ ├── models.py # 请求/响应模型
│ │ └── logger.py # 日志系统
│ └── services/
│ ├── token_manager.py # Token 生命周期管理
│ ├── ob1_client.py # OB-1 API 客户端
│ └── api_key_manager.py # API Key 管理
└── static/ # 管理面板前端资源
```
## 常见问题
### Docker 相关
**Q: Docker 部署后设备授权报错 400**
确保容器能访问外网(WorkOS API)。如需代理,在 `config/setting.toml` 中配置:
```toml
[proxy]
url = "http://your-proxy:7890"
```
或在 Docker 启动时传入网络代理环境变量。
**Q: Docker 重启后管理面板需要重新登录**
这是正常现象。管理面板的 JWT 密钥在每次进程启动时重新生成,重启后旧 Token 失效,重新登录即可。
**Q: Docker 挂载卷后配置不生效**
确认挂载路径正确,配置文件应在宿主机的 `./config/setting.toml`:
```bash
docker run -d -p 8081:8081 \
-v ./config:/app/config \
-v ./data:/app/data \
ob12api
```
### 启动报错
**Q: 启动时报 `FileNotFoundError` 或 `KeyError`**
缺少配置文件或配置项不完整。确保 `config/setting.toml` 存在且包含必要字段(`[global]`、`[server]`、`[ob1]`)。可参考上方 [配置说明](#配置说明)。
**Q: 启动时报 `JSONDecodeError`**
`config/accounts.json` 或 `data/tokens.json` 文件损坏。删除对应文件后重启,系统会自动重建:
```bash
rm config/accounts.json data/tokens.json
python main.py
```
### 账号与 Token
**Q: 所有请求返回 503 `No valid OB-1 token`**
所有账号的 Token 均已过期且自动刷新失败。进入管理面板检查账号状态,尝试重新授权或删除失效账号重新添加。
**Q: 设备授权时 WorkOS 返回错误**
- 检查网络连通性,确认能访问 `api.workos.com`
- 如使用代理,确认代理配置正确且代理服务正常运行
- 在管理面板的「代理设置」中可测试连通性
**Q: 调用 API 返回 401 Unauthorized**
- 检查请求头中的 API Key 是否正确:`Authorization: Bearer your-api-key`
- Anthropic 格式也支持 `x-api-key` 头
- 确认 `config/setting.toml` 中的 `api_key` 或管理面板中已添加对应的 Key
### 代理相关
**Q: 配置代理后仍然连接超时**
确认代理地址格式正确(需包含协议):`http://127.0.0.1:7890`,不要写成 `127.0.0.1:7890`。可在管理面板「代理设置」中点击测试按钮验证。
## 环境要求
- Python >= 3.11
- 依赖:FastAPI, uvicorn, httpx, PyJWT, tomli_w
## Star History
[](https://star-history.com/#longnghiemduc6-art/ob12api&Date)
## 免责声明
**本项目仅供学习和研究用途,不得用于商业目的。使用者应遵守相关服务条款和法律法规,因使用本项目产生的任何后果由使用者自行承担。**
## License
MIT |