feat: expand novel IP and production workflows
This commit is contained in:
@@ -0,0 +1,879 @@
|
||||
# AI 内容生产平台项目现状 V1
|
||||
|
||||
> 文档类型:项目状态回灌 / 技术审计快照
|
||||
> 审计时间:2026-07-15(Europe/Berlin)
|
||||
> 审计对象:`/www/wwwroot/ai` 当前工作区、当前 MySQL 数据库、当前 systemd 运行服务
|
||||
> 文档用途:作为 Work 的“代码现实”基线,不替代产品设计文档,也不替代 Git 版本记录。
|
||||
|
||||
## 0. 审计口径
|
||||
|
||||
本文件按以下优先级判断项目真实状态:
|
||||
|
||||
1. 当前工作区源码与配置结构。
|
||||
2. Prisma schema、迁移记录和数据库只读统计。
|
||||
3. 当前 systemd、Nginx、MySQL、Redis 运行状态。
|
||||
4. 构建与自动测试结果。
|
||||
5. `README.md`、`CURRENT_ARCHITECTURE.md`、`CODEX_PROGRESS.md` 与 `docs/system_a`、`docs/system_b` 等历史文档。
|
||||
|
||||
状态标记:
|
||||
|
||||
| 标记 | 含义 |
|
||||
| --- | --- |
|
||||
| 已实现且验证 | 代码存在,当前可构建,并有运行数据、测试或实际调用记录佐证 |
|
||||
| 已实现但验证不足 | 主体代码已存在,但自动测试、运行配置或完整 E2E 尚未达到发布基线 |
|
||||
| 部分接入 | 只有部分入口、部分 Provider 或部分流程可用 |
|
||||
| 仅设计/预留 | 有文档、数据结构或界面占位,但未形成完整可用链路 |
|
||||
|
||||
注意:本文中的 V1 是“状态文档版本”,不是 npm 包版本。当前各 workspace 的代码版本仍为 `0.1.0`,不应仅凭功能变多就直接对外宣布产品 V5.0。
|
||||
|
||||
## 1. 执行摘要
|
||||
|
||||
### 1.1 当前项目真实定位
|
||||
|
||||
当前系统已经不再只是“AI 小说系统”或“AI 漫剧系统”,实际代码覆盖:
|
||||
|
||||
- 小说导入、阅读、原创生成、章节质量循环与版本管理。
|
||||
- 故事圣经、世界观、角色、剧情记忆与 IP 资产管理。
|
||||
- 分集、剧本、分镜、关键帧、图生视频和候选片段选择。
|
||||
- 真人/仿真人短剧生产、原生音频视频、字幕、BGM、SFX、转场与 FFmpeg 合成。
|
||||
- AI Provider 目录、模型偏好、成本记录、路由、实验台与回退。
|
||||
- 队列、任务重试、人工介入、额度、审核、运营后台和审计日志。
|
||||
- 面向生产的独立创作工具,当前已开放“人物三视图”。
|
||||
|
||||
因此,面向 Work 的项目名称建议使用:
|
||||
|
||||
```text
|
||||
AI 内容生产平台
|
||||
```
|
||||
|
||||
### 1.2 当前健康度
|
||||
|
||||
| 检查项 | 当前结论 |
|
||||
| --- | --- |
|
||||
| 后端 API | `ai-backend.service` 正在运行,健康检查返回 `ok` |
|
||||
| 队列 Worker | `ai-workers.service` 正在运行,消费 14 个 BullMQ 队列 |
|
||||
| 数据库 | MySQL 正在运行,33 个 Prisma 迁移全部已部署 |
|
||||
| Redis | 正在运行,Worker 与 API 均配置为使用 Redis |
|
||||
| 前台/后台 | Vue 3 + Vite 生产构建通过,Nginx 直接托管静态产物 |
|
||||
| 全仓构建 | 通过:backend、admin、user-app、workers 均成功构建 |
|
||||
| 自动测试 | 未通过:后端 273 条测试中 238 通过、35 失败;Worker 1 条通过;前台和后台无测试文件 |
|
||||
| Git 基线 | 高风险:`main` 仅 1 个提交,当前有 85 个修改项、47 个未跟踪项 |
|
||||
| 运行版本一致性 | 需处理:审计构建产物晚于 backend/worker 进程启动时间,当前进程尚未加载最新构建 |
|
||||
| 存储 | 当前为本机私有存储;MinIO 代码已实现但当前未完整配置 |
|
||||
| AI 默认模式 | 全局 `AI_PROVIDER_MODE=mock`,但数据库中有大量真实 Provider 可被显式选择 |
|
||||
|
||||
### 1.3 结论
|
||||
|
||||
当前项目已经是一个有真实数据、真实调用和真实视频资产的内部生产平台,不是原型空壳;但它还不是可安全标记为“稳定生产版”的发布基线。
|
||||
|
||||
当前最重要的工作顺序应为:
|
||||
|
||||
1. 固化 Git 与数据库备份基线。
|
||||
2. 修复测试和状态枚举漂移。
|
||||
3. 对齐当前构建与运行进程。
|
||||
4. 补齐队列任务执行覆盖。
|
||||
5. 再继续扩展新功能。
|
||||
|
||||
## 2. 当前项目实际架构
|
||||
|
||||
### 2.1 仓库形态
|
||||
|
||||
项目为 npm workspaces 单仓库:
|
||||
|
||||
```text
|
||||
ai/
|
||||
├── backend/ NestJS API、Prisma、业务编排、Provider、FFmpeg 调用
|
||||
├── workers/ BullMQ Worker,消费队列后委托 backend 执行业务
|
||||
├── user-app/ Vue 3 + Vite 用户端 H5
|
||||
├── admin/ Vue 3 + Vite 运营管理后台
|
||||
├── deploy/ 开发依赖与 Nginx 示例,生产脚本尚不完整
|
||||
├── docs/ 原系统 A/B、AI 生产经验、教程和成本资料
|
||||
├── data/ 项目内容、剧本、分镜与生成过程资料
|
||||
├── storage/ 当前本地私有素材存储
|
||||
└── tmp/ 临时处理文件
|
||||
```
|
||||
|
||||
### 2.2 运行拓扑
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
User[用户端 Vue H5] --> Nginx[Nginx]
|
||||
Admin[管理端 Vue H5] --> Nginx
|
||||
Nginx --> API[NestJS API :3010]
|
||||
API --> MySQL[(MySQL ai_manga)]
|
||||
API --> Redis[(Redis)]
|
||||
API --> Storage[本地私有存储\nMinIO 可选]
|
||||
API --> Providers[AI Providers]
|
||||
API --> FFmpeg[FFmpeg / FFprobe]
|
||||
API --> BullMQ[BullMQ 14 队列]
|
||||
BullMQ --> Worker[独立 Worker\n并发 2]
|
||||
Worker --> InternalAPI[受 WORKER_SECRET 保护的内部接口]
|
||||
InternalAPI --> API
|
||||
```
|
||||
|
||||
### 2.3 后端基础设施
|
||||
|
||||
- 框架:NestJS 10。
|
||||
- ORM:Prisma 6,MySQL。
|
||||
- 队列:BullMQ 5 + Redis。
|
||||
- 文件:本地私有文件为当前主存储,MinIO 为可选实现。
|
||||
- 媒体:FFmpeg、FFprobe。
|
||||
- 文件解析:PDF、DOCX、纯文本。
|
||||
- 鉴权:JWT。
|
||||
- 后台权限:`admin`、`operator`、`finance`、`auditor` 角色与细粒度 permission。
|
||||
- API 前缀:`/api`。
|
||||
- 请求体上限:当前 160 MB。
|
||||
- 中间件:请求 ID、安全响应头、HTTPS/代理判断、应用层加密请求处理。
|
||||
- API 返回:统一 envelope 和统一异常过滤。
|
||||
|
||||
### 2.4 当前部署事实
|
||||
|
||||
- 后端由 `ai-backend.service` 托管。
|
||||
- Worker 由 `ai-workers.service` 托管。
|
||||
- Nginx 分别托管用户端与管理端,并反向代理 `/api/`。
|
||||
- MySQL、Redis 为本机服务。
|
||||
- 当前 `NODE_ENV=production`、`STORAGE_DRIVER=local`、Worker 并发为 2。
|
||||
- 后端没有强制 `HTTPS_REQUIRED`;传输安全依赖 Nginx 与部署配置。
|
||||
- `PUBLIC_ASSET_BASE_URL` 类配置当前未设置,依赖外部 Provider 获取临时素材 URL 的链路需要专项复核。
|
||||
|
||||
## 3. 已实现模块
|
||||
|
||||
### 3.1 后端模块
|
||||
|
||||
当前 `AppModule` 注册的业务模块:
|
||||
|
||||
| 模块 | 主要职责 | 状态 |
|
||||
| --- | --- | --- |
|
||||
| `AuthModule` | 注册、登录、JWT、账号状态 | 已实现且验证 |
|
||||
| `UsersModule` | 用户资料 | 已实现 |
|
||||
| `BillingModule` | 额度、订单、冻结、释放、后台人工调整 | 已实现但支付仅为 mock |
|
||||
| `ProjectsModule` | 项目、作品库、小说库、创意模式、流水线配置 | 已实现 |
|
||||
| `ProviderLabModule` | Provider 参数试跑与状态轮询 | 已实现 |
|
||||
| `AssetsModule` | 上传、下载、预览、Range 流、别名、选择状态 | 已实现且有大量真实素材 |
|
||||
| `NovelsModule` | 导入、解析、阅读、原创小说、Agent 与章节质量流程 | 已实现但测试不足 |
|
||||
| `StoryBiblesModule` | 故事圣经、制作规则、确认锁定 | 已实现 |
|
||||
| `CharactersModule` | 项目角色、全局角色、版本、状态、Prompt 审核与优化经验 | 已实现但复杂度较高 |
|
||||
| `MemoriesModule` | 剧情、角色、伏笔与连续性记忆 | 已实现但测试桩未同步 |
|
||||
| `EpisodesModule` | 分集计划、请求预览、质量闸门 | 已实现但质量测试有漂移 |
|
||||
| `ScriptsModule` | 单集剧本、分镜、动态时长、提示词、转场 | 已实现但测试不足 |
|
||||
| `ImagesModule` | 角色图、锚点图、三视图、关键帧、视觉质检 | 已实现 |
|
||||
| `LiveActionModule` | 真人短剧准备、关键帧、视频、QC、合并、后期 | 已实现但仍处于生产化磨合 |
|
||||
| `MediaModule` | TTS、字幕、传统漫剧合成、音频片段重试 | 已实现 |
|
||||
| `ProvidersModule` | Provider 目录、配置、调用、日志、成本、异步视频轮询 | 已实现且有真实调用 |
|
||||
| `QueuesModule` | RenderTask、BullMQ、重试、取消、恢复、Worker 委托 | 已实现但执行覆盖不完整 |
|
||||
| `ReviewsModule` | 文本/素材审核、返修、案例授权 | 已实现但当前数据库尚无审核记录 |
|
||||
| `AdminModule` | 运营后台聚合 API、审计、配置、Router 审计 | 已实现 |
|
||||
|
||||
`AiRouterModule` 没有作为顶层模块单独注册,但被 `LiveActionModule` 导入并实际用于真人视频路由。当前它不是覆盖全平台所有 AI 请求的统一 Router。
|
||||
|
||||
### 3.2 用户端模块
|
||||
|
||||
用户端实际为 Vue 3 单页应用,不是旧文档描述的 uni-app 多路由实现。
|
||||
|
||||
顶级导航:
|
||||
|
||||
- 创作:新建、提示词直出、API 快测。
|
||||
- 工具:独立创作工具。
|
||||
- 项目:项目列表、制作台、IP 资产中心、进度。
|
||||
- 作品:视频、小说、素材。
|
||||
- 任务:运行任务、审核、额度与成本。
|
||||
- 我的:账号、角色资产、教程。
|
||||
|
||||
制作台主流程:
|
||||
|
||||
```text
|
||||
来源 -> 版权 -> 故事圣经 -> 角色 -> 记忆 -> 分集
|
||||
-> 剧本/分镜 -> 真人视频 -> 合成 -> 审核
|
||||
```
|
||||
|
||||
独立创作工具当前状态:
|
||||
|
||||
| 工具 | 状态 |
|
||||
| --- | --- |
|
||||
| 人物三视图 | 已开放;支持主锚点参考或输入本次唯一角色描述;生成后可下载和视觉质检 |
|
||||
| 影视场景专家 | 待接入 |
|
||||
| 9 宫格分镜 | 待接入 |
|
||||
| 16 宫格分镜 | 待接入 |
|
||||
| 25 宫格分镜 | 待接入 |
|
||||
| 原创剧本 | 待接入 |
|
||||
|
||||
虽然 `user-app/src/pages/` 中保留了多页面文件,但当前 `App.vue` 实际只加载大型 `pages/index/index.vue`,没有 Vue Router。多数业务都集中在一个约 1.35 万行的页面组件中。
|
||||
|
||||
### 3.3 管理端模块
|
||||
|
||||
管理端实际为自研 Vue 3 单页后台,不是完整 GeekerAdmin 集成。
|
||||
|
||||
当前菜单包括:
|
||||
|
||||
- 仪表盘、使用教程。
|
||||
- 项目、小说、全局角色、项目角色、分镜、成品。
|
||||
- 订单额度、内容审核、任务。
|
||||
- Router 审计、爆款诊断、AI 平台入口。
|
||||
- Provider、成本、用户、素材。
|
||||
- 系统配置、版权、审计日志。
|
||||
|
||||
后台同样集中在一个约 1.03 万行的 `App.vue` 中,没有实际 Router、Store 和拆分后的 Views。
|
||||
|
||||
## 4. 已完成功能与完成度
|
||||
|
||||
| 业务域 | 当前能力 | 完成度判断 |
|
||||
| --- | --- | --- |
|
||||
| 账号与安全 | 注册、登录、JWT、账号禁用、密码重置、RBAC、操作审计、应用层加密 | 已实现且验证 |
|
||||
| 项目 | 新建、列表、删除、取消、进度、作品库、提示词直出分镜 | 已实现 |
|
||||
| 小说导入 | 粘贴、文件上传、章节切割、编辑、版权确认 | 已实现 |
|
||||
| 小说阅读 | 目录、分页/翻页、阅读进度、书签、批注 | 已实现 |
|
||||
| 原创小说 | 创作向导、生成计划、章节 Agent、上下文、质检、修复、版本、批次 | 已实现但自动测试未稳定 |
|
||||
| 故事与世界观 | StoryBible、WorldBible、制作文本和锁定 | 已实现 |
|
||||
| 角色资产 | 项目角色、全局演员、外观版本、状态、服装、声音、授权范围 | 已实现 |
|
||||
| 角色提示词闭环 | Prompt 版本、审核、优化经验、下一次生成吸收 | 已实现 |
|
||||
| 人物三视图 | 主锚点模式、纯描述覆盖模式、旗舰模板、下载、视觉评分 | 已实现 |
|
||||
| IP 资产中心 | 场景/道具提取、主资产、版本、Prompt、冲突检查 | 已实现但 UI/测试仍在磨合 |
|
||||
| 长篇记忆 | 剧情记忆、角色记忆、伏笔线程、连续性检查 | 已实现但测试未同步 |
|
||||
| 分集 | 动态数量、质量闸门、请求预览与 Prompt 覆盖 | 已实现但当前一条质量测试失败 |
|
||||
| 剧本 | 剧本生成、人工编辑、确认、请求预览 | 已实现 |
|
||||
| 分镜 | 动态时长、关键帧/视频 Prompt、前后镜衔接、转场字段、视觉板 | 已实现 |
|
||||
| 关键帧 | 角色/场景/道具参考、单镜/批量、视觉审核 | 已实现且有真实图片调用 |
|
||||
| 视频 | 单镜/批量、多候选、首帧/首尾帧/参考图、原生音频 Provider | 已实现且有真实视频调用 |
|
||||
| 视频 QC | 自动评分、同模型重试、Fallback、人工确认、候选选择 | 已实现但测试和策略仍在变化 |
|
||||
| 视频合并 | 硬切/转场、画面归一、源音轨、字幕、BGM、SFX、FFmpeg | 已实现但产品质量仍需持续验收 |
|
||||
| 原创音乐 | 音乐圣经、MusicProvider、BGM 对齐、资产包 | 部分接入,默认关闭 |
|
||||
| 口型 | LipSync Provider 抽象、策略与桥接 | 部分接入;当前真实 LipSync Provider 全部禁用 |
|
||||
| 素材库 | 类型、别名、分镜号/范围、选中/候选/淘汰、Range 播放、下载 | 已实现 |
|
||||
| 队列 | 14 队列、任务幂等、重试、取消、过期恢复、人工介入 | 已实现但部分任务类型无 Worker 执行器 |
|
||||
| 成本 | Provider 成本规则、调用日志、人民币展示、额度冻结/释放 | 已实现;财务口径仍需统一 |
|
||||
| 支付 | 套餐、订单模型与 mock-pay | 仅测试,不是生产支付 |
|
||||
| 内容审核 | 文本、素材、后台复核、案例授权 | API/UI 已实现,但当前 `ContentReview` 为 0 条 |
|
||||
| 爆款诊断 | 样本、片段、创意模式、项目绑定 | 已实现,属于原设计后的扩展 |
|
||||
|
||||
## 5. 数据库结构
|
||||
|
||||
### 5.1 总体规模
|
||||
|
||||
- Prisma Model:61 个。
|
||||
- Prisma Enum:0 个。
|
||||
- 数据库迁移:33 个,当前全部已部署。
|
||||
- 索引、唯一约束和 JSON 字段大量使用。
|
||||
- 业务状态主要使用字符串字段,而不是数据库枚举。
|
||||
|
||||
### 5.2 模型分组
|
||||
|
||||
#### 用户与项目
|
||||
|
||||
- `User`
|
||||
- `UserModelPreference`
|
||||
- `Project`
|
||||
- `ProjectPipelineConfig`
|
||||
- `ProjectCreativePattern`
|
||||
- `CreativePattern`
|
||||
|
||||
#### 小说与 Agent
|
||||
|
||||
- `NovelSource`
|
||||
- `NovelChapter`
|
||||
- `NovelReadingProgress`
|
||||
- `NovelBookmark`
|
||||
- `NovelAnnotation`
|
||||
- `NovelGenerationPlan`
|
||||
- `NovelChapterVersion`
|
||||
- `NovelContextMemory`
|
||||
- `NovelQualityReport`
|
||||
- `NovelVersionSnapshot`
|
||||
- `NovelDerivativeJob`
|
||||
- `AgentPrompt`
|
||||
- `AgentRun`
|
||||
|
||||
#### 故事、版权与世界观
|
||||
|
||||
- `CopyrightRecord`
|
||||
- `StoryBible`
|
||||
- `WorldBible`
|
||||
|
||||
#### 角色与 IP 资产
|
||||
|
||||
- `Character`
|
||||
- `StoryCharacter`
|
||||
- `CharacterExtractionVersion`
|
||||
- `GlobalCharacter`
|
||||
- `GlobalCharacterAsset`
|
||||
- `GlobalCharacterLookVersion`
|
||||
- `CharacterImage`
|
||||
- `CharacterImageQualityReview`
|
||||
- `CharacterMemory`
|
||||
- `CharacterDesignVersion`
|
||||
- `CharacterPromptVersion`
|
||||
- `CharacterPromptReview`
|
||||
- `CharacterPromptOptimizationLesson`
|
||||
- `CharacterState`
|
||||
- `ActorProfile`
|
||||
- `ProjectVisualAsset`
|
||||
|
||||
#### 剧集生产
|
||||
|
||||
- `Episode`
|
||||
- `EpisodeScript`
|
||||
- `StoryboardShot`
|
||||
- `ShotImage`
|
||||
- `VideoClip`
|
||||
- `PlotMemory`
|
||||
- `PlotThread`
|
||||
- `ContinuityCheck`
|
||||
|
||||
#### 素材、任务与 Provider
|
||||
|
||||
- `Asset`
|
||||
- `RenderTask`
|
||||
- `ProviderConfig`
|
||||
- `ProviderLog`
|
||||
|
||||
#### 计费、审核与运营
|
||||
|
||||
- `Order`
|
||||
- `QuotaAccount`
|
||||
- `QuotaLog`
|
||||
- `RevisionRequest`
|
||||
- `ContentReview`
|
||||
- `CaseShowcase`
|
||||
- `HitAnalysisCase`
|
||||
- `HitAnalysisSegment`
|
||||
- `AnalyticsEvent`
|
||||
- `SystemConfig`
|
||||
- `OperationLog`
|
||||
|
||||
### 5.3 当前数据库数据快照
|
||||
|
||||
| 数据 | 数量 |
|
||||
| --- | ---: |
|
||||
| 用户 | 2 |
|
||||
| 项目 | 20 |
|
||||
| 小说源 | 10 |
|
||||
| 小说章节 | 256 |
|
||||
| 故事圣经 | 13 |
|
||||
| 项目角色 | 87 |
|
||||
| 全局角色 | 14 |
|
||||
| 分集 | 87 |
|
||||
| 单集剧本 | 21 |
|
||||
| 分镜 | 114 |
|
||||
| 素材 | 977 |
|
||||
| 任务 | 748 |
|
||||
| Provider 配置 | 112 |
|
||||
| Provider 调用日志 | 1002 |
|
||||
| 内容审核记录 | 0 |
|
||||
| 操作审计记录 | 44 |
|
||||
|
||||
素材构成:
|
||||
|
||||
| 类型 | 数量 |
|
||||
| --- | ---: |
|
||||
| image | 600 |
|
||||
| video_clip | 215 |
|
||||
| video | 74 |
|
||||
| audio | 50 |
|
||||
| subtitle | 33 |
|
||||
| 其他角色图、片段音频、成品类型 | 5 |
|
||||
|
||||
任务状态:
|
||||
|
||||
| 状态 | 数量 |
|
||||
| --- | ---: |
|
||||
| success | 646 |
|
||||
| failed | 77 |
|
||||
| manual_required | 22 |
|
||||
| pending | 2 |
|
||||
| completed | 1 |
|
||||
|
||||
`completed` 不在当前 `TASK_STATUSES` 常量中,属于历史状态漂移,需要迁移或兼容处理。
|
||||
|
||||
## 6. API 接口现状
|
||||
|
||||
### 6.1 总量
|
||||
|
||||
- Controller:25 个。
|
||||
- HTTP 方法装饰器:289 个。
|
||||
- API 全局前缀:`/api`。
|
||||
- 当前没有生成 OpenAPI/Swagger 规范,接口事实依赖 Controller、DTO 与前端 client。
|
||||
|
||||
### 6.2 分组
|
||||
|
||||
| 接口域 | 代表能力 | 路由规模 |
|
||||
| --- | --- | ---: |
|
||||
| Admin | 仪表盘、项目、用户、素材、作品、Provider、成本、审计、Router | 47 |
|
||||
| Characters | 项目角色、全局角色、版本、状态、IP 资产、Prompt、声音 | 47 |
|
||||
| Projects | 项目、库、阅读入口、创意模式、流水线配置 | 28 |
|
||||
| Live Action | 角色档案、关键帧、视频、QC、候选、渲染、音乐 | 21 |
|
||||
| Novel Generation | 生成计划、IP 圣经、章节、批次、暂停恢复 | 17 |
|
||||
| Providers | 目录、配置、执行、日志、成本、偏好 | 16 |
|
||||
| Billing | 套餐、订单、额度、冻结/释放、后台调整 | 13 |
|
||||
| Scripts | 剧本、分镜、请求预览、确认、重生 | 12 |
|
||||
| Memories | 剧情、角色、伏笔、上下文、连续性 | 11 |
|
||||
| Images | 角色图、关键帧、锚点、视觉质检 | 9 |
|
||||
| Queues | 创建、列表、重试、取消、恢复、统计 | 9 |
|
||||
| Reviews | 文本/素材审核、案例授权、后台复核 | 9 |
|
||||
| Novels / Wizard / Original | 导入、解析、原创、创作向导 | 16 |
|
||||
| Assets | 上传、预览、Range 下载、临时 URL | 7 |
|
||||
| Auth / Crypto | 登录注册、用户信息、加密会话 | 7 |
|
||||
| Episodes / StoryBible / Media | 分集、故事圣经、音频字幕视频 | 14 |
|
||||
|
||||
### 6.3 安全边界
|
||||
|
||||
- 业务接口主要使用 JWT Guard。
|
||||
- 管理能力在 Service 层执行 permission 检查。
|
||||
- Worker 内部接口使用 `WORKER_SECRET` 和 timing-safe 比较。
|
||||
- 生产环境缺失 Worker secret 时不会使用本地默认值。
|
||||
- 素材为私有存储,支持鉴权下载、Range 请求和带签名的临时 URL。
|
||||
- API Key 经服务端密钥加密存储,后台不回显明文。
|
||||
|
||||
## 7. 前后端目录结构
|
||||
|
||||
### 7.1 后端
|
||||
|
||||
```text
|
||||
backend/src/
|
||||
├── admin/
|
||||
├── ai-router/
|
||||
├── assets/
|
||||
├── auth/
|
||||
├── billing/
|
||||
├── characters/
|
||||
├── common/
|
||||
├── config/
|
||||
├── episodes/
|
||||
├── images/
|
||||
├── live-action/
|
||||
├── media/
|
||||
├── memories/
|
||||
├── novels/
|
||||
├── prisma/
|
||||
├── projects/
|
||||
├── provider-lab/
|
||||
├── providers/
|
||||
├── queues/
|
||||
├── reviews/
|
||||
├── scripts/
|
||||
├── story-bibles/
|
||||
└── users/
|
||||
```
|
||||
|
||||
当前后端约 9.39 万行 TypeScript。最大文件:
|
||||
|
||||
- `live-action.service.ts`:约 1.42 万行。
|
||||
- `characters.service.ts`:约 7443 行。
|
||||
- `providers.service.ts`:约 6776 行。
|
||||
- `admin.service.ts`:约 6096 行。
|
||||
- `scripts.service.ts`:约 4600 行。
|
||||
|
||||
### 7.2 用户端
|
||||
|
||||
```text
|
||||
user-app/src/
|
||||
├── api/
|
||||
├── components/tools/CreativeTools.vue
|
||||
├── pages/index/index.vue
|
||||
├── pages/auth/
|
||||
├── pages/help/
|
||||
├── pages/projects/
|
||||
├── pages/user/
|
||||
├── App.vue
|
||||
├── workflow.ts
|
||||
└── styles.css
|
||||
```
|
||||
|
||||
当前约 2.37 万行,主要功能集中在 `index.vue`、`api/client.ts` 和全局 CSS。
|
||||
|
||||
### 7.3 管理端
|
||||
|
||||
```text
|
||||
admin/src/
|
||||
├── api/client.ts
|
||||
├── api/crypto.ts
|
||||
├── App.vue
|
||||
├── main.ts
|
||||
└── styles.css
|
||||
```
|
||||
|
||||
`router/`、`stores/`、`views/` 当前只有占位文件。管理端约 1.34 万行。
|
||||
|
||||
### 7.4 Worker
|
||||
|
||||
```text
|
||||
workers/src/main.ts
|
||||
```
|
||||
|
||||
每个队列由 BullMQ Worker 消费,任务本体通过内部 HTTP 接口委托后端执行,Worker 本身不重复实现业务逻辑。
|
||||
|
||||
## 8. 当前 AI 调用流程
|
||||
|
||||
### 8.1 通用 Provider 流程
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
Input[业务输入] --> Preference[用户/项目模型偏好]
|
||||
Preference --> Config[ProviderConfig]
|
||||
Config --> Limit[启停、优先级、成本上限]
|
||||
Limit --> Execute[ProvidersService]
|
||||
Execute --> Sync[同步文本/图片/音频]
|
||||
Execute --> Async[异步视频提交与轮询]
|
||||
Sync --> Log[ProviderLog]
|
||||
Async --> Log
|
||||
Log --> Asset[Asset / VideoClip]
|
||||
Log --> Task[RenderTask 状态与成本]
|
||||
Execute --> Fallback[失败回退或人工介入]
|
||||
```
|
||||
|
||||
### 8.2 Provider 现状
|
||||
|
||||
- Provider 配置共 112 个。
|
||||
- Mock 配置 11 个,其中 10 个启用、1 个 LipSync mock 关闭。
|
||||
- Real 配置 101 个,其中 64 个启用、37 个关闭。
|
||||
- 当前已启用的真实 Provider 覆盖 Text、Novel、Image、Video、Voice、Music、Embedding、Moderation。
|
||||
- 真实 LipSync Provider 当前全部关闭。
|
||||
- 代表性已启用模型族:OpenAI、豆包/火山、DeepSeek、Qwen、Kimi、智谱、MiniMax、Kling、Seedance、Seedream、Sora 等。
|
||||
- 全局默认仍为 mock,显式选择真实 Provider 时可产生真实调用。
|
||||
|
||||
Provider 日志当前共 1002 条:
|
||||
|
||||
| 状态 | 数量 |
|
||||
| --- | ---: |
|
||||
| success | 825 |
|
||||
| failed | 170 |
|
||||
| running | 5 |
|
||||
| cancelled | 2 |
|
||||
|
||||
数据库 `cost_actual` 原始累计值为 354.9416。由于 Provider 成本币种和历史规则可能不同,该值只能用于技术对账,不能直接视为财务账单。
|
||||
|
||||
近期真实使用主要集中在:
|
||||
|
||||
- `openai-image`。
|
||||
- `kling-v3-native-audio-720p-video`。
|
||||
- `openai-responses-text`。
|
||||
- `volcengine_seedance_20_mini`。
|
||||
- `volcengine-seedream-50-image`。
|
||||
- `openai-tts`。
|
||||
|
||||
### 8.3 真人短剧流程
|
||||
|
||||
```text
|
||||
剧本/外部提示词
|
||||
-> 动态分镜与前后镜关系
|
||||
-> 角色/场景/道具资产计划
|
||||
-> Prompt Engine
|
||||
-> 关键帧
|
||||
-> 视频 Provider 预检与成本估算
|
||||
-> 单镜或批量视频、多候选
|
||||
-> 自动 QC / 重试 / Fallback / 人工选择
|
||||
-> Scene Composer 计划
|
||||
-> 字幕 / 源音轨 / TTS / BGM / SFX / 转场
|
||||
-> FFmpeg 合成
|
||||
-> 成品与素材库
|
||||
```
|
||||
|
||||
当前支持的后期参数包括:源音轨、额外音频、字幕、BGM、SFX、环境音、无源音轨回退 SFX、口型、字幕模式和音量控制。原创音乐与 Scene Composer 由项目配置控制,默认并非全部开启。
|
||||
|
||||
### 8.4 小说流程
|
||||
|
||||
```text
|
||||
创作 Brief / 导入小说
|
||||
-> 生成计划
|
||||
-> IP/故事/世界观规则
|
||||
-> Agent Prompt
|
||||
-> 章节草稿
|
||||
-> 质量报告
|
||||
-> 自动修复或重写
|
||||
-> 章节版本与上下文记忆
|
||||
-> 小说快照
|
||||
-> 听书/短剧派生任务
|
||||
```
|
||||
|
||||
小说新引擎代码已形成,但目前自动测试和管理体验还没有达到可无人值守批量生产的程度。
|
||||
|
||||
## 9. 队列任务流程
|
||||
|
||||
### 9.1 队列与任务
|
||||
|
||||
BullMQ 队列共 14 个:
|
||||
|
||||
```text
|
||||
novel_queue
|
||||
parse_queue
|
||||
story_queue
|
||||
character_queue
|
||||
episode_queue
|
||||
script_queue
|
||||
storyboard_queue
|
||||
image_queue
|
||||
audio_queue
|
||||
subtitle_queue
|
||||
video_queue
|
||||
qc_queue
|
||||
review_queue
|
||||
analytics_queue
|
||||
```
|
||||
|
||||
任务类型共 21 个,状态包括:
|
||||
|
||||
```text
|
||||
pending / running / success / failed / retrying
|
||||
cancelled / manual_required / skipped
|
||||
```
|
||||
|
||||
### 9.2 执行链
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
API[API 创建 RenderTask] --> Idempotency[输入哈希 / 幂等键]
|
||||
Idempotency --> Queue[BullMQ 入队]
|
||||
Queue --> Worker[独立 Worker]
|
||||
Worker --> Secret[WORKER_SECRET]
|
||||
Secret --> Delegate[backend internal/worker execute]
|
||||
Delegate --> Provider[通用 Provider 执行]
|
||||
Delegate --> Live[真人视频业务执行]
|
||||
Provider --> Result[日志 / 素材 / 状态]
|
||||
Live --> Result
|
||||
Result --> Retry[按类型自动重试]
|
||||
Retry --> Manual[耗尽后 manual_required]
|
||||
```
|
||||
|
||||
已实现:
|
||||
|
||||
- 幂等键与输入哈希。
|
||||
- 不同任务类型的默认重试次数。
|
||||
- 任务取消与队列 Job 清理。
|
||||
- stale running 任务恢复。
|
||||
- 失败后自动重试与人工介入。
|
||||
- 队列统计。
|
||||
|
||||
### 9.3 当前队列覆盖缺口
|
||||
|
||||
任务目录比 Worker 执行器更宽。以下任务在当前 `providerTypeForTask` 中没有实际 Provider 映射,也不属于真人业务执行器,走通用 Worker 时会被标记为 `skipped`:
|
||||
|
||||
- `long_memory_generate`
|
||||
- `subtitle_generate`
|
||||
- `live_action_keyframe_generate`
|
||||
- `live_action_video_render`
|
||||
- `analytics_event`
|
||||
|
||||
其中部分能力目前由同步 Service 方法直接执行,因此功能本身不一定不可用;但“全部已队列化”的说法不准确。`video_render` 在通用任务映射中指向 `VideoProvider`,与 FFmpeg 合成语义也需要重新核对。
|
||||
|
||||
## 10. 已实现但未完整写入原设计文档的功能
|
||||
|
||||
相较 `docs/system_a`、`docs/system_b` 的早期设计,当前代码额外出现或显著深化了:
|
||||
|
||||
1. 小说创作向导、章节 Agent、上下文构建、质量修复、版本快照与派生任务。
|
||||
2. 小说阅读器、书签、批注、阅读进度。
|
||||
3. 全局角色资产、外观版本、角色状态、角色 Prompt 版本与审核经验闭环。
|
||||
4. 人物三视图独立工具,以及“主锚点参考/本次描述覆盖”两种模式。
|
||||
5. 三视图视觉质量评分、问题提取、优化经验进入下一次生成。
|
||||
6. 项目级场景/道具/IP 资产中心和主资产版本。
|
||||
7. 动态分镜时长、前后镜衔接、转场字段、请求预览与 Prompt 人工覆盖。
|
||||
8. 真人短剧 AI Router、镜头评分、成本预检、候选视频与自动质量闭环。
|
||||
9. Kling 原生音频、Seedance、Seedream、Hailuo、Sora 等多模型目录。
|
||||
10. Scene Composer、字幕/BGM/SFX/环境音开关、源音轨策略和原创音乐包。
|
||||
11. 素材别名、选中/候选/淘汰状态、按分镜号和范围联合筛选。
|
||||
12. Provider Lab、模型偏好、人民币成本标签和 Provider 调用审计。
|
||||
13. 爆款诊断、拉片片段、创意模式和项目模式绑定。
|
||||
14. API 应用层加密、临时素材签名 URL、视频 Range 流式播放。
|
||||
|
||||
## 11. 与原设计文档的主要差异
|
||||
|
||||
| 领域 | 原设计世界 | 当前代码现实 |
|
||||
| --- | --- | --- |
|
||||
| 产品定位 | 系统 A 小说转漫剧 + 系统 B 真人写真 | 已合并演化为小说、短剧、视频、角色/IP 资产、创作工具平台 |
|
||||
| 用户端 | uni-app 多页面 | Vue 3 + Vite H5,核心集中在单一大页面 |
|
||||
| 管理端 | GeekerAdmin | 自研 Vue 单页后台,未引入完整 GeekerAdmin 架构 |
|
||||
| 数据库 | 约 20 个核心表 | 61 个 Model、33 个迁移 |
|
||||
| Provider | 抽象层与少量真实模型 | 112 个配置,覆盖大量国内外文本/图像/视频/声音模型 |
|
||||
| AI Router | 后续路由能力 | 已用于真人视频,但未成为全平台统一入口 |
|
||||
| 小说 | 原创 mock + 导入改编 | 已加入 Agent、质量循环、版本、阅读器和派生任务 |
|
||||
| 分镜 | 固定镜头/宫格倾向 | 动态时长、上下镜关系、首尾帧/多图、转场与声音层 |
|
||||
| 视频 | 图片、TTS、字幕、简单合成 | 真人视频候选、QC、原生音频、Scene Composer、复杂 FFmpeg 后期 |
|
||||
| 队列 | 所有生产任务统一异步 | Worker 已运行,但部分声明任务没有异步执行器,部分流程仍同步 |
|
||||
| 存储 | MinIO 优先设计 | 当前实际使用本地私有存储,MinIO 未完整配置 |
|
||||
| 支付 | 订单支付闭环 | 额度与 mock-pay 可用,真实支付未接入 |
|
||||
| 审核 | 内容审核闭环 | API/UI 已有,但数据库没有实际审核记录 |
|
||||
| 测试 | 文档定义生产验收 | 后端单测有覆盖但当前 35 条失败,前后端无自动测试 |
|
||||
| 版本管理 | 设计文档持续推进 | Git 只有初始提交,大量现实代码尚未形成版本基线 |
|
||||
|
||||
## 12. 当前待优化问题
|
||||
|
||||
### P0:必须先处理
|
||||
|
||||
#### 12.1 Git 无法代表当前系统
|
||||
|
||||
- `main` 只有 1 个提交。
|
||||
- 当前有 85 个修改项、47 个未跟踪项。
|
||||
- 多个数据库迁移、小说新引擎、Provider Lab、人物三视图、数据与文档都未纳入提交。
|
||||
|
||||
风险:服务器故障、误操作或换机后,无法从 Git 恢复当前系统。
|
||||
|
||||
建议:先做数据库与素材备份,再把当前状态拆成可审阅提交;不要把生成素材和临时文件混入源码提交。
|
||||
|
||||
#### 12.2 测试未达到发布基线
|
||||
|
||||
后端结果:
|
||||
|
||||
```text
|
||||
Test Files: 19 passed / 8 failed
|
||||
Tests: 238 passed / 35 failed
|
||||
```
|
||||
|
||||
失败主要分为:
|
||||
|
||||
1. 新增 Prisma 依赖后,旧测试 mock 没有补齐。
|
||||
2. 动态分镜、质量闸门、BGM/SFX 策略改变后,旧期望未更新。
|
||||
3. Provider 成本标签新增人民币后,断言仍使用旧文案。
|
||||
4. Seedance 真人参考图预检策略出现测试与实现不一致。
|
||||
|
||||
应逐条判断“测试旧了”还是“代码回归”,不能简单批量改断言。
|
||||
|
||||
#### 12.3 当前运行进程未加载最新构建
|
||||
|
||||
审计期间全仓构建通过,但 backend 和 worker 进程启动时间早于最新构建产物。需要在备份、测试和变更确认后执行受控重启,并做健康检查与核心链路冒烟测试。
|
||||
|
||||
### P1:高优先级
|
||||
|
||||
#### 12.4 队列执行覆盖不完整
|
||||
|
||||
补齐或明确移出队列:长篇记忆、字幕、真人关键帧、真人合并、分析事件。避免任务显示已入队,Worker 最后却标记 `skipped`。
|
||||
|
||||
#### 12.5 状态字段漂移
|
||||
|
||||
数据库中存在历史 `completed`,当前代码只认 `success`。项目、任务、素材、审核等大量状态均为自由字符串。建议建立状态字典、迁移脚本和兼容测试。
|
||||
|
||||
#### 12.6 本地素材是单机风险点
|
||||
|
||||
当前 977 个素材使用本地私有存储,MinIO 未完整配置,部署目录中也没有可执行备份脚本。至少需要:
|
||||
|
||||
- 数据库定时备份。
|
||||
- `storage/private` 增量备份。
|
||||
- 恢复演练。
|
||||
- 磁盘容量与失败告警。
|
||||
|
||||
#### 12.7 任务和调用失败积压
|
||||
|
||||
- RenderTask:77 failed、22 manual_required、2 pending。
|
||||
- ProviderLog:170 failed、5 running。
|
||||
|
||||
需要区分历史测试垃圾、外部异步任务和真实待处理任务,并提供批量归档/恢复策略。
|
||||
|
||||
#### 12.8 Provider 配置过多且默认策略不清晰
|
||||
|
||||
数据库中有 112 个 Provider 配置,但全局默认仍是 mock。真实 Provider 启停、用户偏好、项目偏好、Router 和显式 provider_code 同时存在,容易出现“页面选了 A,实际走 B”的理解成本。
|
||||
|
||||
建议为每次调用固定记录并展示:请求 Provider、路由原因、实际 Provider、模型、参数、输入参考图、成本和回退链。
|
||||
|
||||
#### 12.9 外部 Provider 素材 URL 配置需复核
|
||||
|
||||
当前公开素材基础 URL 未设置,而部分第三方视频/图片 Provider 需要可访问的临时参考图 URL。应把此项纳入 Provider preflight,而不是运行到提交时才失败。
|
||||
|
||||
#### 12.10 审核闭环尚未实际使用
|
||||
|
||||
`ContentReview` 当前为 0 条。需要确认是入口未触发、审核结果写到了其他字段,还是生产流程绕过了正式审核。
|
||||
|
||||
### P2:结构性优化
|
||||
|
||||
#### 12.11 超大文件与前端单体化
|
||||
|
||||
- `live-action.service.ts` 约 1.42 万行。
|
||||
- 用户端主页面约 1.35 万行。
|
||||
- 管理端主页面约 1.03 万行。
|
||||
|
||||
这会放大回归风险和协作冲突。建议按稳定业务边界逐步拆分,不做一次性大重构。
|
||||
|
||||
#### 12.12 缺少前后端自动测试与正式 E2E
|
||||
|
||||
用户端、管理端目前没有测试文件。后端以单元测试为主,没有覆盖“登录 -> 项目 -> 分镜 -> 真实 Provider -> 素材 -> 合并”的稳定 E2E。
|
||||
|
||||
#### 12.13 API 缺少机器可读契约
|
||||
|
||||
当前 289 个接口依赖 TypeScript DTO 和手写 client,没有 OpenAPI 文档与自动 client 生成。接口数量继续增长后,前后端容易漂移。
|
||||
|
||||
#### 12.14 生产运维不完整
|
||||
|
||||
`deploy/` 只有开发 compose、Nginx 示例和说明,没有落地的发布、回滚、备份、日志轮转、监控和告警脚本。当前主要依靠 systemd 日志与人工检查。
|
||||
|
||||
#### 12.15 真实支付、多租户和财务对账未完成
|
||||
|
||||
- 支付仍为 mock-pay。
|
||||
- 当前是用户级数据隔离,没有组织/租户模型。
|
||||
- `cost_actual` 的币种与财务账单口径需统一。
|
||||
|
||||
## 13. 建议建立的唯一真相机制
|
||||
|
||||
### 13.1 Work 负责
|
||||
|
||||
```text
|
||||
产品定位
|
||||
业务规则
|
||||
架构决策
|
||||
未来路线
|
||||
功能设计文档
|
||||
```
|
||||
|
||||
### 13.2 Git + Codex 负责
|
||||
|
||||
```text
|
||||
当前代码
|
||||
数据库迁移
|
||||
实现细节
|
||||
测试结果
|
||||
部署与运行事实
|
||||
```
|
||||
|
||||
### 13.3 同步规则
|
||||
|
||||
每个重要功能建议使用以下闭环:
|
||||
|
||||
```text
|
||||
Work 讨论
|
||||
-> FEATURE_xxx_V1.md
|
||||
-> Codex 实现
|
||||
-> 测试与部署
|
||||
-> 更新 CHANGELOG.md
|
||||
-> 更新 PROJECT_STATUS_Vn.md
|
||||
-> 回灌 Work
|
||||
```
|
||||
|
||||
状态文档不应每次全量覆盖,而应保留 V1、V2、V3,便于追踪系统如何演化。
|
||||
|
||||
## 14. 建议放入 Work 的首批资料
|
||||
|
||||
```text
|
||||
AI 内容生产平台/
|
||||
├── 01_项目现状/
|
||||
│ └── PROJECT_STATUS_V1.md
|
||||
├── 02_架构设计/
|
||||
│ └── SYSTEM_ARCHITECTURE.md
|
||||
├── 03_小说引擎/
|
||||
│ └── NOVEL_ENGINE.md
|
||||
├── 04_短剧引擎/
|
||||
│ └── DRAMA_ENGINE.md
|
||||
├── 05_AI流水线/
|
||||
│ └── AI_PIPELINE.md
|
||||
├── 06_数据库/
|
||||
│ └── DATABASE.md
|
||||
└── 07_版本记录/
|
||||
└── CHANGELOG.md
|
||||
```
|
||||
|
||||
本次只生成真实状态基线。其余文档应以本文件为依据重新整理,而不是直接复制旧系统 A/B 文档并假定其全部已实现。
|
||||
|
||||
## 15. 本次验证记录
|
||||
|
||||
已执行并确认:
|
||||
|
||||
- 全仓生产构建通过。
|
||||
- Prisma schema 可用。
|
||||
- 33 个迁移与当前数据库一致。
|
||||
- 后端健康检查通过。
|
||||
- backend 与 worker systemd 服务正在运行。
|
||||
- MySQL、Redis、Nginx 正在运行。
|
||||
- 数据库只读数量与 Provider/任务状态统计完成。
|
||||
- 自动测试执行完成,并如实记录 35 条失败。
|
||||
|
||||
未执行:
|
||||
|
||||
- 未重启生产服务。
|
||||
- 未修改数据库数据。
|
||||
- 未触发新的付费 AI 生成。
|
||||
- 未做浏览器端完整 E2E。
|
||||
- 未做数据库或素材恢复演练。
|
||||
|
||||
Reference in New Issue
Block a user