Files
mirageai/docs/ARCHITECTURE.md
T
2026-05-13 21:58:19 +08:00

162 lines
6.3 KiB
Markdown
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.
# waoowaoo 技术架构说明
本文档描述仓库当前的整体技术架构、运行时拓扑与主要模块职责,便于新成员理解与运维部署对照。
---
## 1. 产品定位
**waoowaoo** 是一款面向「小说 / 剧本 → 分镜、角色、场景 → 配音 → 成片」的 **AI 影视创作 Web 应用**。用户在浏览器中管理项目与创作流程;**长耗时生成与第三方 AI 调用**主要在服务端与独立 Worker 进程中异步完成。
---
## 2. 运行时拓扑(多进程)
生产与本地开发均采用 **Next.js Web 进程 + 多个常驻 Node 进程**(见根目录 `package.json``dev` / `start` 脚本,由 `concurrently` 编排):
| 进程 | 说明 |
|------|------|
| **Next.js** | `next dev` / `next start`App Router 页面、`src/app/api/**` 的 HTTP API、SSR |
| **BullMQ Workers** | `src/lib/workers/index.ts`:消费 Redis 队列,处理图片 / 视频 / 语音 / 文本等任务 |
| **Watchdog** | `scripts/watchdog.ts`:队列与健康类辅助脚本 |
| **Bull Board** | `scripts/bull-board.ts`:队列可视化(Express |
**基础设施**`docker-compose.yml` 与典型自建环境):
- **MySQL 8**:业务与任务相关持久化(Prisma)
- **Redis 7**BullMQ 队列与部分运行时状态
- **对象存储**:默认 **MinIOS3 兼容)**;亦可对接 AWS S3、腾讯云 COS 等(见依赖与 `STORAGE_TYPE`
---
## 3. 逻辑分层示意
```mermaid
flowchart TB
subgraph client [浏览器]
UI[Next App Router + React]
RQ[TanStack Query]
end
subgraph next [Next.js 进程]
API[src/app/api]
Auth[NextAuth]
Prisma[Prisma Client]
end
subgraph infra [基础设施]
MySQL[(MySQL)]
Redis[(Redis)]
S3[(对象存储 S3 兼容)]
end
subgraph workers [Worker 进程]
W[BullMQ Workers]
Gen[Generators / Providers]
end
UI --> RQ --> API
API --> Auth
API --> Prisma --> MySQL
API --> Redis
API --> S3
W --> Redis
W --> Gen
W --> Prisma
W --> S3
Gen --> Ext[外部 AI / 媒体 API]
```
---
## 4. 前端技术栈
| 领域 | 技术 |
|------|------|
| 框架 | **Next.js 15**App Router)、**React 19** |
| 构建 / 开发 | **Turbopack**`next dev --turbopack`)、TypeScript |
| 国际化 | **next-intl**`src/middleware.ts``src/i18n.ts` 配置 **`localePrefix: 'always'`**(路径如 `/zh/...``/en/...` |
| 服务端状态 | **TanStack React Query**`@tanstack/react-query` |
| 交互 | **@dnd-kit**(拖拽排序等) |
| 视频 / 时间线 | **Remotion**`remotion``@remotion/player``@remotion/cli` |
| 样式 | **Tailwind CSS v4**、**Geist** 字体、**lucide-react** |
**页面与业务模块**主要位于 `src/app/[locale]/...`,其中 **novel-promotion**(小说推广 / 分镜工作流)与 **asset-hub**(资产库)等为核心业务区。
---
## 5. 后端与数据层
| 领域 | 技术 |
|------|------|
| API | **Route Handlers**`src/app/api/**`(与前端同仓部署) |
| ORM / 数据库 | **Prisma 6** + **MySQL**`prisma/schema.prisma` |
| 认证 | **NextAuth v4** + **`@next-auth/prisma-adapter`** |
数据模型围绕用户、项目、分集、分镜、角色、场景、媒体对象、异步任务与计费等展开,体量较大,属于典型创作类 SaaS 模型。
---
## 6. 异步任务与媒体管线
- **队列****BullMQ** + **ioredis**
- **Worker 拆分**`src/lib/workers/` 下按领域划分(如 `image.worker``video.worker``voice.worker``text.worker`),具体任务逻辑在 `src/lib/workers/handlers/**`
- **设计意图**:HTTP 请求负责校验、落库、入队;长耗时生成在 Worker 中执行,避免 Next 请求超时,并便于重试与监控。
---
## 7. AI 与多厂商集成
- **抽象方式**`src/lib/generators/**` 以工厂(如 `factory.ts`)按 `provider` 选择图片 / 视频 / 音频生成器;与用户或系统级 **`api-config`**、模型网关等配合。
- **依赖生态(节选)**Vercel **AI SDK**`ai``@ai-sdk/*`)、**OpenAI**、**Google GenAI**、**OpenRouter**、**FAL** 等;另有 `src/lib/providers/**` 等官方或兼容网关封装。
- **治理**`package.json` 中大量 **`scripts/guards/*`** 与 **`check:*`**,用于约束 API 层不直连 LLM、模型能力不落硬编码、路由与计费契约等,体现「配置中心 + 契约 / 静态检查」的工程策略。
---
## 8. 存储与文件
- **初始化**`npm run storage:init``src/lib/storage/init.ts`
- **后端**`src/lib/storage` 抽象多后端;支持 MinIO / S3 / COS 等,与 Docker 环境变量(如 `STORAGE_TYPE``MINIO_*`)对齐。
- **媒体引用**:数据库中记录存储键或媒体对象关联,Worker 上传后回写。
---
## 9. 工程化与质量
| 类型 | 说明 |
|------|------|
| 类型检查 | `npm run typecheck``tsc --noEmit` |
| Lint | ESLint`eslint-config-next` |
| 测试 | **Vitest**`tests/unit``tests/integration`api / provider / chain / task)、`tests/system``tests/regression`;计费有专项单测与并发测 |
| Git 钩子 | **Husky**`prepare` 脚本) |
| 脚本门禁 | 大量 `check:*``test:guards` 聚合,与 CI / 本地校验流程配合 |
---
## 10. 目录与模块速查(开发向)
| 路径 | 职责 |
|------|------|
| `src/app/[locale]/` | 国际化下的页面与布局 |
| `src/app/api/` | HTTP API |
| `src/lib/workers/` | 队列 Worker 入口与任务处理器 |
| `src/lib/generators/` | 各厂商图片 / 视频 / 音频生成器与工厂 |
| `src/lib/prisma.ts` | Prisma 客户端单例等 |
| `src/lib/query/` | React Query 封装、mutation、keys |
| `prisma/` | Schema 与迁移 |
| `messages/` | next-intl 文案(如 `zh``en` |
| `scripts/` | 运维脚本、守卫脚本、迁移脚本 |
| `tests/` | 各类自动化测试 |
---
## 11. 一句话总结
本项目采用 **「Next 全栈单体 + Prisma/MySQL + Redis/BullMQ 异步 Worker + S3 兼容对象存储 + 多厂商生成器工厂」** 架构:Web 负责交互与编排,**队列 Worker** 承载重任务与多模型调用,并通过 **守卫脚本与测试** 将模型与路由约束在可维护的配置与契约之内。
---
## 12. 文档维护
架构随版本迭代会变化;若重大变更(如队列方案、数据库、部署拓扑),请同步更新本文件并在 PR 中说明变更要点。