# ob12api
**Repository Path**: DuKouHu/ob12api
## Basic Information
- **Project Name**: ob12api
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-13
- **Last Updated**: 2026-03-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# OB1-2API
**将 [OB-1](https://openblocklabs.com) AI 服务转为 OpenAI 兼容 API**
[快速开始](#快速开始) | [功能特性](#功能特性) | [配置说明](#配置说明) | [API 文档](#api-接口)
## 功能特性
- 🔄 **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