Files
ai/docs/system_b/04_技术架构设计_模块拆分.md
T
2026-06-15 17:45:28 +08:00

369 lines
6.3 KiB
Markdown
Executable File
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.
# 04_技术架构设计_模块拆分
## 1. 文档目标
本文档定义系统 B 的技术架构、模块拆分、服务边界、基础设施和后续与系统 A 合并的预留方式。
## 2. 总体架构
```text
uni-app 用户端
NestJS API 服务
MySQL / Redis / MinIO
BullMQ 任务队列
AI Provider Workers / FFmpeg Worker / Python Worker
成品资源存储与交付
Geeker-Admin 后台
NestJS Admin API
模板、项目、订单、任务、Provider、日志管理
```
## 3. 技术栈
| 层级 | 技术 |
|---|---|
| 用户端 | uni-app |
| 后台端 | Geeker-Admin |
| 后端 | Node.js + NestJS |
| 数据库 | MySQL 8 |
| 队列 | Redis + BullMQ |
| 对象存储 | MinIO,本地优先,后续可换 OSS/COS/S3 |
| 视频合成 | FFmpeg |
| AI 辅助 | Python Worker 可选 |
| 进程管理 | PM2 或 systemd |
| 反向代理 | Nginx |
| 部署 | AlmaLinux / Ubuntu 均可,推荐 Docker 化 |
## 4. 后端模块拆分
### 4.1 AuthModule
负责:
- 手机号验证码登录
- 微信授权登录
- JWT 令牌
- 后台管理员登录
- 权限校验
### 4.2 UserModule
负责:
- 用户信息
- 用户状态
- 用户项目列表
- 用户订单列表
- 用户隐私设置
### 4.3 ProjectModule
负责:
- 创建项目
- 项目状态流转
- 项目详情
- 项目进度
- 项目归档
### 4.4 TemplateModule
负责:
- 人生主题
- 套餐
- 风格
- 世界观
- 场景
- 镜头
- 文案模板
- 音乐模板
### 4.5 AssetModule
负责:
- 文件上传
- 图片/视频/音频资源管理
- 缩略图
- 下载链接
- 水印资源
- 素材删除
### 4.6 PhotoModule
负责:
- 照片上传规则
- 照片质检任务创建
- 人物角色归属
- 人物档案创建
### 4.7 AIProviderModule
负责:
- TextProvider
- ImageProvider
- VideoProvider
- VoiceProvider
- ModerationProvider
- FaceCheckProvider
- QualityCheckProvider
业务代码调用统一接口,不直接调用具体模型。
### 4.8 WorkflowModule
负责编排:
- 创作方案生成
- 预览图生成
- 正式图生成
- 音频/字幕生成
- 视频合成
- 最终质检
### 4.9 QueueModule
负责:
- BullMQ 队列注册
- 任务创建
- 任务重试
- 任务取消
- 任务进度更新
### 4.10 OrderModule
负责:
- 订单创建
- 支付状态
- 额度冻结
- 额度扣减
- 退款记录
### 4.11 RevisionModule
负责:
- 修改申请
- 修改次数校验
- 修改任务创建
- 人工处理记录
### 4.12 CaseModule
负责:
- 首页案例
- 案例上架/下架
- 同款制作
- 公开授权校验
### 4.13 AdminModule
负责后台管理接口,包括:
- 用户管理
- 项目管理
- 订单管理
- 模板管理
- 任务管理
- Provider 管理
- 日志管理
### 4.14 ComplianceModule
负责:
- 授权记录
- 隐私协议确认
- 未成年人授权确认
- 内容审核
- 用户删除申请
### 4.15 LogModule
负责:
- 操作日志
- 登录日志
- AI 调用日志
- 成本日志
- 错误日志
## 5. AI Provider 抽象
Provider 接口:
```ts
interface TextProvider { generate(input): Promise<TextResult> }
interface ImageProvider { generate(input): Promise<ImageResult> }
interface VideoProvider { generate(input): Promise<VideoResult> }
interface VoiceProvider { synthesize(input): Promise<AudioResult> }
interface ModerationProvider { check(input): Promise<ModerationResult> }
```
配置来自数据库或环境变量,支持:
- 优先级
- 限流
- 失败切换
- 成本规则
- 启用/禁用
## 6. 队列设计
队列:
```text
photo_check_queue
text_queue
image_queue
video_queue
audio_queue
ffmpeg_queue
qc_queue
cleanup_queue
```
设计原则:
1. 图像、视频、音频队列隔离。
2. 高成本任务必须检查订单/额度。
3. 任务必须有幂等 key。
4. 失败后按策略重试。
5. 多次失败转人工处理。
## 7. 存储设计
MinIO Bucket 建议:
```text
uploads/ 用户上传原图
previews/ 预览图
generated/ 正式生成图
videos/ 成品视频
audios/ TTS 音频
subtitles/ 字幕文件
cases/ 公开案例资源
temp/ 临时文件
```
原则:
- 用户原图默认私密。
- 成品下载使用签名链接。
- 下载链接设置有效期。
- 公开案例单独复制到 cases 路径。
## 8. 视频合成架构
第一阶段使用 FFmpeg
```text
图片素材
+ 运镜参数
+ 字幕 SRT
+ 旁白音频
+ BGM
+ 转场配置
→ FFmpeg Worker
→ MP4 成品
```
视频等级:
- L1:图片 + 运镜
- L2:图片 + 简单粒子/光效叠加
- L3:关键镜头图生视频
- L4:高级动态视频
第一阶段建议主做 L1 + L2。
## 9. Python Worker 定位
Python 只做辅助:
- 人脸检测
- 清晰度检测
- 图片相似度
- 人像一致性评分
- 图片裁切/缩放
- 视频后处理
主业务不放 Python,避免双主系统复杂。
## 10. 后续与系统 A 合并预留
未来系统 A「原创小说 → 韩漫 / 漫剧」可复用:
- AuthModule
- UserModule
- AssetModule
- TemplateModule
- AIProviderModule
- QueueModule
- WorkflowModule
- OrderModule
- LogModule
- AdminModule
系统 B 独有:
- 真人照片质检
- 人物档案
- 肖像授权
- 人生主题写真模板
系统 A 独有:
- 小说生成
- 剧情大纲
- 分集分镜
- 漫剧角色库
- 连载发布
## 11. V3 真人动态视频架构增量
V3 在系统 B 中新增以下模块:
```text
IdentityAnchorModule:身份锚点、用户确认、后台确认
FaceConsistencyModule:本人相似度、人脸一致性质检、混脸检测
MotionTemplateModule:动作模板、动作 Prompt、动作成本等级
VideoClipModule:真人动态视频片段生成、预览、重试、替换、质检
LipSyncModule:口型任务、音频绑定、失败回退
RealVideoProviderModuleHailuo/Wan/Vidu/Seedance/Kling/Runway 配置与调用
```
架构原则:
- 图片纪念视频继续走 FFmpeg,成本可控。
- 动态写真和 AI 真人动态视频独立成片段任务,不复用最终视频合成接口直接调用高成本 Provider。
- 真实视频 Provider 默认禁用,必须配置成本阈值和用户确认。
- 每个视频片段单独落库,支持单片段重试和替换。
- 口型是可选高级任务,失败时回退旁白字幕版本。
V3 推荐链路:
```text
身份锚点
→ 关键帧
→ VideoProvider 生成片段
→ 片段质检
→ 可选口型
→ FFmpeg 合成
→ 最终质检
```