# 阶段管理器
**本文引用的文件**
- [stage-manager.ts](file://server/src/modules/book-generator/stage-manager.ts)
- [book-generator.types.ts](file://server/src/modules/book-generator/book-generator.types.ts)
- [book-generator.service.ts](file://server/src/modules/book-generator/book-generator.service.ts)
- [book-generator.store.ts](file://server/src/modules/book-generator/book-generator.store.ts)
- [book-generator.controller.ts](file://server/src/modules/book-generator/book-generator.controller.ts)
- [graph.ts](file://server/src/modules/book-generator/graph.ts)
- [sequential.strategy.ts](file://server/src/modules/book-generator/strategies/sequential.strategy.ts)
- [one-step-outline.strategy.ts](file://server/src/modules/book-generator/strategies/one-step-outline.strategy.ts)
- [per-chapter.strategy.ts](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts)
- [status-system-redesign.md](file://status-system-redesign.md)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件面向“阶段管理器”的技术文档,聚焦于书籍生成流水线中的阶段划分、阶段间依赖关系、状态跟踪与推进机制。文档从代码层面梳理阶段管理器如何协调内容生成、音频生成、音频合并、视频生成与视频合并等任务,如何通过安全状态转移与乐观锁保证并发一致性,以及如何基于书籍/章节两级状态实现联动推进与回退。同时提供新增阶段、配置参数、监控进度与故障恢复的最佳实践与示例路径。
## 项目结构
围绕阶段管理器的关键文件组织如下:
- 阶段定义与安全转移:stage-manager.ts
- 类型与数据模型:book-generator.types.ts
- 编排与执行:book-generator.service.ts
- 存储与状态计算:book-generator.store.ts
- 控制器与接口:book-generator.controller.ts
- LangGraph 状态与工作流:graph.ts
- 生成策略(工作流形态):sequential/one-step-outline/per-chapter 策略
- 状态系统设计与迁移规则:status-system-redesign.md
```mermaid
graph TB
subgraph "阶段管理与编排"
SM["stage-manager.ts
安全转移/阶段索引/清理规则"]
GS["book-generator.service.ts
批量编排/步骤执行/进度推送"]
BS["book-generator.store.ts
书籍/章节状态计算/回调推进"]
CTRL["book-generator.controller.ts
REST API/任务生命周期"]
end
subgraph "LangGraph 工作流"
G["graph.ts
GraphState/进度reducer"]
STR1["sequential.strategy.ts"]
STR2["one-step-outline.strategy.ts"]
STR3["per-chapter.strategy.ts"]
end
subgraph "类型与状态"
TYPES["book-generator.types.ts
BookGenStage/ChapterGenStage"]
SYS["status-system-redesign.md
阶段索引/转移规则/映射"]
end
CTRL --> GS
GS --> SM
GS --> BS
BS --> SM
GS --> G
G --> STR1
G --> STR2
G --> STR3
SM --> TYPES
BS --> TYPES
SYS --> SM
SYS --> BS
```
图表来源
- [stage-manager.ts:1-202](file://server/src/modules/book-generator/stage-manager.ts#L1-L202)
- [book-generator.service.ts:1-549](file://server/src/modules/book-generator/book-generator.service.ts#L1-L549)
- [book-generator.store.ts:1-1073](file://server/src/modules/book-generator/book-generator.store.ts#L1-L1073)
- [book-generator.controller.ts:1-199](file://server/src/modules/book-generator/book-generator.controller.ts#L1-L199)
- [graph.ts:1-83](file://server/src/modules/book-generator/graph.ts#L1-L83)
- [sequential.strategy.ts:1-60](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L1-L60)
- [one-step-outline.strategy.ts:1-56](file://server/src/modules/book-generator/strategies/one-step-outline.strategy.ts#L1-L56)
- [per-chapter.strategy.ts:1-56](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L1-L56)
- [book-generator.types.ts:1-226](file://server/src/modules/book-generator/book-generator.types.ts#L1-L226)
- [status-system-redesign.md:48-195](file://status-system-redesign.md#L48-L195)
章节来源
- [stage-manager.ts:1-202](file://server/src/modules/book-generator/stage-manager.ts#L1-L202)
- [book-generator.types.ts:1-226](file://server/src/modules/book-generator/book-generator.types.ts#L1-L226)
- [book-generator.service.ts:1-549](file://server/src/modules/book-generator/book-generator.service.ts#L1-L549)
- [book-generator.store.ts:1-1073](file://server/src/modules/book-generator/book-generator.store.ts#L1-L1073)
- [book-generator.controller.ts:1-199](file://server/src/modules/book-generator/book-generator.controller.ts#L1-L199)
- [graph.ts:1-83](file://server/src/modules/book-generator/graph.ts#L1-L83)
- [sequential.strategy.ts:1-60](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L1-L60)
- [one-step-outline.strategy.ts:1-56](file://server/src/modules/book-generator/strategies/one-step-outline.strategy.ts#L1-L56)
- [per-chapter.strategy.ts:1-56](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L1-L56)
- [status-system-redesign.md:48-195](file://status-system-redesign.md#L48-L195)
## 核心组件
- 阶段类型与索引
- 书籍阶段:draft → outlining → outline_completed → content_generating → content_completed → audio_generating → audio_completed → video_generating → video_completed → failed
- 章节阶段:idle → outline_completed → content_generating → content_completed → audio_generating → audio_completed → video_generating → video_completed → failed
- 阶段索引用于比较大小,确保只能正向推进,避免跳跃
- 安全状态转移
- 基于转移矩阵验证目标状态合法性
- 使用乐观锁(where 条件匹配当前 genStage)写入目标状态
- 回退时根据目标阶段决定清理下游资源(音频/视频 URL 与时长)
- 书籍/章节状态联动
- 书籍 genStage 由“所有子章节最低阶段”映射而来,体现“短板效应”
- 章节支持前进与回退,回退时自动清理下游资源,失败重试可回到对应上游阶段
- 编排与执行
- 批量编排器按步骤顺序执行:内容生成 → 音频生成 → 音频合并 → 视频生成 → 视频合并
- 每步执行包含进度推送、取消检查、超时轮询与失败处理
- 存储与回调
- 生成回调中先更新 URL/时长,再推进到完成态,确保数据一致性
- 自动重试与失败回退,提升鲁棒性
章节来源
- [stage-manager.ts:12-53](file://server/src/modules/book-generator/stage-manager.ts#L12-L53)
- [book-generator.types.ts:8-30](file://server/src/modules/book-generator/book-generator.types.ts#L8-L30)
- [book-generator.store.ts:19-60](file://server/src/modules/book-generator/book-generator.store.ts#L19-L60)
- [book-generator.service.ts:15-143](file://server/src/modules/book-generator/book-generator.service.ts#L15-L143)
- [book-generator.store.ts:800-897](file://server/src/modules/book-generator/book-generator.store.ts#L800-L897)
## 架构总览
阶段管理器贯穿“控制器 → 编排器 → 存储/服务 → 数据库”的链路,并通过 LangGraph 工作流驱动内容生成。整体交互如下:
```mermaid
sequenceDiagram
participant C as "客户端"
participant Ctrl as "控制器(book-generator.controller)"
participant Orchestrator as "编排器(BatchGenerationOrchestrator)"
participant StageMgr as "阶段管理器(stage-manager)"
participant Store as "存储(BookStore)"
participant DB as "数据库(Prisma)"
C->>Ctrl : POST /books/ : id/batch-generate
Ctrl->>Orchestrator : 创建并启动任务
Orchestrator->>Store : 获取书籍/章节树
Orchestrator->>StageMgr : advanceChapter()/regenerateChapter()
StageMgr->>DB : 乐观锁更新(genStage)
DB-->>StageMgr : 更新结果
StageMgr-->>Orchestrator : 状态变更
Orchestrator->>Store : 回调推进/更新URL/时长
Store->>DB : 更新章节字段
DB-->>Store : 成功
Store-->>Orchestrator : 状态同步
Orchestrator-->>Ctrl : 推送进度/完成
Ctrl-->>C : 返回任务状态
```
图表来源
- [book-generator.controller.ts:24-119](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L119)
- [book-generator.service.ts:45-143](file://server/src/modules/book-generator/book-generator.service.ts#L45-L143)
- [stage-manager.ts:100-147](file://server/src/modules/book-generator/stage-manager.ts#L100-L147)
- [book-generator.store.ts:800-897](file://server/src/modules/book-generator/book-generator.store.ts#L800-L897)
## 详细组件分析
### 阶段管理器(stage-manager.ts)
- 目标
- 提供线性阶段模型与安全转移能力
- 通过索引比较与转移矩阵控制前进/回退
- 通过清理规则在回退时清除下游资源
- 关键点
- 章节阶段索引数组与索引函数
- 转移矩阵定义允许的前进/回退/失败路径
- 安全转移函数:校验 → 计算清理 → 乐观锁写入 → 冲突处理
- 前进/重新生成封装:限制前进方向、回退走重新生成
```mermaid
flowchart TD
Start(["进入 safeTransitionChapter"]) --> CheckAllowed["检查转移矩阵"]
CheckAllowed --> Allowed{"允许转移?"}
Allowed -- 否 --> ThrowErr["抛出非法转移错误"]
Allowed -- 是 --> CalcClean["计算回退清理规则"]
CalcClean --> Optimistic["乐观锁更新 genStage + 清理字段"]
Optimistic --> Count{"更新影响行数 > 0?"}
Count -- 否 --> Conflict["查询实际状态/告警/跳过"]
Count -- 是 --> Done(["完成"])
```
图表来源
- [stage-manager.ts:100-147](file://server/src/modules/book-generator/stage-manager.ts#L100-L147)
- [stage-manager.ts:75-92](file://server/src/modules/book-generator/stage-manager.ts#L75-L92)
章节来源
- [stage-manager.ts:39-92](file://server/src/modules/book-generator/stage-manager.ts#L39-L92)
- [stage-manager.ts:100-198](file://server/src/modules/book-generator/stage-manager.ts#L100-L198)
### 书籍/章节类型与状态映射(book-generator.types.ts, status-system-redesign.md)
- 类型定义
- 书籍阶段与章节阶段枚举
- 书籍/章节数据结构、任务结构、请求/响应结构
- 状态映射与规则
- 阶段索引顺序与比较
- 书籍阶段由“最低章节阶段”映射而来
- 章节支持前进、回退、重新生成、失败重试与资源清理
```mermaid
flowchart TD
LeafStages["所有子章节 genStage"] --> MinIdx["取最小索引"]
MinIdx --> MapBook["映射到书籍阶段"]
MapBook --> BookStage["Book.genStage"]
```
图表来源
- [book-generator.types.ts:8-30](file://server/src/modules/book-generator/book-generator.types.ts#L8-L30)
- [book-generator.store.ts:19-60](file://server/src/modules/book-generator/book-generator.store.ts#L19-L60)
- [status-system-redesign.md:48-67](file://status-system-redesign.md#L48-L67)
章节来源
- [book-generator.types.ts:8-30](file://server/src/modules/book-generator/book-generator.types.ts#L8-L30)
- [book-generator.store.ts:19-60](file://server/src/modules/book-generator/book-generator.store.ts#L19-L60)
- [status-system-redesign.md:48-195](file://status-system-redesign.md#L48-L195)
### 编排器与执行流程(book-generator.service.ts)
- 目标
- 按步骤顺序执行生成流水线,推送进度,支持取消
- 关键点
- 步骤:generate_content → generate_audio → merge_audio → generate_video → merge_video
- 每步包含轮询检查、进度计算、取消检查、超时处理
- 与阶段管理器协作:推进/回退章节状态,更新 URL/时长
```mermaid
sequenceDiagram
participant O as "编排器"
participant S as "阶段管理器"
participant A as "音频服务"
participant V as "视频服务"
O->>O : 执行 generate_content
O->>O : 执行 generate_audio
O->>S : advanceChapter(voice_generating)
O->>A : 异步生成音频(回调更新URL/时长)
A-->>O : 回调推进到 voice_completed
O->>S : advanceChapter(video_generating)
O->>V : 异步生成视频(成功/失败)
V-->>O : 成功/失败
O->>S : 成功→advanceChapter(video_completed) / 失败→regenerateChapter(failed)
O->>O : 执行 merge_audio / merge_video
```
图表来源
- [book-generator.service.ts:77-536](file://server/src/modules/book-generator/book-generator.service.ts#L77-L536)
- [stage-manager.ts:158-198](file://server/src/modules/book-generator/stage-manager.ts#L158-L198)
- [book-generator.store.ts:800-897](file://server/src/modules/book-generator/book-generator.store.ts#L800-L897)
章节来源
- [book-generator.service.ts:45-536](file://server/src/modules/book-generator/book-generator.service.ts#L45-L536)
### 存储与回调推进(book-generator.store.ts)
- 目标
- 提供书籍/章节 CRUD、树形结构构建、状态计算与回调推进
- 关键点
- 回调中先更新音频/视频 URL 与时长,再推进到完成态
- 失败时回退到上游阶段并自动重试(带指数退避)
- 生成单章内容时,根据上下文构建提示词并推进状态
```mermaid
sequenceDiagram
participant Gen as "音频生成"
participant Store as "BookStore"
participant DB as "数据库"
participant SM as "阶段管理器"
Gen->>Store : generateChapterAudioById(chapterId)
Store->>SM : advanceChapter(audio_generating)
Gen->>DB : 更新 audioUrl/audioDuration
DB-->>Gen : 成功
Gen->>SM : advanceChapter(audio_completed)
SM-->>Gen : 完成
```
图表来源
- [book-generator.store.ts:800-897](file://server/src/modules/book-generator/book-generator.store.ts#L800-L897)
- [stage-manager.ts:158-198](file://server/src/modules/book-generator/stage-manager.ts#L158-L198)
章节来源
- [book-generator.store.ts:800-1010](file://server/src/modules/book-generator/book-generator.store.ts#L800-L1010)
### 控制器与任务生命周期(book-generator.controller.ts)
- 目标
- 提供批量生成、取消、状态查询的 REST API
- 关键点
- 任务去重与运行中状态管理
- 后台异步执行,完成后推送完成事件
章节来源
- [book-generator.controller.ts:24-199](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L199)
### LangGraph 工作流与策略(graph.ts, strategies/*.ts)
- 目标
- 通过 GraphState 管理进度、完成章节、失败章节等状态
- 通过不同策略驱动内容生成:串行、一步大纲+并行内容、逐章内聚
- 关键点
- 进度 reducer 只增不减,章节完成数累加
- 策略选择影响内容生成的并发与调用次数
章节来源
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [sequential.strategy.ts:21-59](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L21-L59)
- [one-step-outline.strategy.ts:21-55](file://server/src/modules/book-generator/strategies/one-step-outline.strategy.ts#L21-L55)
- [per-chapter.strategy.ts:21-55](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L21-L55)
## 依赖分析
- 组件耦合
- 编排器依赖阶段管理器与存储
- 存储依赖阶段管理器与数据库
- 控制器依赖编排器与 WebSocket 推送
- 策略与工作流解耦,通过 GraphState 与 reducer 协同
- 外部依赖
- Prisma ORM
- LangGraph 状态图
- WebSocket 推送(进度/完成)
```mermaid
graph LR
Controller["book-generator.controller.ts"] --> Service["book-generator.service.ts"]
Service --> StageMgr["stage-manager.ts"]
Service --> Store["book-generator.store.ts"]
Store --> StageMgr
Service --> Graph["graph.ts"]
Graph --> Strategies["strategies/*.ts"]
StageMgr --> Types["book-generator.types.ts"]
Store --> Types
```
图表来源
- [book-generator.controller.ts:1-199](file://server/src/modules/book-generator/book-generator.controller.ts#L1-L199)
- [book-generator.service.ts:1-549](file://server/src/modules/book-generator/book-generator.service.ts#L1-L549)
- [stage-manager.ts:1-202](file://server/src/modules/book-generator/stage-manager.ts#L1-L202)
- [book-generator.store.ts:1-1073](file://server/src/modules/book-generator/book-generator.store.ts#L1-L1073)
- [graph.ts:1-83](file://server/src/modules/book-generator/graph.ts#L1-L83)
- [sequential.strategy.ts:1-60](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L1-L60)
- [one-step-outline.strategy.ts:1-56](file://server/src/modules/book-generator/strategies/one-step-outline.strategy.ts#L1-L56)
- [per-chapter.strategy.ts:1-56](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L1-L56)
- [book-generator.types.ts:1-226](file://server/src/modules/book-generator/book-generator.types.ts#L1-L226)
## 性能考虑
- 并发与批处理
- 音频/视频生成采用异步并行,减少端到端时间
- 合并阶段按父节点分组,降低 I/O 压力
- 轮询与超时
- 每步设置合理超时与检查间隔,避免长时间占用
- 进度与日志
- 逐步推进进度并输出关键节点日志,便于定位瓶颈
- 调用次数优化
- 策略选择影响 LLM 调用次数,可根据规模权衡
## 故障排查指南
- 常见问题
- 状态冲突:乐观锁更新影响行数为 0,需检查并发与状态竞争
- 回退清理:回退到上游阶段应自动清理下游资源(音频/视频 URL 与时长)
- 失败重试:音频失败自动回退到内容完成并重试,必要时手动触发重新生成
- 取消任务:通过取消标志中断执行,清理运行中任务
- 定位方法
- 查看控制器运行中任务映射,确认是否存在重复任务
- 检查编排器每步进度与错误日志
- 核对阶段管理器的安全转移日志与数据库最终状态
章节来源
- [stage-manager.ts:123-146](file://server/src/modules/book-generator/stage-manager.ts#L123-L146)
- [book-generator.store.ts:872-896](file://server/src/modules/book-generator/book-generator.store.ts#L872-L896)
- [book-generator.controller.ts:64-98](file://server/src/modules/book-generator/book-generator.controller.ts#L64-L98)
## 结论
阶段管理器通过线性阶段模型、安全转移与乐观锁、书籍/章节联动推进与回退机制,有效保障了复杂生成流水线的正确性与可观测性。结合 LangGraph 工作流与多种生成策略,系统在可扩展性与性能之间取得平衡。建议在新增阶段或调整策略时,严格遵循转移矩阵与清理规则,确保状态一致性与数据完整性。
## 附录
### 如何添加新的生成阶段
- 定义阶段类型
- 在类型定义文件中增加新阶段枚举值
- 示例路径:[book-generator.types.ts:8-30](file://server/src/modules/book-generator/book-generator.types.ts#L8-L30)
- 阶段索引与映射
- 在阶段管理器中维护阶段索引数组与索引函数
- 示例路径:[stage-manager.ts:39-53](file://server/src/modules/book-generator/stage-manager.ts#L39-L53)
- 转移矩阵与清理规则
- 在转移矩阵中声明允许的前进/回退路径
- 在清理规则中定义回退时的资源清理逻辑
- 示例路径:[stage-manager.ts:57-92](file://server/src/modules/book-generator/stage-manager.ts#L57-L92)
- 安全转移与推进
- 使用安全转移函数进行状态变更
- 示例路径:[stage-manager.ts:100-147](file://server/src/modules/book-generator/stage-manager.ts#L100-L147)
- 书籍阶段映射
- 更新书籍阶段映射逻辑,确保“最低章节阶段”正确映射
- 示例路径:[book-generator.store.ts:19-60](file://server/src/modules/book-generator/book-generator.store.ts#L19-L60)
### 如何配置阶段参数
- 生成配置
- 模型、温度、最大 token、章节字数范围、重试策略等
- 示例路径:[book-generator.types.ts:187-199](file://server/src/modules/book-generator/book-generator.types.ts#L187-L199)
- 策略选择
- 根据规模与并发需求选择策略:串行/一步大纲+并行/逐章内聚
- 示例路径:[sequential.strategy.ts:21-59](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L21-L59), [one-step-outline.strategy.ts:21-55](file://server/src/modules/book-generator/strategies/one-step-outline.strategy.ts#L21-L55), [per-chapter.strategy.ts:21-55](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L21-L55)
### 如何监控阶段执行进度
- 控制器接口
- 批量生成、取消、状态查询接口
- 示例路径:[book-generator.controller.ts:24-199](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L199)
- 编排器进度
- 每步执行推送进度,包含步骤名称、百分比与消息
- 示例路径:[book-generator.service.ts:59-117](file://server/src/modules/book-generator/book-generator.service.ts#L59-L117)
### 阶段优化策略与最佳实践
- 优化策略
- 选择合适的生成策略以降低 LLM 调用次数
- 合理设置轮询间隔与超时,平衡实时性与资源消耗
- 在失败时自动回退并重试,避免人工干预
- 最佳实践
- 严格遵守阶段索引与转移矩阵,禁止跳跃与逆向推进
- 回退时务必清理下游资源,防止脏数据
- 使用回调推进完成态,确保数据一致性
- 通过 WebSocket 推送进度,提升用户体验