feat: expand novel IP and production workflows
This commit is contained in:
@@ -0,0 +1,209 @@
|
||||
# AI 内容生产平台架构设计 V1
|
||||
|
||||
> 文档状态:当前有效
|
||||
> 基线日期:2026-07-15
|
||||
> 事实来源:当前源码、Prisma schema、生产配置与 `PROJECT_STATUS_V1.md`
|
||||
> 维护原则:记录稳定边界和已确认事实,不复制完整代码。
|
||||
|
||||
## 1. 架构目标
|
||||
|
||||
平台面向小说、角色/IP 资产、短剧和音视频成品的一体化生产,当前架构要同时满足:
|
||||
|
||||
- 长文本生产中的记忆、版本和质量循环。
|
||||
- 图片、视频、声音等多 Provider 的差异化调用。
|
||||
- 角色、服装、场景和道具在跨镜头生产中的连续性。
|
||||
- 耗时任务的异步执行、重试、人工介入和成本追踪。
|
||||
- 素材私有访问、Range 播放、下载与后期合成。
|
||||
- 用户端生产工作台和管理端运营审计。
|
||||
|
||||
## 2. 系统边界
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
User[用户端 Vue 3 H5] --> Nginx[Nginx]
|
||||
Admin[管理端 Vue 3 H5] --> Nginx
|
||||
Nginx --> API[NestJS API :3010]
|
||||
API --> MySQL[(MySQL)]
|
||||
API --> Redis[(Redis / BullMQ)]
|
||||
API --> Storage[本地私有存储\nMinIO 可选]
|
||||
API --> AI[外部 AI Providers]
|
||||
API --> Media[FFmpeg / FFprobe]
|
||||
Redis --> Worker[独立 Worker]
|
||||
Worker --> Internal[受密钥保护的内部执行接口]
|
||||
Internal --> API
|
||||
```
|
||||
|
||||
外部依赖包括文本、图片、视频、语音、音乐、Embedding 和审核模型。平台负责业务编排、资产关系、质量控制和成本记录,不把外部模型的临时任务状态当作最终业务状态。
|
||||
|
||||
## 3. 仓库结构
|
||||
|
||||
项目采用 npm workspaces 单仓库:
|
||||
|
||||
| 目录 | 职责 |
|
||||
| --- | --- |
|
||||
| `backend/` | NestJS API、Prisma、业务编排、Provider 与媒体处理 |
|
||||
| `workers/` | BullMQ 消费,委托后端内部接口执行业务 |
|
||||
| `user-app/` | Vue 3 + Vite 用户端 H5 |
|
||||
| `admin/` | Vue 3 + Vite 管理后台 |
|
||||
| `deploy/` | 开发依赖和 Nginx 示例,生产运维脚本尚不完整 |
|
||||
| `docs/` | 当前设计、历史设计、经验和同步包 |
|
||||
| `data/` | 项目内容、剧本、分镜和生产资料 |
|
||||
| `storage/` | 当前本地私有素材存储 |
|
||||
| `tmp/` | 临时媒体处理文件 |
|
||||
|
||||
## 4. 后端分层
|
||||
|
||||
### 4.1 接入层
|
||||
|
||||
- HTTP API 统一使用 `/api` 前缀。
|
||||
- JWT 负责用户身份,管理能力执行角色和 permission 校验。
|
||||
- 统一响应 envelope、异常过滤、请求 ID 和安全响应头。
|
||||
- 请求体上限当前为 160 MB。
|
||||
- 素材接口支持鉴权下载、Range 流和临时签名 URL。
|
||||
|
||||
### 4.2 业务域
|
||||
|
||||
| 业务域 | 核心模块 |
|
||||
| --- | --- |
|
||||
| 身份与计费 | `AuthModule`、`UsersModule`、`BillingModule` |
|
||||
| 项目与素材 | `ProjectsModule`、`AssetsModule` |
|
||||
| 小说与世界观 | `NovelsModule`、`StoryBiblesModule`、`MemoriesModule` |
|
||||
| 角色与 IP | `CharactersModule`、`ImagesModule` |
|
||||
| 分集与剧本 | `EpisodesModule`、`ScriptsModule` |
|
||||
| 真人短剧 | `LiveActionModule`、`MediaModule` |
|
||||
| AI 与任务 | `ProvidersModule`、`ProviderLabModule`、`QueuesModule` |
|
||||
| 审核与运营 | `ReviewsModule`、`AdminModule` |
|
||||
|
||||
`AiRouterModule` 当前服务于真人视频域,尚未成为全平台所有 AI 请求的统一入口。文档和界面不得把它描述成已完成的全局智能路由。
|
||||
|
||||
### 4.3 数据层
|
||||
|
||||
- Prisma 6 + MySQL。
|
||||
- 当前 61 个 Model、33 个已部署迁移。
|
||||
- 业务状态大多为字符串;历史值漂移需要通过状态字典和兼容迁移治理。
|
||||
- JSON 用于保存 Provider 参数、Prompt 快照、质量报告和扩展元数据。
|
||||
|
||||
### 4.4 异步执行层
|
||||
|
||||
- Redis + BullMQ,共 14 个队列。
|
||||
- Worker 并发当前为 2。
|
||||
- Worker 不重复业务实现,通过受 `WORKER_SECRET` 保护的内部接口委托后端。
|
||||
- `RenderTask` 保存幂等键、输入哈希、重试、成本与人工介入状态。
|
||||
|
||||
当前并非所有声明任务都已完整队列化。长篇记忆、字幕、真人关键帧、真人合并和分析事件存在同步执行或 Worker 映射缺口,详见 `AI_PIPELINE_V1.md`。
|
||||
|
||||
### 4.5 媒体层
|
||||
|
||||
- FFmpeg 负责归一、拼接、转场、字幕、BGM、SFX、环境音和混音。
|
||||
- FFprobe 负责媒体元信息探测。
|
||||
- 视频模型可返回原生音轨;后期策略决定保留、压低或补充外部音频。
|
||||
- LipSync 已有抽象和策略字段,但真实 Provider 当前均未启用。
|
||||
|
||||
## 5. 前端架构现实
|
||||
|
||||
### 5.1 用户端
|
||||
|
||||
用户端为 Vue 3 + Vite H5。当前核心功能集中在 `pages/index/index.vue`,没有启用 Vue Router。顶级入口包括创作、工具、项目、作品、任务和我的。
|
||||
|
||||
独立工具目前只有“人物三视图”正式开放;影视场景、9/16/25 宫格和原创剧本仍为待接入状态。
|
||||
|
||||
### 5.2 管理端
|
||||
|
||||
管理端是自研 Vue 3 单页后台,并非完整 GeekerAdmin。主要功能集中在 `App.vue`,`router/`、`stores/`、`views/` 仍是占位结构。
|
||||
|
||||
### 5.3 结构风险
|
||||
|
||||
用户端、管理端和若干后端 Service 已形成超大文件。后续应按稳定业务边界渐进拆分,避免一次性重构影响现有真实生产链路。
|
||||
|
||||
## 6. 核心数据流
|
||||
|
||||
### 6.1 内容生产
|
||||
|
||||
```text
|
||||
来源/创作 Brief
|
||||
-> 版权与项目规则
|
||||
-> 故事/世界观/角色/IP 资产
|
||||
-> 分集与剧本
|
||||
-> 动态分镜
|
||||
-> 关键帧或多图参考
|
||||
-> 视频候选
|
||||
-> 自动 QC / 人工选择
|
||||
-> 字幕、音频、BGM、SFX、转场
|
||||
-> FFmpeg 成品
|
||||
-> 审核与作品库
|
||||
```
|
||||
|
||||
### 6.2 AI 调用
|
||||
|
||||
```text
|
||||
业务请求
|
||||
-> 用户/项目模型偏好
|
||||
-> Provider 配置与预检
|
||||
-> 同步调用或异步提交
|
||||
-> ProviderLog
|
||||
-> Asset / VideoClip / RenderTask
|
||||
-> 质量评估、回退或人工介入
|
||||
```
|
||||
|
||||
## 7. 安全与隐私
|
||||
|
||||
- API Key 由服务端密钥加密保存,后台不回显明文。
|
||||
- Worker 内部接口使用 timing-safe 密钥比较。
|
||||
- 素材默认私有,不依赖可枚举静态 URL。
|
||||
- Nginx 承担公网 TLS;应用当前未强制 `HTTPS_REQUIRED`。
|
||||
- 外部 Provider 使用参考图时,应只提交限时、最小权限 URL。
|
||||
- Work 同步文档禁止包含 `.env`、API Key、JWT、数据库密码、私有素材 URL 和用户个人数据。
|
||||
|
||||
## 8. 部署与运行
|
||||
|
||||
当前生产事实:
|
||||
|
||||
- `ai-backend.service`、`ai-workers.service` 由 systemd 托管。
|
||||
- Nginx 托管两套前端静态产物并代理 API。
|
||||
- MySQL、Redis 为本机服务。
|
||||
- 主存储为本地私有目录,MinIO 仅有代码能力,尚未完整配置。
|
||||
- 全仓生产构建已通过,但运行进程需受控重启后才会加载最新构建。
|
||||
|
||||
当前缺少完整的发布、回滚、备份、日志轮转、监控和恢复演练脚本。这些属于发布基线,不应只保留为历史设计。
|
||||
|
||||
## 9. 架构约束
|
||||
|
||||
1. 数据库 schema 和迁移是数据结构唯一真相。
|
||||
2. Provider 调用必须留下实际 Provider、模型、参数快照、成本和回退记录。
|
||||
3. 角色、场景和道具应通过资产 ID/版本引用,不靠 Prompt 文本隐式继承。
|
||||
4. 外部模型状态、平台任务状态和素材状态必须分层管理。
|
||||
5. 付费生成前必须完成参数和参考图预检。
|
||||
6. 视频质量闭环允许人工确认,不能把模型评分直接等同于发布通过。
|
||||
7. 历史设计只能解释来路,不能覆盖当前代码事实。
|
||||
|
||||
## 10. 当前优先级
|
||||
|
||||
### P0
|
||||
|
||||
- 备份数据库和素材,固化 Git 基线。
|
||||
- 修复 35 条后端失败测试。
|
||||
- 受控重启并验证最新构建。
|
||||
|
||||
### P1
|
||||
|
||||
- 补齐队列执行覆盖和状态字典。
|
||||
- 建立本地素材备份与恢复演练。
|
||||
- 明确 Provider 路由优先级和实际调用展示。
|
||||
- 补齐外部素材 URL preflight。
|
||||
|
||||
### P2
|
||||
|
||||
- 渐进拆分超大 Service 和前端单体组件。
|
||||
- 引入 OpenAPI 契约和关键 E2E。
|
||||
- 完善生产发布、回滚、监控与告警。
|
||||
|
||||
## 11. 更新触发条件
|
||||
|
||||
发生以下任一变化时更新本文并提升版本:
|
||||
|
||||
- 新增或删除顶层业务模块。
|
||||
- 数据库、队列、存储或部署拓扑改变。
|
||||
- AI Router 扩展为平台级入口。
|
||||
- 前端路由或应用边界发生结构性变化。
|
||||
- 安全边界、租户模型或支付模式改变。
|
||||
|
||||
Reference in New Issue
Block a user