# 顺序执行策略
**本文引用的文件**
- [sequential.strategy.ts](file://server/src/modules/book-generator/strategies/sequential.strategy.ts)
- [base.ts](file://server/src/modules/book-generator/strategies/base.ts)
- [types.ts](file://server/src/modules/book-generator/strategies/types.ts)
- [graph.ts](file://server/src/modules/book-generator/graph.ts)
- [plan.node.ts](file://server/src/modules/book-generator/nodes/plan.node.ts)
- [outline.node.ts](file://server/src/modules/book-generator/nodes/outline.node.ts)
- [sections.node.ts](file://server/src/modules/book-generator/nodes/sections.node.ts)
- [content.node.ts](file://server/src/modules/book-generator/nodes/content.node.ts)
- [fault-tolerance.ts](file://server/src/modules/book-generator/fault-tolerance.ts)
- [utils.ts](file://server/src/modules/book-generator/utils.ts)
- [book-generator.store.ts](file://server/src/modules/book-generator/book-generator.store.ts)
- [stage-manager.ts](file://server/src/modules/book-generator/stage-manager.ts)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
顺序执行策略(SequentialStrategy)是书籍生成流水线中的串行执行方案,严格遵循“规划 → 大纲 → 节 → 小节 → 内容”的线性步骤,确保各环节独立完成后再进入下一环节。该策略强调可预测性、可控性和可审计性,适合对生成质量与一致性要求较高、对吞吐量敏感度较低的场景。
## 项目结构
顺序策略位于书籍生成模块的策略层,配合通用图执行框架、节点实现、容错与进度监控、状态机与持久化等基础设施共同构成完整的执行闭环。
```mermaid
graph TB
subgraph "策略层"
S1["SequentialStrategy
顺序策略"]
ST["策略接口与类型"]
end
subgraph "图执行与状态"
G["GraphState
状态注解"]
B["runGraphWorkflow
通用执行器"]
end
subgraph "节点实现"
N1["planBookNode
规划"]
N2["generateOutlineNode
大纲"]
N3["generateSectionsNode
节"]
N4["generateSubsectionsNode
小节"]
N5["writeChaptersNode
内容"]
end
subgraph "容错与监控"
FT["容错配置与重试"]
PM["进度监控"]
end
subgraph "持久化与状态"
BS["BookStore
存储"]
SM["StageManager
阶段管理"]
end
S1 --> G
S1 --> B
B --> N1 --> N2 --> N3 --> N4 --> N5
FT --> N2
FT --> N3
FT --> N4
FT --> N5
PM --> B
BS --> N2
BS --> N3
BS --> N4
BS --> N5
SM --> N5
```
**图表来源**
- [sequential.strategy.ts:21-58](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L21-L58)
- [base.ts:26-72](file://server/src/modules/book-generator/strategies/base.ts#L26-L72)
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [plan.node.ts:145-200](file://server/src/modules/book-generator/nodes/plan.node.ts#L145-L200)
- [outline.node.ts:14-128](file://server/src/modules/book-generator/nodes/outline.node.ts#L14-L128)
- [sections.node.ts:19-234](file://server/src/modules/book-generator/nodes/sections.node.ts#L19-L234)
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [fault-tolerance.ts:17-51](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L51)
- [book-generator.store.ts:401-428](file://server/src/modules/book-generator/book-generator.store.ts#L401-L428)
- [stage-manager.ts:158-198](file://server/src/modules/book-generator/stage-manager.ts#L158-L198)
**章节来源**
- [sequential.strategy.ts:1-60](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L1-L60)
- [base.ts:1-73](file://server/src/modules/book-generator/strategies/base.ts#L1-L73)
- [graph.ts:1-83](file://server/src/modules/book-generator/graph.ts#L1-L83)
## 核心组件
- 策略接口与类型
- 定义统一的策略接口与策略名称枚举,保证多策略可插拔与一致的调用契约。
- 顺序策略实现
- 通过 LangGraph 定义线性节点链路,初始化状态并交由通用执行器驱动。
- 图状态与执行器
- 以状态注解定义全局状态,统一的图执行器负责编译、流式迭代与收尾。
- 节点实现
- 各阶段节点分别承担规划、大纲、节、小节、内容生成,具备容错包装与进度推进。
- 容错与监控
- AI 调用重试、节点超时、进度监控、自动恢复,保障长流程稳定性。
- 存储与阶段管理
- 通过存储层持久化大纲与章节内容,阶段管理器确保线性状态迁移与资源清理。
**章节来源**
- [types.ts:5-29](file://server/src/modules/book-generator/strategies/types.ts#L5-L29)
- [sequential.strategy.ts:21-58](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L21-L58)
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [base.ts:26-72](file://server/src/modules/book-generator/strategies/base.ts#L26-L72)
- [fault-tolerance.ts:17-51](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L51)
- [book-generator.store.ts:401-428](file://server/src/modules/book-generator/book-generator.store.ts#L401-L428)
- [stage-manager.ts:158-198](file://server/src/modules/book-generator/stage-manager.ts#L158-L198)
## 架构总览
顺序策略采用“策略定义 + 图执行 + 节点实现 + 容错监控 + 存储与阶段”的分层设计,通过 LangGraph 的状态机驱动,确保步骤间依赖清晰、数据可追踪、错误可恢复。
```mermaid
sequenceDiagram
participant U as "调用方"
participant Strat as "SequentialStrategy"
participant Exec as "runGraphWorkflow"
participant Graph as "StateGraph"
participant Node as "各阶段节点"
participant Store as "BookStore"
participant Mon as "进度监控"
U->>Strat : 调用 generate(bookId, topic, scale, level)
Strat->>Graph : 构建线性节点链
Strat->>Exec : 传入初始状态
Exec->>Mon : 启动进度监控
Exec->>Graph : 编译并流式执行
loop 步骤迭代
Graph->>Node : 执行当前节点
Node->>Store : 读写大纲/章节
Node-->>Graph : 返回状态增量
end
Graph-->>Exec : 执行完成
Exec->>Store : 更新最终阶段与进度
Exec-->>U : 返回完成
```
**图表来源**
- [sequential.strategy.ts:25-57](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L25-L57)
- [base.ts:26-72](file://server/src/modules/book-generator/strategies/base.ts#L26-L72)
- [graph.ts:36-43](file://server/src/modules/book-generator/graph.ts#L36-L43)
- [book-generator.store.ts:401-428](file://server/src/modules/book-generator/book-generator.store.ts#L401-L428)
## 详细组件分析
### 顺序策略(SequentialStrategy)
- 设计理念
- 严格的串行步骤:规划 → 大纲 → 节 → 小节 → 内容,避免跨阶段耦合。
- 每个节点独立调用 LLM,便于定位问题与重试。
- 关键行为
- 构建 StateGraph 并设置入口与边,形成单向链路。
- 初始化 GraphState,包含 bookId、topic、bookScale、genLevel、进度与完成标记等。
- 交由 runGraphWorkflow 统一编译与流式执行。
- 适用场景
- 对生成质量与一致性要求高、可接受较长生成时延。
- 需要清晰的阶段边界与可审计路径。
```mermaid
classDiagram
class GenerationStrategy {
+name
+description
+generate(bookId, topic, bookScale, genLevel)
}
class SequentialStrategy {
+name = "sequential"
+description
+generate(...)
}
GenerationStrategy <|.. SequentialStrategy
```
**图表来源**
- [types.ts:8-22](file://server/src/modules/book-generator/strategies/types.ts#L8-L22)
- [sequential.strategy.ts:21-23](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L21-L23)
**章节来源**
- [sequential.strategy.ts:21-58](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L21-L58)
- [types.ts:5-29](file://server/src/modules/book-generator/strategies/types.ts#L5-L29)
### 图状态与执行器(GraphState 与 runGraphWorkflow)
- GraphState
- 定义书籍与章节级别的状态字段,含进度、完成章节、错误、层级等。
- 使用 reducer 确保进度只增不减、失败章节合并等语义。
- runGraphWorkflow
- 统一的图执行入口,负责初始化生成阶段、启动进度监控、编译与流式迭代、收尾更新状态。
- 根据最终状态更新书籍阶段与进度,必要时自动发布。
```mermaid
flowchart TD
Start(["开始"]) --> Init["初始化生成阶段与进度"]
Init --> Compile["编译 StateGraph"]
Compile --> Stream["流式执行节点"]
Stream --> Update["按节点输出更新状态"]
Update --> Done{"执行完成?"}
Done --> |否| Stream
Done --> |是| Final["更新最终阶段与进度"]
Final --> End(["结束"])
```
**图表来源**
- [base.ts:26-72](file://server/src/modules/book-generator/strategies/base.ts#L26-L72)
- [graph.ts:12-21](file://server/src/modules/book-generator/graph.ts#L12-L21)
**章节来源**
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [base.ts:26-72](file://server/src/modules/book-generator/strategies/base.ts#L26-L72)
### 节点实现与数据传递
#### 规划节点(planBookNode)
- 输入:bookId、topic、bookScale、genLevel(可能来自用户选择或解析)。
- 处理:构建提示词,调用 LLM,解析 JSON,决定最终大纲层级。
- 输出:更新书籍分析、genLevel、进度;将规划结果写入状态以便后续节点使用。
```mermaid
sequenceDiagram
participant Strat as "SequentialStrategy"
participant Plan as "planBookNode"
participant LLM as "callLLMWithMessages"
participant Store as "BookStore"
Strat->>Plan : 传入初始状态
Plan->>LLM : 发送规划提示
LLM-->>Plan : 返回规划结果
Plan->>Plan : 解析并校验 genLevel
Plan->>Store : 持久化分析结果
Plan-->>Strat : 返回进度与 genLevel
```
**图表来源**
- [plan.node.ts:145-200](file://server/src/modules/book-generator/nodes/plan.node.ts#L145-L200)
- [book-generator.store.ts:401-428](file://server/src/modules/book-generator/book-generator.store.ts#L401-L428)
**章节来源**
- [plan.node.ts:145-200](file://server/src/modules/book-generator/nodes/plan.node.ts#L145-L200)
#### 大纲节点(generateOutlineNode)
- 输入:topic、bookScale、description、bookPlan(来自规划节点)。
- 处理:容错包装的 LLM 调用,解析大纲,校验章节数范围,补足或截断。
- 输出:持久化大纲与章节记录,更新进度。
```mermaid
flowchart TD
A["开始"] --> B["构建提示词与消息"]
B --> C["executeNodeWithTimeout 包装"]
C --> D["callLLMWithRetry 重试"]
D --> E["parseOutline 解析"]
E --> F{"章节数在范围?"}
F --> |是| G["持久化大纲与章节"]
F --> |否| H["截断或补充章节"]
H --> G
G --> I["更新进度"]
I --> J["结束"]
```
**图表来源**
- [outline.node.ts:14-128](file://server/src/modules/book-generator/nodes/outline.node.ts#L14-L128)
- [fault-tolerance.ts:131-180](file://server/src/modules/book-generator/fault-tolerance.ts#L131-L180)
**章节来源**
- [outline.node.ts:14-128](file://server/src/modules/book-generator/nodes/outline.node.ts#L14-L128)
- [fault-tolerance.ts:17-51](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L51)
#### 节与小节节点(generateSectionsNode / generateSubsectionsNode)
- 输入:上层输出的大纲结构。
- 处理:逐章/逐节生成下一级大纲,写入数据库;genLevel 控制是否跳过。
- 输出:更新大纲 JSON,推进进度。
```mermaid
sequenceDiagram
participant Strat as "SequentialStrategy"
participant Sec as "generateSectionsNode"
participant Sub as "generateSubsectionsNode"
participant Store as "BookStore"
Strat->>Sec : 传入大纲
Sec->>Sec : 逐章生成节大纲
Sec->>Store : 写入节记录
Sec-->>Strat : 返回进度
Strat->>Sub : 传入含节的大纲
Sub->>Sub : 逐节生成小节大纲
Sub->>Store : 写入小节记录
Sub-->>Strat : 返回进度
```
**图表来源**
- [sections.node.ts:19-234](file://server/src/modules/book-generator/nodes/sections.node.ts#L19-L234)
**章节来源**
- [sections.node.ts:19-234](file://server/src/modules/book-generator/nodes/sections.node.ts#L19-L234)
#### 内容节点(writeChaptersNode)
- 输入:所有叶节点(无子节点)。
- 处理:遍历叶节点,按短文或长篇构建消息,调用 LLM 生成内容;额度与字数上限控制;触发音频生成。
- 输出:更新章节内容与字数,推进阶段,汇总失败列表。
```mermaid
flowchart TD
C0["开始"] --> C1["查找所有叶节点"]
C1 --> C2{"存在未完成叶节点?"}
C2 --> |否| C3["推进父节点至 content_completed"]
C2 --> |是| C4["遍历目标节点"]
C4 --> C5["额度与字数检查"]
C5 --> C6["构建消息并生成内容"]
C6 --> C7["更新内容与字数"]
C7 --> C8["推进阶段为 content_completed"]
C8 --> C9["触发音频生成"]
C9 --> C2
C3 --> CEnd["结束"]
```
**图表来源**
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [stage-manager.ts:158-198](file://server/src/modules/book-generator/stage-manager.ts#L158-L198)
**章节来源**
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [stage-manager.ts:158-198](file://server/src/modules/book-generator/stage-manager.ts#L158-L198)
### 容错与进度监控
- AI 调用重试:指数退避、最大重试次数、用户通知。
- 节点超时:按节点设定超时阈值,超时后通知并触发恢复。
- 进度监控:定时检查进度,长时间无进展发出警告与自动恢复尝试。
- 自动恢复:重新入队,支持最大恢复次数限制。
```mermaid
flowchart TD
FT0["开始"] --> FT1["callLLMWithRetry"]
FT1 --> FT2{"调用成功?"}
FT2 --> |是| FT3["返回结果"]
FT2 --> |否| FT4["等待指数退避"]
FT4 --> FT1
FT3 --> FT5["executeNodeWithTimeout"]
FT5 --> FT6{"超时?"}
FT6 --> |否| FT7["正常完成"]
FT6 --> |是| FT8["通知超时并尝试恢复"]
FT7 --> FT9["结束"]
FT8 --> FT9
```
**图表来源**
- [fault-tolerance.ts:68-123](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L123)
- [fault-tolerance.ts:131-180](file://server/src/modules/book-generator/fault-tolerance.ts#L131-L180)
- [fault-tolerance.ts:188-261](file://server/src/modules/book-generator/fault-tolerance.ts#L188-L261)
**章节来源**
- [fault-tolerance.ts:17-51](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L51)
- [fault-tolerance.ts:68-123](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L123)
- [fault-tolerance.ts:131-180](file://server/src/modules/book-generator/fault-tolerance.ts#L131-L180)
- [fault-tolerance.ts:188-261](file://server/src/modules/book-generator/fault-tolerance.ts#L188-L261)
## 依赖关系分析
- 策略层依赖图执行框架与通用执行器,确保一致的控制流。
- 节点层依赖存储层进行持久化,依赖 LLM 服务与容错包装。
- 阶段管理器确保状态迁移合法与资源清理。
- 进度监控贯穿执行全程,保障可观测性。
```mermaid
graph LR
Strat["SequentialStrategy"] --> Exec["runGraphWorkflow"]
Exec --> Graph["StateGraph"]
Graph --> Nodes["各节点"]
Nodes --> Store["BookStore"]
Nodes --> FT["容错层"]
Store --> SM["StageManager"]
Exec --> Mon["进度监控"]
```
**图表来源**
- [sequential.strategy.ts:25-57](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L25-L57)
- [base.ts:26-72](file://server/src/modules/book-generator/strategies/base.ts#L26-L72)
- [book-generator.store.ts:401-428](file://server/src/modules/book-generator/book-generator.store.ts#L401-L428)
- [stage-manager.ts:158-198](file://server/src/modules/book-generator/stage-manager.ts#L158-L198)
- [fault-tolerance.ts:188-261](file://server/src/modules/book-generator/fault-tolerance.ts#L188-L261)
**章节来源**
- [sequential.strategy.ts:21-58](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L21-L58)
- [base.ts:26-72](file://server/src/modules/book-generator/strategies/base.ts#L26-L72)
- [book-generator.store.ts:401-428](file://server/src/modules/book-generator/book-generator.store.ts#L401-L428)
- [stage-manager.ts:158-198](file://server/src/modules/book-generator/stage-manager.ts#L158-L198)
- [fault-tolerance.ts:188-261](file://server/src/modules/book-generator/fault-tolerance.ts#L188-L261)
## 性能考量
- 串行特性
- 优点:步骤清晰、资源占用稳定、易于调试与重试;适合对质量优先的场景。
- 成本:整体吞吐较低,端到端时延较长;对网络与 LLM 调用次数敏感。
- 容错与监控
- 重试与超时减少单点失败影响;进度监控避免长时间卡死。
- 存储与阶段
- 每步持久化,利于断点续跑与审计;但频繁写入带来一定 IO 压力。
[本节为通用性能讨论,不直接分析具体文件]
## 故障排查指南
- 常见问题定位
- 大纲生成失败:检查提示词构建、LLM 返回解析与章节数量校验逻辑。
- 内容生成失败:检查额度与字数上限、工具调用降级、音频生成触发。
- 节点超时:查看容错层超时配置与通知日志。
- 调试步骤
- 启用进度监控,观察长时间无响应告警。
- 检查存储层更新与阶段推进,确认最终状态。
- 回看容错层重试与失败日志,定位失败节点。
- 恢复策略
- 自动恢复:满足条件时重新入队,避免人工干预。
- 人工干预:根据失败节点与错误信息,针对性重试或调整参数。
**章节来源**
- [outline.node.ts:115-127](file://server/src/modules/book-generator/nodes/outline.node.ts#L115-L127)
- [content.node.ts:308-316](file://server/src/modules/book-generator/nodes/content.node.ts#L308-L316)
- [fault-tolerance.ts:131-180](file://server/src/modules/book-generator/fault-tolerance.ts#L131-L180)
- [fault-tolerance.ts:268-323](file://server/src/modules/book-generator/fault-tolerance.ts#L268-L323)
- [base.ts:62-71](file://server/src/modules/book-generator/strategies/base.ts#L62-L71)
## 结论
顺序执行策略通过严格的线性步骤与完善的容错监控,提供了高可预测性的生成体验。其优势在于清晰的阶段边界与稳定的资源占用,适合对质量与一致性要求高的场景。若需提升吞吐,可结合并行策略或其他优化手段,但需权衡复杂度与风险。
[本节为总结性内容,不直接分析具体文件]
## 附录
### 配置参数说明
- 容错配置(节选)
- AI 调用重试:最大重试次数、初始/最大延迟、指数退避倍数。
- 节点超时:各节点超时阈值(分钟级)。
- 进度监控:最大空闲时间、检查间隔。
- 自动恢复:最大恢复尝试次数、恢复延迟。
- 进度常量
- 大纲、节、小节、内容阶段的进度区间与起止值。
**章节来源**
- [fault-tolerance.ts:17-51](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L51)
- [utils.ts:15-23](file://server/src/modules/book-generator/utils.ts#L15-L23)
### 实际应用场景与使用示例
- 场景
- 教程/教材类书籍:需要稳定的三层大纲与高质量内容。
- 小说/文学类:短文场景可直接生成章节内容。
- 示例
- 调用顺序策略的 generate 方法,传入书籍主题、规模与层级,等待流式执行完成并查看最终阶段与进度。
**章节来源**
- [sequential.strategy.ts:25-57](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L25-L57)
- [base.ts:26-72](file://server/src/modules/book-generator/strategies/base.ts#L26-L72)