内容数据模型.md 18 KB

内容数据模型

本文档引用的文件

  • schema.prisma
  • book-generator.types.ts
  • book-generator.store.ts
  • book-generator.controller.ts
  • book-generator.service.ts
  • langgraph-controller.ts
  • search.service.ts
  • search.controller.ts
  • README.md
  • status-system-analysis.md

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论
  10. 附录

简介

AI有声书生成平台是一个基于LangGraph的智能内容创作系统,专注于自动化生成高质量的有声读物内容。该平台采用三级目录结构设计,通过AI驱动的内容生成流程,为用户提供从书籍规划到最终发布的完整解决方案。

本平台的核心价值在于其创新的内容数据模型设计,通过精心设计的Book和BookChapter模型,实现了内容的层次化组织、状态化的生命周期管理和智能化的生成流程控制。系统支持从简单的文本描述到复杂的多媒体内容的全方位创作需求。

项目结构

平台采用模块化的架构设计,主要分为以下几个核心模块:

graph TB
subgraph "数据层"
A[Prisma ORM]
B[MySQL 数据库]
end
subgraph "业务逻辑层"
C[Book Generator 模块]
D[Search 模块]
E[TTS 模块]
F[Video Generator 模块]
end
subgraph "表现层"
G[前端应用]
H[API 接口]
end
A --> B
C --> A
D --> A
E --> A
F --> A
G --> H
H --> C
H --> D
H --> E
H --> F

图表来源

  • schema.prisma
  • book-generator.types.ts

章节来源

  • schema.prisma
  • book-generator.types.ts

核心组件

数据模型概述

平台的核心数据模型围绕两个主要实体构建:Book(书籍)和BookChapter(章节)。这两个模型通过外键关系紧密关联,形成了完整的书籍内容管理体系。

Book模型设计

Book模型作为书籍的顶层容器,负责管理书籍的基本元数据、生成状态和整体进度。其设计体现了现代内容管理系统的核心需求:

核心字段说明:

  • id: 主键标识符,自增整数
  • userId: 创建者标识,支持匿名创建
  • title/subtitle/description: 书籍基本信息,支持副标题和详细描述
  • coverUrl: 封面图片URL,支持自定义封面
  • targetAudience/style/bookScale: 内容定位参数,影响生成策略
  • totalChapters/estimatedWords: 书籍规模指标,指导生成资源配置
  • progress/isPublished: 生成进度和发布状态
  • outlineJson/foreword/afterword: 大纲和前后记内容
  • errorMsg/bookAnalysis: 错误信息和AI分析结果
  • genStage/status: 生成阶段和业务状态

BookChapter模型设计

BookChapter模型采用三级目录结构,实现了内容的层次化组织:

层级结构:

  • Level 1 (章): 书籍的主要章节,不存储正文内容
  • Level 2 (节): 章节下的子章节,不存储正文内容
  • Level 3 (小节): 最终内容单元,存储实际的正文内容

内容存储策略:

  • 正文内容仅存储在Level 3小节中,避免数据冗余
  • Level 1和Level 2仅作为导航结构,提供清晰的层次关系
  • 通过parentId字段建立父子关系,形成完整的树形结构

状态管理:

  • genStage: 生成阶段状态,从idle到video_completed的完整流程
  • status: 章节业务状态,支持pending、completed、failed等状态
  • contentError: 内容生成错误信息
  • generatedAt: 内容生成时间戳

章节内容字段:

  • title: 章节标题
  • summary/keyPoints: 章节概述和核心要点
  • estimatedWords/wordCount: 预估和实际字数统计
  • content: 正文内容(仅Level 3存储)
  • audioUrl/audioDuration: 音频资源和时长
  • videoUrl/videoDuration: 视频资源和时长
  • isPublic: 公开状态,控制内容可见性

章节来源

  • schema.prisma
  • book-generator.types.ts

架构概览

平台采用分层架构设计,确保了系统的可扩展性和维护性:

graph TD
subgraph "API 层"
A[LangGraph 控制器]
B[批量生成控制器]
C[搜索控制器]
end
subgraph "服务层"
D[Book Generator 服务]
E[批量生成编排器]
F[搜索服务]
end
subgraph "存储层"
G[BookStore 存储]
H[Prisma 数据库]
end
subgraph "外部服务"
I[TTS 服务]
J[视频生成服务]
K[WebSocket 通知]
end
A --> D
B --> E
C --> F
D --> G
E --> G
F --> H
G --> H
D --> I
D --> J
E --> K
G --> K

图表来源

  • langgraph-controller.ts
  • book-generator.controller.ts
  • book-generator.service.ts
  • book-generator.store.ts

章节来源

  • langgraph-controller.ts
  • book-generator.controller.ts
  • book-generator.service.ts

详细组件分析

Book模型详细分析

数据结构设计

Book模型的设计充分考虑了内容创作的复杂性和多样性,通过合理的字段划分实现了功能的完整性:

classDiagram
class Book {
+id : number
+userId : number
+title : string
+subtitle : string
+description : string
+coverUrl : string
+targetAudience : string
+style : string
+bookScale : string
+totalChapters : number
+estimatedWords : number
+progress : number
+isPublished : boolean
+outlineJson : string
+foreword : string
+afterword : string
+errorMsg : string
+bookAnalysis : string
+genStage : string
+status : string
+failedStage : string
+createdAt : Date
+updatedAt : Date
}
class BookChapter {
+id : number
+bookId : number
+parentId : number
+level : number
+number : number
+title : string
+summary : string
+keyPoints : string
+estimatedWords : number
+content : string
+wordCount : number
+contentError : string
+generatedAt : Date
+audioUrl : string
+audioDuration : number
+videoUrl : string
+videoDuration : number
+isPublic : boolean
+genStage : string
+status : string
+lrcLyrics : string
}
Book "1" --> "*" BookChapter : "has many"

图表来源

  • schema.prisma

业务状态管理

Book模型实现了完整的生命周期状态管理,支持从草稿到发布的全流程控制:

状态流转图:

stateDiagram-v2
[*] --> 草稿
草稿 --> 规划中 : 创建大纲
规划中 --> 生成中 : 内容生成
生成中 --> 已完成 : 全部章节完成
生成中 --> 失败 : 生成异常
已完成 --> 已发布 : 发布操作
失败 --> 规划中 : 重新规划
已发布 --> 已完成 : 内容更新

状态字段说明:

  • status: 业务状态,支持draft、planning、generating、completed、failed、interrupted
  • genStage: 生成阶段,支持draft、outlining、content_generating、video_completed等
  • failedStage: 失败阶段记录,便于问题定位和恢复

内容存储策略

平台采用了智能的内容存储策略,通过JSON格式存储大纲信息,实现了灵活性和结构化的平衡:

大纲数据格式:

{
  "bookType": "textbook",
  "mainTheme": "人工智能基础",
  "structureLogic": "理论-实践-案例",
  "chapters": [
    {
      "number": 1,
      "title": "第一章:AI概述",
      "summary": "介绍人工智能的基本概念和发展历程",
      "keyPoints": ["AI定义", "发展历程", "应用领域"],
      "estimatedWords": 5000,
      "sections": [
        {
          "number": 1,
          "title": "1.1 什么是人工智能",
          "summary": "详细解释AI的概念和特征",
          "keyPoints": ["定义", "特征", "分类"],
          "estimatedWords": 2000,
          "subsections": [
            {
              "number": 1,
              "title": "1.1.1 基本概念",
              "summary": "AI的核心概念和基本原理",
              "keyPoints": ["机器学习", "深度学习", "神经网络"],
              "estimatedWords": 1000
            }
          ]
        }
      ]
    }
  ]
}

章节来源

  • book-generator.types.ts
  • book-generator.store.ts

BookChapter模型详细分析

三级目录结构

BookChapter模型实现了严格的三级目录结构,这是平台内容组织的核心设计:

目录层级关系:

graph TD
A[Level 1 - 章] --> B[Level 2 - 节]
B --> C[Level 3 - 小节]
A["章节标题<br/>不存储正文"]
B["节标题<br/>不存储正文"]
C["小节内容<br/>存储正文"]
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#e8f5e8

图表来源

  • README.md

内容生成流程

平台的章节生成流程体现了高度的智能化和自动化:

sequenceDiagram
participant U as 用户
participant API as API接口
participant LS as LangGraph服务
participant DB as 数据库
participant TTS as TTS服务
U->>API : 创建书籍请求
API->>LS : 启动生成流程
LS->>DB : 创建Level 1章节
LS->>LS : 生成Level 2节
LS->>LS : 生成Level 3小节
LS->>DB : 存储正文内容
DB->>TTS : 生成音频
TTS->>DB : 更新音频URL
DB->>API : 返回生成结果
API->>U : 返回完成状态

图表来源

  • book-generator.service.ts
  • book-generator.store.ts

章节状态管理

每个章节都具有独立的状态管理系统,支持精细化的进度跟踪:

章节状态机:

stateDiagram-v2
[*] --> 空闲
空闲 --> 大纲完成 : 生成大纲
大纲完成 --> 内容生成中 : 开始生成
内容生成中 --> 内容完成 : 生成完成
内容生成中 --> 失败 : 生成异常
内容完成 --> 音频生成中 : 生成音频
音频生成中 --> 音频完成 : 音频完成
音频完成 --> 视频生成中 : 生成视频
视频生成中 --> 视频完成 : 视频完成
失败 --> 大纲完成 : 重新生成

状态字段映射:

  • genStage: 生成阶段状态
  • status: 业务状态
  • contentError: 内容错误信息
  • generatedAt: 生成时间

章节来源

  • book-generator.types.ts
  • book-generator.store.ts

API接口设计

书籍管理API

平台提供了完整的书籍管理API,支持从创建到发布的全流程操作:

核心API接口:

  • POST /api/book-generator/langgraph/books - 创建书籍
  • GET /api/book-generator/langgraph/books/:id - 获取书籍详情
  • POST /api/book-generator/langgraph/books/:id/generate - 一键生成
  • POST /api/book-generator/books/:id/batch-generate - 批量生成
  • PUT /api/book-generator/langgraph/books/:id/publish - 切换发布状态

搜索和推荐API

搜索功能:

  • GET /api/search - 全局搜索
  • GET /api/search/hot - 热门搜索词
  • GET /api/search/history - 搜索历史

智能推荐:

  • POST /api/book-generator/langgraph/smart-recommend - 智能推荐

章节来源

  • langgraph-controller.ts
  • book-generator.controller.ts
  • search.controller.ts

依赖关系分析

数据模型依赖

平台的数据模型之间存在清晰的依赖关系,确保了数据的一致性和完整性:

graph LR
subgraph "核心模型"
A[Book] --> B[BookChapter]
B --> C[Comment]
B --> D[PlayRecord]
B --> E[PlaylistItem]
end
subgraph "关联模型"
F[Favorite] --> A
G[User] --> A
H[User] --> B
I[VideoProject] --> A
I --> B
end
subgraph "工具模型"
J[SearchHistory]
K[HotSearch]
L[TokenUsage]
end

图表来源

  • schema.prisma

业务流程依赖

平台的业务流程体现了高度的模块化和解耦设计:

流程依赖关系:

  • BookGenerator服务依赖于BookStore存储
  • 批量生成编排器依赖于各个生成步骤
  • 搜索服务独立于内容生成流程
  • TTS和视频生成服务通过接口集成

章节来源

  • book-generator.service.ts
  • book-generator.store.ts

性能考虑

数据库优化

平台在数据库层面采用了多项优化策略:

索引设计:

  • Book表:(userId, status)复合索引,createdAt索引
  • BookChapter表:bookIdbookId_parentIdbookId_level复合索引
  • 搜索优化:对titledescription字段建立全文检索支持

查询优化:

  • 分页查询:限制返回结果数量,避免大数据集查询
  • 条件查询:使用精确匹配和范围查询减少扫描
  • 连接优化:合理使用JOIN操作,避免N+1查询问题

缓存策略

平台实现了多层次的缓存机制:

内存缓存:

  • 书籍对象缓存,减少数据库访问
  • 章节树结构缓存,加速树形结构构建
  • 搜索结果缓存,提升搜索性能

分布式缓存:

  • Redis缓存热门内容
  • WebSocket连接池,支持实时通知

并发控制

平台采用了多种并发控制机制:

事务管理:

  • 批量操作使用数据库事务保证一致性
  • 发布操作使用原子性更新
  • 状态更新使用乐观锁机制

队列管理:

  • 生成任务队列,支持任务调度
  • 限流控制,防止系统过载
  • 重试机制,提高可靠性

故障排除指南

常见问题诊断

状态不一致问题: 当遇到书籍状态与章节状态不一致的情况时,可以通过以下方式诊断:

  1. 检查computeBookGenStage函数的计算逻辑
  2. 验证所有章节的genStage字段值
  3. 确认failedStage字段的正确设置

数据迁移问题: 对于历史数据的迁移,需要注意:

  1. 章节层级识别:区分Level 1和Level 3的异常数据
  2. 父子关系修复:确保parentId字段的正确性
  3. 数据完整性检查:验证所有必要字段的完整性

性能监控

监控指标:

  • 数据库查询延迟
  • API响应时间
  • 内存使用情况
  • 磁盘I/O性能

告警机制:

  • 自动化健康检查
  • 异常状态检测
  • 性能阈值告警

章节来源

  • status-system-analysis.md
  • book-generator.store.ts

结论

AI有声书生成平台通过精心设计的数据模型和架构,成功实现了从内容创作到发布的完整解决方案。Book和BookChapter模型的设计体现了现代内容管理系统的核心理念,即通过合理的数据结构支持复杂的业务流程。

平台的主要优势包括:

  1. 灵活的内容组织:三级目录结构支持复杂的内容层次
  2. 智能化的生成流程:基于LangGraph的AI驱动内容生成
  3. 完善的生命周期管理:从草稿到发布的全流程控制
  4. 可扩展的架构设计:模块化设计支持功能扩展
  5. 高性能的实现:优化的数据库设计和缓存策略

未来的发展方向包括:

  • 增强AI生成能力,支持更多内容类型的创作
  • 优化用户体验,提供更直观的创作界面
  • 扩展多平台支持,覆盖更多的发布渠道
  • 加强数据分析,提供内容质量评估功能

附录

API使用示例

创建书籍:

// POST /api/book-generator/langgraph/books
const response = await fetch('/api/book-generator/langgraph/books', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({
    title: '示例书籍',
    description: '这是一本示例书籍的描述',
    targetAudience: '通用',
    style: '专业严谨'
  })
});

批量生成:

// POST /api/book-generator/books/{id}/batch-generate
const response = await fetch(`/api/book-generator/books/${bookId}/batch-generate`, {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({
    steps: ['generate_content', 'generate_audio', 'merge_audio']
  })
});

搜索内容:

// GET /api/search?q=关键词
const response = await fetch(`/api/search?q=人工智能&limit=20`);
const results = await response.json();

状态管理最佳实践

状态更新策略:

  1. 使用原子性更新确保状态一致性
  2. 实现幂等性操作避免重复更新
  3. 建立状态回滚机制处理异常情况
  4. 提供状态查询接口便于调试

性能优化建议:

  1. 合理使用缓存减少数据库访问
  2. 实现批量操作提升处理效率
  3. 优化索引设计提升查询性能
  4. 建立监控体系及时发现问题