本文引用的文件
本文件面向“阶段管理器”的技术文档,聚焦于书籍生成流水线中的阶段划分、阶段间依赖关系、状态跟踪与推进机制。文档从代码层面梳理阶段管理器如何协调内容生成、音频生成、音频合并、视频生成与视频合并等任务,如何通过安全状态转移与乐观锁保证并发一致性,以及如何基于书籍/章节两级状态实现联动推进与回退。同时提供新增阶段、配置参数、监控进度与故障恢复的最佳实践与示例路径。
围绕阶段管理器的关键文件组织如下:
状态系统设计与迁移规则:status-system-redesign.md
graph TB
subgraph "阶段管理与编排"
SM["stage-manager.ts<br/>安全转移/阶段索引/清理规则"]
GS["book-generator.service.ts<br/>批量编排/步骤执行/进度推送"]
BS["book-generator.store.ts<br/>书籍/章节状态计算/回调推进"]
CTRL["book-generator.controller.ts<br/>REST API/任务生命周期"]
end
subgraph "LangGraph 工作流"
G["graph.ts<br/>GraphState/进度reducer"]
STR1["sequential.strategy.ts"]
STR2["one-step-outline.strategy.ts"]
STR3["per-chapter.strategy.ts"]
end
subgraph "类型与状态"
TYPES["book-generator.types.ts<br/>BookGenStage/ChapterGenStage"]
SYS["status-system-redesign.md<br/>阶段索引/转移规则/映射"]
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
图表来源
章节来源
章节来源
阶段管理器贯穿“控制器 → 编排器 → 存储/服务 → 数据库”的链路,并通过 LangGraph 工作流驱动内容生成。整体交互如下:
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 : 返回任务状态
图表来源
关键点
前进/重新生成封装:限制前进方向、回退走重新生成
flowchart TD
Start(["进入 safeTransitionChapter"]) --> CheckAllowed["检查转移矩阵"]
CheckAllowed --> Allowed{"允许转移?"}
Allowed -- 否 --> ThrowErr["抛出非法转移错误"]
Allowed -- 是 --> CalcClean["计算回退清理规则"]
CalcClean --> Optimistic["乐观锁更新 genStage + 清理字段"]
Optimistic --> Count{"更新影响行数 > 0?"}
Count -- 否 --> Conflict["查询实际状态/告警/跳过"]
Count -- 是 --> Done(["完成"])
图表来源
章节来源
状态映射与规则
章节支持前进、回退、重新生成、失败重试与资源清理
flowchart TD
LeafStages["所有子章节 genStage"] --> MinIdx["取最小索引"]
MinIdx --> MapBook["映射到书籍阶段"]
MapBook --> BookStage["Book.genStage"]
图表来源
章节来源
关键点
与阶段管理器协作:推进/回退章节状态,更新 URL/时长
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
图表来源
章节来源
关键点
生成单章内容时,根据上下文构建提示词并推进状态
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 : 完成
图表来源
章节来源
章节来源
章节来源
外部依赖
WebSocket 推送(进度/完成)
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
图表来源
章节来源
阶段管理器通过线性阶段模型、安全转移与乐观锁、书籍/章节联动推进与回退机制,有效保障了复杂生成流水线的正确性与可观测性。结合 LangGraph 工作流与多种生成策略,系统在可扩展性与性能之间取得平衡。建议在新增阶段或调整策略时,严格遵循转移矩阵与清理规则,确保状态一致性与数据完整性。