7.8 KiB
AI 内容生产平台架构设计 V1
文档状态:当前有效
基线日期:2026-07-15
事实来源:当前源码、Prisma schema、生产配置与PROJECT_STATUS_V1.md
维护原则:记录稳定边界和已确认事实,不复制完整代码。
1. 架构目标
平台面向小说、角色/IP 资产、短剧和音视频成品的一体化生产,当前架构要同时满足:
- 长文本生产中的记忆、版本和质量循环。
- 图片、视频、声音等多 Provider 的差异化调用。
- 角色、服装、场景和道具在跨镜头生产中的连续性。
- 耗时任务的异步执行、重试、人工介入和成本追踪。
- 素材私有访问、Range 播放、下载与后期合成。
- 用户端生产工作台和管理端运营审计。
2. 系统边界
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 内容生产
来源/创作 Brief
-> 版权与项目规则
-> 故事/世界观/角色/IP 资产
-> 分集与剧本
-> 动态分镜
-> 关键帧或多图参考
-> 视频候选
-> 自动 QC / 人工选择
-> 字幕、音频、BGM、SFX、转场
-> FFmpeg 成品
-> 审核与作品库
6.2 AI 调用
业务请求
-> 用户/项目模型偏好
-> 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. 架构约束
- 数据库 schema 和迁移是数据结构唯一真相。
- Provider 调用必须留下实际 Provider、模型、参数快照、成本和回退记录。
- 角色、场景和道具应通过资产 ID/版本引用,不靠 Prompt 文本隐式继承。
- 外部模型状态、平台任务状态和素材状态必须分层管理。
- 付费生成前必须完成参数和参考图预检。
- 视频质量闭环允许人工确认,不能把模型评分直接等同于发布通过。
- 历史设计只能解释来路,不能覆盖当前代码事实。
10. 当前优先级
P0
- 备份数据库和素材,固化 Git 基线。
- 修复 35 条后端失败测试。
- 受控重启并验证最新构建。
P1
- 补齐队列执行覆盖和状态字典。
- 建立本地素材备份与恢复演练。
- 明确 Provider 路由优先级和实际调用展示。
- 补齐外部素材 URL preflight。
P2
- 渐进拆分超大 Service 和前端单体组件。
- 引入 OpenAPI 契约和关键 E2E。
- 完善生产发布、回滚、监控与告警。
11. 更新触发条件
发生以下任一变化时更新本文并提升版本:
- 新增或删除顶层业务模块。
- 数据库、队列、存储或部署拓扑改变。
- AI Router 扩展为平台级入口。
- 前端路由或应用边界发生结构性变化。
- 安全边界、租户模型或支付模式改变。