Files
ViGent2/Docs/BACKEND_README.md
Kevin Wong 945262a7fc 更新
2026-02-06 16:02:58 +08:00

183 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ViGent2 后端开发指南
本文档提供后端架构概览与接口规范。开发规范与分层约定见 `Docs/BACKEND_DEV.md`
---
## 🏗️ 架构概览
后端采用 **FastAPI** 框架,基于 Python 3.10+ 构建主要负责业务逻辑处理、AI 任务调度以及与各微服务组件的交互。
### 目录结构
```
backend/
├── app/
│ ├── api/ # 兼容路由入口 (透传到 modules)
│ ├── core/ # 核心配置 (config.py, security.py, response.py)
│ ├── modules/ # 业务模块 (router/service/workflow/schemas)
│ ├── repositories/ # Supabase 数据访问
│ ├── services/ # 外部服务集成 (TTS/Remotion/Storage 等)
│ └── tests/ # 单元测试与集成测试
├── scripts/ # 运维脚本 (watchdog.py, init_db.py)
├── assets/ # 资源库 (fonts, bgm, styles)
└── requirements.txt # 依赖清单
```
---
## 🔌 API 接口规范
后端服务默认运行在 `8006` 端口。
- **文档地址**: `http://localhost:8006/docs` (Swagger UI)
- **认证方式**: HttpOnly Cookie (JWT)
### 核心模块
1. **认证 (Auth)**
* `POST /api/auth/login`: 用户登录 (手机号)
* `POST /api/auth/register`: 用户注册
* `GET /api/auth/me`: 获取当前用户信息
2. **视频生成 (Videos)**
* `POST /api/videos/generate`: 提交生成任务
* `GET /api/videos/tasks/{task_id}`: 查询任务状态
* `GET /api/videos/generated`: 获取历史视频列表
* `DELETE /api/videos/generated/{video_id}`: 删除历史视频
> **修正 (16:20)**:任务查询与历史列表接口已更新为 `/api/videos/tasks/{task_id}` 与 `/api/videos/generated`。
3. **素材管理 (Materials)**
* `POST /api/materials`: 上传素材
* `GET /api/materials`: 获取素材列表
* `PUT /api/materials/{material_id}`: 重命名素材
4. **社交发布 (Publish)**
* `POST /api/publish`: 发布视频到 抖音/微信视频号/B站/小红书
> 提示:视频号发布建议使用 headful + xvfb-run 运行后端,避免 headless 解码失败。
5. **资源库 (Assets)**
* `GET /api/assets/subtitle-styles`: 字幕样式列表
* `GET /api/assets/title-styles`: 标题样式列表
* `GET /api/assets/bgm`: 背景音乐列表
### 统一响应结构
```json
{
"success": true,
"message": "ok",
"data": { },
"code": 0
}
```
---
## 🎛️ 视频生成扩展参数
`POST /api/videos/generate` 支持以下可选字段:
- `subtitle_style_id`: 字幕样式 ID
- `title_style_id`: 标题样式 ID
- `subtitle_font_size`: 字幕字号(覆盖样式默认值)
- `title_font_size`: 标题字号(覆盖样式默认值)
- `bgm_id`: 背景音乐 ID
- `bgm_volume`: 背景音乐音量0-1默认 0.2
## 📦 资源库与静态资源
- 本地资源目录:`backend/assets/{fonts,bgm,styles}`
- 静态访问路径:`/assets`(用于前端样式预览与背景音乐试听)
## 🎵 背景音乐混音策略
- 混音发生在 **唇形对齐之后**,避免影响字幕/口型时间轴。
- 使用 FFmpeg `amix`,禁用归一化以保持配音音量稳定。
## 🛠️ 开发环境搭建
### 1. 虚拟环境
```bash
cd backend
python -m venv venv
source venv/bin/activate # Linux/macOS
# .\venv\Scripts\activate # Windows
```
### 2. 依赖安装
```bash
pip install -r requirements.txt
```
### 3. 环境变量配置
复制 `.env.example``.env` 并配置必要的 Key
```ini
# Supabase
SUPABASE_URL=http://localhost:8008
SUPABASE_KEY=your_service_role_key
# GLM API (用于 AI 标题生成)
GLM_API_KEY=your_glm_api_key
# LatentSync 配置
LATENTSYNC_GPU_ID=1
```
### 4. 启动服务
**开发模式 (热重载)**:
```bash
uvicorn app.main:app --host 0.0.0.0 --port 8006 --reload
```
---
## 🧩 服务集成指南
### 集成新模型
如果需要集成新的 AI 模型 (例如新的 TTS 引擎)
1.`app/services/` 下创建新的 Service 类 (如 `NewTTSService`)。
2. 实现 `generate` 方法,可以使用 subprocess 调用,也可以是 HTTP 请求。
3. **重要**: 如果模型占用 GPU请务必使用 `asyncio.Lock` 进行并发控制,防止 OOM。
4.`app/api/` 中添加对应的路由调用。
### 添加定时任务
目前推荐使用 **APScheduler****Crontab** 来管理定时任务。
社交媒体的定时发布功能目前依赖 `playwright` 的延迟执行,未来计划迁移到 Celery 队列。
---
## 🛡️ 错误处理
全项目统一使用 `Loguru` 进行日志记录。
```python
from loguru import logger
try:
# 业务逻辑
except Exception as e:
logger.error(f"操作失败: {str(e)}")
raise HTTPException(status_code=500, detail="服务器内部错误")
```
---
## 🧪 测试
运行测试套件:
```bash
pytest
```