Files
ai/PROJECT_STATUS_V1.md

880 lines
32 KiB
Markdown
Raw Permalink 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.
# AI 内容生产平台项目现状 V1
> 文档类型:项目状态回灌 / 技术审计快照
> 审计时间:2026-07-15Europe/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。
- ORMPrisma 6MySQL。
- 队列: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 Model61 个。
- Prisma Enum0 个。
- 数据库迁移: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 总量
- Controller25 个。
- 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 任务和调用失败积压
- RenderTask77 failed、22 manual_required、2 pending。
- ProviderLog170 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。
- 未做数据库或素材恢复演练。