- 支持 MiniMax/OpenAI/Google Gemini/智谱/Kimi 五个平台 - 插件化 Provider 架构,自动发现注册 - 多维度 QuotaRule 额度追踪(固定间隔/自然周期/API同步/手动) - OpenAI + Anthropic 兼容 API 代理,SSE 流式转发 - Model 路由表 + 额度耗尽自动 fallback - 多媒体任务队列(图片/语音/视频) - Vue3 + Tailwind 单文件 Web 仪表盘 - Docker 一键部署 Made-with: Cursor
124 lines
3.6 KiB
Markdown
124 lines
3.6 KiB
Markdown
# Plan Manager - 多平台 Coding Plan 统一管理系统
|
||
|
||
统一管理 MiniMax、OpenAI、Google Gemini、智谱、Kimi 等多个 AI 平台的订阅计划,提供额度查询、刷新倒计时、API 代理转发、多媒体任务队列和 Web 仪表盘。
|
||
|
||
## 功能
|
||
|
||
- **多 Plan 管理** -- 增删改查,支持任意数量的 AI 平台订阅
|
||
- **多维度额度追踪** -- 同一 Plan 可配置多条 QuotaRule(如 Kimi 的"周额度 + 5 小时滚动窗口")
|
||
- **四种刷新策略** -- 固定间隔 / 自然周期 / API 同步 / 手动
|
||
- **API 代理** -- OpenAI (`/v1/chat/completions`) + Anthropic (`/v1/messages`) 兼容端点
|
||
- **智能路由** -- 按 model 名称自动路由到对应 Plan,额度耗尽自动 fallback
|
||
- **任务队列** -- 支持图片、语音、视频等多媒体任务的异步提交和消费
|
||
- **插件化 Provider** -- 新增平台只需添加一个 Python 文件
|
||
- **Web 仪表盘** -- 额度进度条、刷新倒计时、队列管理、配置页
|
||
|
||
## 快速开始
|
||
|
||
### Docker 部署(推荐)
|
||
|
||
```bash
|
||
# 1. 编辑配置文件,填入各平台 API Key
|
||
vim config.yaml
|
||
|
||
# 2. 启动
|
||
docker compose up -d
|
||
|
||
# 3. 访问 http://localhost:8080
|
||
```
|
||
|
||
### 本地开发
|
||
|
||
```bash
|
||
# 安装依赖
|
||
pip install -r requirements.txt
|
||
|
||
# 启动
|
||
uvicorn app.main:app --host 0.0.0.0 --port 8080 --reload
|
||
```
|
||
|
||
## 配置说明
|
||
|
||
编辑 `config.yaml`:
|
||
|
||
```yaml
|
||
server:
|
||
host: "0.0.0.0"
|
||
port: 8080
|
||
proxy_api_key: "your-proxy-key" # 代理端点鉴权 Key,留空则不鉴权
|
||
|
||
plans:
|
||
- name: "Kimi Coding Plan"
|
||
provider: kimi
|
||
api_key: "sk-xxx"
|
||
api_base: "https://api.moonshot.cn/v1"
|
||
quota_rules:
|
||
- rule_name: "周额度"
|
||
quota_total: 500
|
||
quota_unit: requests
|
||
refresh_type: calendar_cycle
|
||
calendar_unit: weekly
|
||
calendar_anchor: { weekday: 1, hour: 0 }
|
||
- rule_name: "5小时滚动窗口"
|
||
quota_total: 50
|
||
quota_unit: requests
|
||
refresh_type: fixed_interval
|
||
interval_hours: 5
|
||
```
|
||
|
||
### QuotaRule 刷新类型
|
||
|
||
| refresh_type | 说明 | 关键参数 |
|
||
|---|---|---|
|
||
| `fixed_interval` | 固定间隔刷新(如 5h、13h) | `interval_hours` |
|
||
| `calendar_cycle` | 自然周期(日/周/月) | `calendar_unit` + `calendar_anchor` |
|
||
| `api_sync` | 调用平台 API 查询真实余额 | 无 |
|
||
| `manual` | 手动重置 | 无 |
|
||
|
||
## API 代理使用
|
||
|
||
配置好 Plan 和 Model 路由后,可将本系统作为统一网关:
|
||
|
||
```bash
|
||
# OpenAI 兼容格式
|
||
curl http://localhost:8080/v1/chat/completions \
|
||
-H "Authorization: Bearer your-proxy-key" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"model": "moonshot-v1-8k", "messages": [{"role": "user", "content": "hello"}]}'
|
||
|
||
# 指定 Plan(跳过 model 路由)
|
||
curl http://localhost:8080/v1/chat/completions \
|
||
-H "Authorization: Bearer your-proxy-key" \
|
||
-H "X-Plan-Id: plan-id-here" \
|
||
-d '...'
|
||
|
||
# Anthropic 兼容格式
|
||
curl http://localhost:8080/v1/messages \
|
||
-H "x-api-key: your-proxy-key" \
|
||
-d '{"model": "glm-4-plus", "messages": [{"role": "user", "content": "hello"}]}'
|
||
```
|
||
|
||
## 扩展新平台
|
||
|
||
在 `app/providers/` 下新建文件即可,无需修改核心代码:
|
||
|
||
```python
|
||
# app/providers/new_platform.py
|
||
from app.providers.base import BaseProvider, Capability
|
||
|
||
class NewPlatformProvider(BaseProvider):
|
||
name = "new_platform"
|
||
display_name = "New Platform"
|
||
capabilities = [Capability.CHAT]
|
||
|
||
async def chat(self, messages, model, plan, stream=True, **kwargs):
|
||
# 实现 chat 逻辑...
|
||
yield "data: ..."
|
||
```
|
||
|
||
然后在 `config.yaml` 或 Web UI 中添加对应的 Plan 即可。
|
||
|
||
## API 文档
|
||
|
||
启动后访问 `http://localhost:8080/docs` 查看自动生成的 OpenAPI 文档。
|