批量生成系统
本文引用的文件
- server/src/modules/book-generator/book-generator.controller.ts
- server/src/modules/book-generator/book-generator.service.ts
- server/src/modules/book-generator/book-queue.processor.ts
- server/src/services/queue.service.ts
- server/src/services/memory-queue.ts
- server/src/modules/book-generator/fault-tolerance.ts
- server/src/modules/book-generator/stage-manager.ts
- server/src/modules/book-generator/graph.ts
- server/src/modules/book-generator/strategies/sequential.strategy.ts
- server/src/modules/book-generator/strategies/one-step-outline.strategy.ts
- server/src/modules/book-generator/strategies/per-chapter.strategy.ts
- server/src/modules/book-generator/book-generator.types.ts
- server/src/modules/book-generator/book-generator-optimizations.ts
目录
- 简介
- 项目结构
- 核心组件
- 架构总览
- 详细组件分析
- 依赖关系分析
- 性能考虑
- 故障排查指南
- 结论
- 附录:API 接口文档
简介
本技术文档面向“批量生成系统”,聚焦于书籍生成的端到端流程:从任务创建、队列调度与执行监控,到生成步骤的组合与执行策略、状态跟踪与容错恢复、以及性能优化与 API 使用说明。系统采用“线性步骤编排 + LangGraph 工作流”的双层架构,既保证生成步骤的可控性,又通过工作流图实现复杂节点的条件流转与并行化。
项目结构
批量生成系统主要分布在以下模块与服务中:
- 控制器层:提供批量生成、取消与状态查询的 HTTP 接口
- 编排层:负责生成步骤的顺序执行、进度推送与取消检查
- 队列层:基于 Bull/Redis 的任务队列与内存队列回退
- 容错层:AI 调用重试、节点超时、进度监控与自动恢复
- 状态层:章节/书籍阶段管理与安全状态迁移
工作流层:LangGraph 图结构与多种生成策略
graph TB
subgraph "控制器层"
C1["book-generator.controller.ts<br/>批量生成/取消/状态接口"]
end
subgraph "编排层"
S1["book-generator.service.ts<br/>BatchGenerationOrchestrator<br/>步骤编排与进度推送"]
end
subgraph "队列层"
Q1["queue.service.ts<br/>Bull 队列封装"]
Q2["memory-queue.ts<br/>内存队列回退"]
QP["book-queue.processor.ts<br/>书籍生成队列处理器"]
end
subgraph "容错层"
F1["fault-tolerance.ts<br/>重试/超时/监控/恢复"]
end
subgraph "状态层"
SM["stage-manager.ts<br/>章节/书籍阶段迁移"]
end
subgraph "工作流层"
G1["graph.ts<br/>LangGraph 状态定义"]
ST1["sequential.strategy.ts"]
ST2["one-step-outline.strategy.ts"]
ST3["per-chapter.strategy.ts"]
end
C1 --> S1
S1 --> QP
QP --> Q1
QP --> Q2
S1 --> F1
S1 --> SM
QP --> G1
G1 --> ST1
G1 --> ST2
G1 --> ST3
图表来源
- server/src/modules/book-generator/book-generator.controller.ts:1-199
- server/src/modules/book-generator/book-generator.service.ts:1-549
- server/src/modules/book-generator/book-queue.processor.ts:1-124
- server/src/services/queue.service.ts:1-266
- server/src/services/memory-queue.ts:1-99
- server/src/modules/book-generator/fault-tolerance.ts:1-387
- server/src/modules/book-generator/stage-manager.ts:1-202
- server/src/modules/book-generator/graph.ts:1-83
- server/src/modules/book-generator/strategies/sequential.strategy.ts:1-60
- server/src/modules/book-generator/strategies/one-step-outline.strategy.ts:1-56
- server/src/modules/book-generator/strategies/per-chapter.strategy.ts:1-56
章节来源
- server/src/modules/book-generator/book-generator.controller.ts:1-199
- server/src/modules/book-generator/book-generator.service.ts:1-549
- server/src/modules/book-generator/book-queue.processor.ts:1-124
- server/src/services/queue.service.ts:1-266
- server/src/services/memory-queue.ts:1-99
- server/src/modules/book-generator/fault-tolerance.ts:1-387
- server/src/modules/book-generator/stage-manager.ts:1-202
- server/src/modules/book-generator/graph.ts:1-83
- server/src/modules/book-generator/strategies/sequential.strategy.ts:1-60
- server/src/modules/book-generator/strategies/one-step-outline.strategy.ts:1-56
- server/src/modules/book-generator/strategies/per-chapter.strategy.ts:1-56
核心组件
- 批量生成编排器:负责按顺序执行生成步骤,推送进度,检查取消信号,并在完成后清理标志
- 书籍生成队列处理器:使用 Bull/Redis 或内存队列处理书籍生成任务,支持并发控制与事件监听
- 队列服务:封装 Bull 队列,提供任务状态查询与进度更新能力
- 容错层:提供 AI 调用重试、节点超时控制、进度监控与自动恢复
- 阶段管理器:确保章节/书籍状态的线性迁移与资源清理
- 工作流与策略:LangGraph 状态图与多种生成策略(串行、一步大纲+并行内容、逐章内聚)
章节来源
- server/src/modules/book-generator/book-generator.service.ts:45-143
- server/src/modules/book-generator/book-queue.processor.ts:16-83
- server/src/services/queue.service.ts:48-266
- server/src/modules/book-generator/fault-tolerance.ts:68-180
- server/src/modules/book-generator/stage-manager.ts:100-198
- server/src/modules/book-generator/graph.ts:23-82
架构总览
系统采用“控制器-编排-队列-工作流-容错-状态”分层架构:
图表来源
- server/src/modules/book-generator/book-generator.controller.ts:24-119
- server/src/modules/book-generator/book-generator.service.ts:77-143
- server/src/modules/book-generator/book-queue.processor.ts:16-83
- server/src/modules/book-generator/stage-manager.ts:158-198
详细组件分析
批量生成编排器(BatchGenerationOrchestrator)
- 职责:顺序执行生成步骤(内容、音频、合并音频、视频、合并视频),推送进度,检查取消,处理异常
关键点:
图表来源
- server/src/modules/book-generator/book-generator.service.ts:77-536
章节来源
- server/src/modules/book-generator/book-generator.service.ts:45-143
- server/src/modules/book-generator/book-generator.service.ts:149-536
书籍生成队列处理器(Bull/内存队列)
- 职责:处理书籍生成任务,设置初始状态,捕获完成/失败事件,更新书籍状态
- 并发控制:Redis 队列最大并发 3;内存队列同构实现
- 回退机制:当 Redis 不可用时自动切换到内存队列
恢复机制:启动时扫描数据库中处于生成中的书籍并重新入队
sequenceDiagram
participant QS as "队列服务<br/>queue.service.ts"
participant MQ as "内存队列<br/>memory-queue.ts"
participant Proc as "处理器<br/>book-queue.processor.ts"
participant LG as "LangGraph生成器"
participant DB as "数据库/存储"
QS->>Proc : getQueue(BOOK_GENERATION)
alt Redis可用
Proc->>QS : redisQueue.process(3, handler)
else Redis不可用
Proc->>MQ : memoryQueue.process(3, handler)
end
Proc->>DB : 更新书籍状态为 outling
Proc->>LG : generate(bookId, topic, scale, level)
LG-->>Proc : 完成/异常
Proc->>DB : 成功则标记完成;失败则标记失败
图表来源
- server/src/modules/book-generator/book-queue.processor.ts:48-83
- server/src/services/queue.service.ts:88-133
- server/src/services/memory-queue.ts:48-99
章节来源
- server/src/modules/book-generator/book-queue.processor.ts:16-124
- server/src/services/queue.service.ts:48-133
- server/src/services/memory-queue.ts:17-99
队列服务(Bull 封装)
- 职责:提供队列实例、任务状态查询、进度更新回调注册
- 设计原则:队列只负责排队与并发控制,失败重试、超时管理交由上层业务与容错层处理
- 状态映射:waiting/active/completed/failed/delayed 映射到统一 TaskStatus
章节来源
- server/src/services/queue.service.ts:48-266
容错层(重试/超时/监控/恢复)
图表来源
- server/src/modules/book-generator/fault-tolerance.ts:68-180
章节来源
- server/src/modules/book-generator/fault-tolerance.ts:17-180
- server/src/modules/book-generator/fault-tolerance.ts:188-323
阶段管理器(线性阶段与安全迁移)
- 章节阶段:从 idle 到 outline_completed → content_generating → content_completed → audio_generating → audio_completed → video_generating → video_completed → failed
- 安全迁移:验证转移矩阵、乐观锁更新、回退时清理下游资源
上层封装:advanceChapter(只能前进)、regenerateChapter(可回退并清理)
stateDiagram-v2
[*] --> idle
idle --> content_generating : "开始内容生成"
content_generating --> content_completed : "完成"
content_completed --> audio_generating : "推进"
audio_generating --> audio_completed : "完成"
audio_completed --> video_generating : "推进"
video_generating --> video_completed : "完成"
content_generating --> failed : "失败"
audio_generating --> failed : "失败"
video_generating --> failed : "失败"
failed --> content_generating : "重新生成"
failed --> idle : "重置"
图表来源
- server/src/modules/book-generator/stage-manager.ts:57-147
章节来源
- server/src/modules/book-generator/stage-manager.ts:100-198
工作流与策略(LangGraph)
- 状态定义:包含 bookId、topic、bookScale、genLevel、progress、completedChapters、failedChapters 等
- 策略实现:
- 串行策略:plan → outline → sections → subsections → write_chapters
- 一步大纲+并行内容:plan → full_outline → write_chapters(并行)
- 逐章内聚:plan → outline → per_chapter(每章独立并行)
章节来源
- server/src/modules/book-generator/graph.ts:23-82
- server/src/modules/book-generator/strategies/sequential.strategy.ts:21-59
- server/src/modules/book-generator/strategies/one-step-outline.strategy.ts:21-55
- server/src/modules/book-generator/strategies/per-chapter.strategy.ts:21-55
依赖关系分析
图表来源
- server/src/modules/book-generator/book-generator.controller.ts:1-199
- server/src/modules/book-generator/book-generator.service.ts:1-549
- server/src/modules/book-generator/book-queue.processor.ts:1-124
- server/src/services/queue.service.ts:1-266
- server/src/services/memory-queue.ts:1-99
- server/src/modules/book-generator/fault-tolerance.ts:1-387
- server/src/modules/book-generator/stage-manager.ts:1-202
- server/src/modules/book-generator/graph.ts:1-83
- server/src/modules/book-generator/strategies/sequential.strategy.ts:1-60
- server/src/modules/book-generator/strategies/one-step-outline.strategy.ts:1-56
- server/src/modules/book-generator/strategies/per-chapter.strategy.ts:1-56
章节来源
性能考虑
- 内存队列:在 Redis 不可用时提供基本并发与处理能力,适合小规模场景
- 并发控制:队列处理器最大并发 3,避免资源争用;策略层面的并行(如逐章内聚)可进一步提升吞吐
- 轮询等待:内容/音频/视频生成采用轮询检查,间隔与超时时间可调,平衡实时性与负载
- 指数退避:AI 调用重试采用指数退避,降低对上游服务的压力峰值
- 模型角色:通过环境变量为不同任务选择合适模型,优化质量与成本
- 后处理:内容清洗与格式化减少后续处理开销
章节来源
- server/src/services/memory-queue.ts:17-99
- server/src/modules/book-generator/book-queue.processor.ts:52-82
- server/src/modules/book-generator/book-generator.service.ts:178-217
- server/src/modules/book-generator/book-generator.service.ts:257-285
- server/src/modules/book-generator/book-generator.service.ts:424-453
- server/src/modules/book-generator/fault-tolerance.ts:68-123
- server/src/modules/book-generator/book-generator-optimizations.ts:29-47
- server/src/modules/book-generator/book-generator-optimizations.ts:49-54
故障排查指南
- 任务状态查询:通过控制器接口查询任务是否在运行
- 取消任务:向控制器发送取消请求,编排器会在步骤间检查取消标志
- 队列不可用:Redis 不可用时自动回退到内存队列;检查队列处理器日志
- 进度无更新:容错层会发出“长时间无响应”告警,必要时触发自动恢复
- 失败重试:AI 调用失败会自动重试并记录错误,查看书籍错误信息字段
章节来源
- server/src/modules/book-generator/book-generator.controller.ts:125-197
- server/src/modules/book-generator/book-generator.service.ts:24-40
- server/src/modules/book-generator/book-queue.processor.ts:77-82
- server/src/modules/book-generator/fault-tolerance.ts:188-261
- server/src/modules/book-generator/fault-tolerance.ts:268-323
结论
批量生成系统通过清晰的分层设计实现了高可靠与高扩展性:编排器确保步骤可控,队列层提供并发与回退,容错层保障稳定性,阶段管理器维护一致性,工作流层支持多种策略。结合性能优化与完善的监控告警,系统能够在复杂生成任务中保持稳定与高效。
附录:API 接口文档
1. 一键完整生成书籍
- 方法与路径:POST /api/book-generator/books/:id/batch-generate
- 请求体
- steps: GenerationStep[](可选,默认全部步骤)
- 可选值:generate_content, generate_audio, merge_audio, generate_video, merge_video
- 响应
- code: 0 表示成功,非 0 表示错误
- data.taskId: 任务 ID
- data.bookId: 书籍 ID
- data.status: started
- data.steps: 实际执行的步骤列表
章节来源
- server/src/modules/book-generator/book-generator.controller.ts:24-119
2. 取消批量生成任务
- 方法与路径:POST /api/book-generator/books/:id/batch-generate/cancel
- 响应
- code: 0 表示成功
- data.taskId: 任务 ID
- data.bookId: 书籍 ID
章节来源
- server/src/modules/book-generator/book-generator.controller.ts:125-156
3. 查询批量生成任务状态
- 方法与路径:GET /api/book-generator/books/:id/batch-generate/status
- 响应
- data.isRunning: 是否有正在运行的任务
- data.taskId: 任务 ID(若在运行)
- data.bookId: 书籍 ID(若在运行)
章节来源
- server/src/modules/book-generator/book-generator.controller.ts:162-197
4. 书籍生成队列任务(内部)
- 方法与路径:队列处理器处理 book:generation 队列
- 数据结构
- bookId: 书籍 ID
- topic: 书籍主题/描述
- bookScale: 书籍规模
- genLevel: 生成层级
- 事件
- progress: 进度回调
- completed: 任务完成
- failed: 任务失败(更新书籍状态为 failed)
章节来源
- server/src/modules/book-generator/book-queue.processor.ts:16-83
5. 数据模型与类型
- 书籍生成阶段(BookGenStage):draft, outlining, outline_completed, content_generating, content_completed, audio_generating, audio_completed, video_generating, video_completed, failed
- 章节生成阶段(ChapterGenStage):idle, outline_completed, content_generating, content_completed, audio_generating, audio_completed, video_generating, video_completed, failed
- 生成步骤(GenerationStep):generate_content, generate_audio, merge_audio, generate_video, merge_video
章节来源
- server/src/modules/book-generator/book-generator.types.ts:8-138