# 策略管理器
**本文引用的文件**
- [base.ts](file://server/src/modules/book-generator/strategies/base.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)
- [sequential.strategy.ts](file://server/src/modules/book-generator/strategies/sequential.strategy.ts)
- [selector.ts](file://server/src/modules/book-generator/strategies/selector.ts)
- [types.ts](file://server/src/modules/book-generator/strategies/types.ts)
- [plan.node.ts](file://server/src/modules/book-generator/nodes/plan.node.ts)
- [full-outline.node.ts](file://server/src/modules/book-generator/nodes/full-outline.node.ts)
- [outline.node.ts](file://server/src/modules/book-generator/nodes/outline.node.ts)
- [content.node.ts](file://server/src/modules/book-generator/nodes/content.node.ts)
- [per-chapter.node.ts](file://server/src/modules/book-generator/nodes/per-chapter.node.ts)
- [deep-plan-parallel.strategy.ts](file://server/src/modules/book-generator/strategies/deep-plan-parallel.strategy.ts)
- [fault-tolerance.ts](file://server/src/modules/book-generator/fault-tolerance.ts)
- [strategy-compare.ts](file://server/src/modules/book-generator/test/strategy-compare.ts)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件系统性阐述“策略管理器”在书籍生成中的应用,围绕策略模式设计与实现,详解base策略基类的共享执行框架、三大具体策略(顺序策略、一步大纲策略、逐章策略)的差异与适用场景,以及策略选择器的工作原理、切换机制与性能优化。同时,文档覆盖策略配置参数、执行条件判断、错误恢复策略,并提供可操作的实践路径,帮助开发者实现自定义策略、配置策略优先级、监控执行效果。
## 项目结构
策略管理器位于书籍生成模块的策略目录中,配合节点层(nodes)与容错层(fault-tolerance)共同构成完整的生成流水线。策略层通过统一接口与共享执行框架,屏蔽不同工作流的差异;节点层负责各阶段的具体AI调用与数据持久化;容错层提供重试、超时、进度监控与自动恢复能力。
```mermaid
graph TB
subgraph "策略层"
SBase["base.ts
共享执行框架"]
SSeq["sequential.strategy.ts
顺序策略"]
SOne["one-step-outline.strategy.ts
一步大纲策略"]
SPer["per-chapter.strategy.ts
逐章策略"]
SDeep["deep-plan-parallel.strategy.ts
推荐策略"]
SSelector["selector.ts
策略选择器"]
STypes["types.ts
接口与类型"]
end
subgraph "节点层"
NPlan["plan.node.ts
规划节点"]
NFull["full-outline.node.ts
一步大纲节点"]
NOutline["outline.node.ts
大纲节点"]
NContent["content.node.ts
内容节点"]
NPerChapter["per-chapter.node.ts
逐章节点"]
end
subgraph "容错层"
FT["fault-tolerance.ts
重试/超时/监控/恢复"]
end
SSelector --> SBase
SSeq --> SBase
SOne --> SBase
SPer --> SBase
SDeep --> SBase
SBase --> NPlan
SBase --> NOutline
SBase --> NFull
SBase --> NContent
SBase --> NPerChapter
NOutline --> FT
NFull --> FT
NPlan --> FT
NContent --> FT
NPerChapter --> FT
```
图表来源
- [base.ts:1-73](file://server/src/modules/book-generator/strategies/base.ts#L1-L73)
- [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)
- [deep-plan-parallel.strategy.ts:1-74](file://server/src/modules/book-generator/strategies/deep-plan-parallel.strategy.ts#L1-L74)
- [selector.ts:1-81](file://server/src/modules/book-generator/strategies/selector.ts#L1-L81)
- [types.ts:1-29](file://server/src/modules/book-generator/strategies/types.ts#L1-L29)
- [plan.node.ts:1-201](file://server/src/modules/book-generator/nodes/plan.node.ts#L1-L201)
- [full-outline.node.ts:1-243](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L1-L243)
- [outline.node.ts:1-129](file://server/src/modules/book-generator/nodes/outline.node.ts#L1-L129)
- [content.node.ts:1-546](file://server/src/modules/book-generator/nodes/content.node.ts#L1-L546)
- [per-chapter.node.ts:1-324](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L1-L324)
- [fault-tolerance.ts:1-388](file://server/src/modules/book-generator/fault-tolerance.ts#L1-L388)
章节来源
- [base.ts:1-73](file://server/src/modules/book-generator/strategies/base.ts#L1-L73)
- [selector.ts:1-81](file://server/src/modules/book-generator/strategies/selector.ts#L1-L81)
- [types.ts:1-29](file://server/src/modules/book-generator/strategies/types.ts#L1-L29)
## 核心组件
- 策略接口与类型:定义策略名称、描述与generate方法签名,确保所有策略具备一致的对外行为契约。
- 基类执行框架:封装runGraphWorkflow,统一处理StateGraph构建、编译、流式执行、进度更新、最终态处理与失败回滚。
- 三大策略实现:
- 顺序策略:串行执行规划→大纲→节→小节→内容,适合稳定可控的生成流程。
- 一步大纲策略:一次性生成完整树形大纲,随后并行写内容,适合快速产出与高吞吐。
- 逐章策略:先生成章大纲,再对每章独立生成内部结构与内容,适合强质量与可扩展性。
- 策略选择器:集中注册与切换策略,支持运行时切换与默认策略配置。
- 容错层:为节点级AI调用提供重试、超时、进度监控与自动恢复,保障生成稳定性。
章节来源
- [types.ts:8-22](file://server/src/modules/book-generator/strategies/types.ts#L8-L22)
- [base.ts:26-72](file://server/src/modules/book-generator/strategies/base.ts#L26-L72)
- [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)
- [selector.ts:14-77](file://server/src/modules/book-generator/strategies/selector.ts#L14-L77)
- [fault-tolerance.ts:16-50](file://server/src/modules/book-generator/fault-tolerance.ts#L16-L50)
## 架构总览
策略管理器采用“策略接口 + 基类执行框架 + 具体策略实现 + 选择器”的分层设计。所有策略共享同一套图执行与状态管理逻辑,仅在节点组合与初始状态上有所差异。节点层负责与LLM交互、解析与持久化,容错层贯穿所有节点,提供稳健的执行保障。
```mermaid
sequenceDiagram
participant Client as "调用方"
participant Selector as "策略选择器"
participant Strategy as "具体策略"
participant Base as "基类执行框架"
participant Nodes as "节点层"
participant FT as "容错层"
Client->>Selector : 获取当前策略
Selector-->>Client : 返回策略实例
Client->>Strategy : 调用 generate(...)
Strategy->>Base : 构建 StateGraph + 初始状态
Base->>Nodes : 编译并流式执行节点
Nodes->>FT : 包装AI调用重试/超时
FT-->>Nodes : 返回结果或错误
Nodes-->>Base : 更新状态与进度
Base-->>Client : 完成/失败状态与进度
```
图表来源
- [selector.ts:61-77](file://server/src/modules/book-generator/strategies/selector.ts#L61-L77)
- [base.ts:26-72](file://server/src/modules/book-generator/strategies/base.ts#L26-L72)
- [fault-tolerance.ts:67-122](file://server/src/modules/book-generator/fault-tolerance.ts#L67-L122)
## 详细组件分析
### 基类执行框架(base.ts)
- 设计理念
- 统一图执行:所有策略共享runGraphWorkflow,避免重复编译与流式执行逻辑。
- 进度与最终态:启动进度监控,流式消费节点输出,最终根据书籍状态更新进度与阶段。
- 错误处理:捕获异常,标记失败阶段与错误信息,保证状态一致性。
- 关键流程
- 初始化:设置生成阶段与进度为0,启动进度监控。
- 执行:编译StateGraph,开启流式迭代,记录非进度步名称。
- 收尾:查询最终书籍状态,更新进度至100,必要时自动发布专辑;若失败则标记失败阶段与错误。
- 性能与可靠性
- 通过流式执行降低内存峰值,及时反馈中间状态。
- 与容错层结合,提升整体稳定性。
章节来源
- [base.ts:26-72](file://server/src/modules/book-generator/strategies/base.ts#L26-L72)
### 顺序策略(sequential.strategy.ts)
- 工作流
- plan_book → generate_outline → generate_sections → generate_subsections → write_chapters
- 特点
- 严格串行,每个环节独立调用AI,便于调试与可控性。
- 适合对生成质量与可控性要求较高、对速度敏感度较低的场景。
- 适用场景
- 教程类、技术类书籍,强调结构与内容的逐层细化。
- 与节点的协作
- 依赖outline.node.ts与content.node.ts的解析与持久化逻辑。
章节来源
- [sequential.strategy.ts:12-59](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L12-L59)
- [outline.node.ts:14-129](file://server/src/modules/book-generator/nodes/outline.node.ts#L14-L129)
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
### 一步大纲策略(one-step-outline.strategy.ts)
- 工作流
- plan_book → generate_full_outline → write_chapters_parallel
- 特点
- 一次性生成完整树形大纲,随后并行写内容,显著减少AI调用次数。
- 适合追求吞吐与速度的场景,尤其在内容体量较大时优势明显。
- 与节点的协作
- 依赖full-outline.node.ts生成并持久化完整大纲,content.node.ts中的并行节点负责并发写入。
- 性能优化
- 并行内容生成,结合AsyncPool控制并发度,提高吞吐。
章节来源
- [one-step-outline.strategy.ts:13-55](file://server/src/modules/book-generator/strategies/one-step-outline.strategy.ts#L13-L55)
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)
- [content.node.ts:444-545](file://server/src/modules/book-generator/nodes/content.node.ts#L444-L545)
### 逐章策略(per-chapter.strategy.ts)
- 工作流
- plan_book → generate_outline → per_chapter(每章独立生成内部结构+内容)
- 特点
- 先生成章大纲,再对每章独立生成内部结构与内容,章节间可并行。
- 适合对章节质量与独立性要求较高的场景。
- 与节点的协作
- 依赖outline.node.ts生成章大纲,per-chapter.node.ts负责逐章生成与内部结构创建。
- 并发与一致性
- 逐章串行处理以避免写入竞争,同时在策略层面体现“章节级并行”的思想。
章节来源
- [per-chapter.strategy.ts:13-55](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L13-L55)
- [outline.node.ts:14-129](file://server/src/modules/book-generator/nodes/outline.node.ts#L14-L129)
- [per-chapter.node.ts:92-233](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L92-L233)
### 策略选择器(selector.ts)
- 注册与默认策略
- 统一注册所有策略实例,默认策略为“推荐策略”,可通过setCurrentStrategy动态切换。
- 运行时切换
- setCurrentStrategy即时生效,适合A/B对比与紧急切换。
- 查询接口
- getCurrentStrategy/getAllStrategies/getStrategy提供灵活访问策略的能力。
- 与策略类型
- 通过StrategyName与GenerationStrategy约束策略实现,确保类型安全。
章节来源
- [selector.ts:14-77](file://server/src/modules/book-generator/strategies/selector.ts#L14-L77)
- [types.ts:5-28](file://server/src/modules/book-generator/strategies/types.ts#L5-L28)
### 推荐策略(deep-plan-parallel.strategy.ts)
- 工作流
- deep_plan → rich_outline → parallel_content → continuity_edit
- 特点
- 深度规划、富信息大纲、并行内容生成、全局连贯性编辑,综合修复多项历史问题。
- 适合对质量、稳定性与效率均有较高要求的生产环境。
- 与节点的协作
- 依赖deep-plan.node、rich-outline.node、content.node(并行版)、continuity-edit.node。
章节来源
- [deep-plan-parallel.strategy.ts:32-73](file://server/src/modules/book-generator/strategies/deep-plan-parallel.strategy.ts#L32-L73)
### 容错层(fault-tolerance.ts)
- 重试机制
- callLLMWithRetry:指数退避重试,记录失败并通知用户。
- 节点超时
- executeNodeWithTimeout:超时后通知并触发恢复策略。
- 进度监控
- startProgressMonitor:长时间无进度更新时发出警告与自动恢复尝试。
- 自动恢复
- attemptAutoRecovery:在限定次数内自动重启生成流程。
章节来源
- [fault-tolerance.ts:67-122](file://server/src/modules/book-generator/fault-tolerance.ts#L67-L122)
- [fault-tolerance.ts:130-179](file://server/src/modules/book-generator/fault-tolerance.ts#L130-L179)
- [fault-tolerance.ts:187-260](file://server/src/modules/book-generator/fault-tolerance.ts#L187-L260)
- [fault-tolerance.ts:267-324](file://server/src/modules/book-generator/fault-tolerance.ts#L267-L324)
### 节点层关键节点
- 规划节点(plan.node.ts)
- 依据书籍规模与描述生成规划,决定大纲层级与写作风格,为后续节点提供指导。
- 一步大纲节点(full-outline.node.ts)
- 一次性生成完整树形大纲并持久化,支持genLevel=1/2/3。
- 大纲节点(outline.node.ts)
- 生成章级大纲,支持章节数校验与默认补充,确保数量在合理范围。
- 内容节点(content.node.ts)
- 串行/并行生成内容,包含额度检查、字数上限、智能截断与音频配额消耗。
- 逐章节点(per-chapter.node.ts)
- 逐章生成内部结构与内容,支持genLevel解析与结构索引创建。
章节来源
- [plan.node.ts:145-200](file://server/src/modules/book-generator/nodes/plan.node.ts#L145-L200)
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)
- [outline.node.ts:14-129](file://server/src/modules/book-generator/nodes/outline.node.ts#L14-L129)
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [content.node.ts:444-545](file://server/src/modules/book-generator/nodes/content.node.ts#L444-L545)
- [per-chapter.node.ts:92-233](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L92-L233)
## 依赖分析
- 策略层依赖
- 所有策略依赖types.ts定义的接口与名称枚举,确保策略实现的一致性。
- 基类执行框架被所有策略复用,形成高内聚低耦合的结构。
- 节点层依赖
- 各策略通过StateGraph组合不同节点,节点间通过GraphState传递数据。
- 容错层依赖
- 节点层广泛使用callLLMWithRetry与executeNodeWithTimeout,容错配置集中管理。
```mermaid
classDiagram
class GenerationStrategy {
+name
+description
+generate(bookId, topic, bookScale, genLevel)
}
class SequentialStrategy {
+name="sequential"
+description
+generate(...)
}
class OneStepOutlineStrategy {
+name="one-step-outline"
+description
+generate(...)
}
class PerChapterStrategy {
+name="per-chapter"
+description
+generate(...)
}
class DeepPlanParallelStrategy {
+name="deep-plan-parallel"
+description
+generate(...)
}
class StrategySelector {
+getCurrentStrategy()
+setCurrentStrategy(name)
+getAllStrategies()
+getStrategy(name)
}
GenerationStrategy <|.. SequentialStrategy
GenerationStrategy <|.. OneStepOutlineStrategy
GenerationStrategy <|.. PerChapterStrategy
GenerationStrategy <|.. DeepPlanParallelStrategy
StrategySelector --> GenerationStrategy : "持有实例"
```
图表来源
- [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)
- [one-step-outline.strategy.ts:21-23](file://server/src/modules/book-generator/strategies/one-step-outline.strategy.ts#L21-L23)
- [per-chapter.strategy.ts:21-23](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L21-L23)
- [deep-plan-parallel.strategy.ts:32-34](file://server/src/modules/book-generator/strategies/deep-plan-parallel.strategy.ts#L32-L34)
- [selector.ts:61-77](file://server/src/modules/book-generator/strategies/selector.ts#L61-L77)
## 性能考量
- 并发与吞吐
- 一步大纲策略与推荐策略通过并行内容生成显著提升吞吐,适合大规模内容生成。
- 并发度受AsyncPool限制,避免资源争用与超载。
- 调用次数与成本
- 顺序策略调用次数最多,成本与耗时相对更高;一步大纲策略与逐章策略在不同场景下平衡成本与质量。
- 节点超时与重试
- 合理设置节点超时阈值与重试次数,避免单点阻塞影响整体进度。
- 进度监控与恢复
- 长时间无进度时自动恢复,减少人工干预与资源浪费。
章节来源
- [content.node.ts:336-338](file://server/src/modules/book-generator/nodes/content.node.ts#L336-L338)
- [fault-tolerance.ts:16-50](file://server/src/modules/book-generator/fault-tolerance.ts#L16-L50)
- [fault-tolerance.ts:187-260](file://server/src/modules/book-generator/fault-tolerance.ts#L187-L260)
## 故障排查指南
- 常见问题定位
- 大纲生成失败:检查outline.node.ts与full-outline.node.ts的解析逻辑与LLM响应格式。
- 内容生成失败:查看content.node.ts的额度检查、字数上限与工具调用降级逻辑。
- 逐章生成失败:关注per-chapter.node.ts的章节解析与结构创建过程。
- 容错与恢复
- 使用callLLMWithRetry与executeNodeWithTimeout进行重试与超时保护。
- 启用startProgressMonitor监控长时间无响应,必要时触发attemptAutoRecovery。
- 日志与状态
- 通过bookStore更新genStage与errorMsg,结合策略基类的最终态处理,快速定位失败阶段。
章节来源
- [outline.node.ts:115-127](file://server/src/modules/book-generator/nodes/outline.node.ts#L115-L127)
- [full-outline.node.ts:210-217](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L210-L217)
- [content.node.ts:308-317](file://server/src/modules/book-generator/nodes/content.node.ts#L308-L317)
- [per-chapter.node.ts:206-232](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L206-L232)
- [fault-tolerance.ts:67-122](file://server/src/modules/book-generator/fault-tolerance.ts#L67-L122)
- [fault-tolerance.ts:130-179](file://server/src/modules/book-generator/fault-tolerance.ts#L130-L179)
- [base.ts:62-71](file://server/src/modules/book-generator/strategies/base.ts#L62-L71)
## 结论
策略管理器通过统一的接口与执行框架,将复杂的书籍生成流程抽象为可插拔的策略集合。顺序策略强调可控性,一步大纲策略强调吞吐,逐章策略强调质量与扩展性。配合容错层的重试、超时与自动恢复,系统在复杂业务场景下仍能保持稳定与高效。推荐在生产环境中优先采用推荐策略,并根据业务目标灵活切换与优化。
## 附录
### 策略选择与切换流程
```mermaid
flowchart TD
Start(["开始"]) --> GetSel["获取策略选择器"]
GetSel --> GetCurrent["获取当前策略名称"]
GetCurrent --> Switch{"是否需要切换?"}
Switch --> |否| UseCurrent["使用当前策略"]
Switch --> |是| SetNew["setCurrentStrategy(新策略)"]
SetNew --> UseCurrent
UseCurrent --> Run["调用策略.generate(...)"]
Run --> End(["结束"])
```
图表来源
- [selector.ts:42-56](file://server/src/modules/book-generator/strategies/selector.ts#L42-L56)
- [base.ts:26-72](file://server/src/modules/book-generator/strategies/base.ts#L26-L72)
### 策略对比测试(策略比较)
- 用途:在同一小书中对比顺序、一步大纲、逐章三种策略的执行耗时与结果。
- 使用方式:通过setCurrentStrategy切换策略,调用langGraphGenerator.generate执行生成。
- 输出:统计各策略耗时、章节数量、完成情况与规划信息。
章节来源
- [strategy-compare.ts:12-82](file://server/src/modules/book-generator/test/strategy-compare.ts#L12-L82)
### 自定义策略实现步骤
- 实现GenerationStrategy接口:定义name、description与generate方法。
- 构建StateGraph:在generate中定义节点与边,设置入口与终止。
- 初始化State:准备初始状态(bookId、topic、bookScale、genLevel等)。
- 复用基类执行:调用runGraphWorkflow,交由基类统一处理执行与收尾。
- 注册与切换:在selector.ts中注册实例,通过setCurrentStrategy启用。
章节来源
- [types.ts:8-22](file://server/src/modules/book-generator/strategies/types.ts#L8-L22)
- [sequential.strategy.ts:33-55](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L33-L55)
- [base.ts:26-72](file://server/src/modules/book-generator/strategies/base.ts#L26-L72)
- [selector.ts:14-77](file://server/src/modules/book-generator/strategies/selector.ts#L14-L77)
### 策略配置参数与执行条件
- 配置参数
- 当前激活策略:通过DEFAULT_STRATEGY与setCurrentStrategy控制。
- 大纲层级:由规划节点决定,也可由用户显式指定(auto/1/2/3)。
- 书籍规模:影响章节数、字数上限与并发策略。
- 执行条件
- 书籍存在且大纲存在:content.node.ts会检查大纲与章节完整性。
- 额度与字数:生成过程中持续检查用户配额与累计字数上限。
- 节点超时与重试:容错层根据配置自动处理失败与恢复。
章节来源
- [selector.ts:23-33](file://server/src/modules/book-generator/strategies/selector.ts#L23-L33)
- [plan.node.ts:145-199](file://server/src/modules/book-generator/nodes/plan.node.ts#L145-L199)
- [content.node.ts:162-206](file://server/src/modules/book-generator/nodes/content.node.ts#L162-L206)
- [fault-tolerance.ts:16-50](file://server/src/modules/book-generator/fault-tolerance.ts#L16-L50)
### 监控策略执行效果
- 进度监控:通过startProgressMonitor与bookStore更新进度,结合WebSocket推送实时状态。
- 失败追踪:记录失败节点、错误信息与自动恢复尝试次数,便于诊断。
- 结果验证:策略对比测试脚本可输出章节数量、完成情况与规划信息,辅助评估策略优劣。
章节来源
- [base.ts:33-71](file://server/src/modules/book-generator/strategies/base.ts#L33-L71)
- [fault-tolerance.ts:187-260](file://server/src/modules/book-generator/fault-tolerance.ts#L187-L260)
- [strategy-compare.ts:54-64](file://server/src/modules/book-generator/test/strategy-compare.ts#L54-L64)