# 生成策略系统

<cite>
**本文档引用的文件**
- [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)
- [deep-plan-parallel.strategy.ts](file://server/src/modules/book-generator/strategies/deep-plan-parallel.strategy.ts)
- [selector.ts](file://server/src/modules/book-generator/strategies/selector.ts)
- [types.ts](file://server/src/modules/book-generator/strategies/types.ts)
- [graph.ts](file://server/src/modules/book-generator/graph.ts)
- [book-generator.types.ts](file://server/src/modules/book-generator/book-generator.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)
- [per-chapter.node.ts](file://server/src/modules/book-generator/nodes/per-chapter.node.ts)
- [fault-tolerance.ts](file://server/src/modules/book-generator/fault-tolerance.ts)
- [book-generator.store.ts](file://server/src/modules/book-generator/book-generator.store.ts)
</cite>

## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)

## 简介
本文件为“生成策略系统”的综合性技术文档，聚焦于多策略生成流水线的设计与实现，涵盖策略选择逻辑、参数配置、执行流程控制、性能特征与资源消耗、策略切换与动态调整机制，以及策略对比与最佳实践。系统基于 LangGraph 工作流，结合容错与进度监控，支持多种生成策略（串行、一步大纲+并行内容、逐章内聚、深度规划+并发+连贯性编辑），并提供策略切换与运行时动态调整能力。

## 项目结构
生成策略系统位于服务端模块的书籍生成子系统中，采用“策略 + 节点 + 容错 + 存储”的分层设计：
- 策略层：定义统一的策略接口与具体策略实现，负责编排 LangGraph 工作流。
- 节点层：实现各阶段的具体节点（规划、大纲、内容等），负责与 LLM 交互与数据持久化。
- 容错层：提供 AI 调用重试、节点超时、进度监控与自动恢复机制。
- 存储层：封装数据库访问与状态管理，维护书籍与章节的生命周期与阶段状态。

```mermaid
graph TB
subgraph "策略层"
S1["SequentialStrategy<br/>串行策略"]
S2["OneStepOutlineStrategy<br/>一步大纲+并行内容"]
S3["PerChapterStrategy<br/>逐章内聚"]
S4["DeepPlanParallelStrategy<br/>深度规划+并发+连贯性编辑"]
SEL["策略选择器<br/>selector.ts"]
end
subgraph "节点层"
N1["planBookNode<br/>规划节点"]
N2["generateFullOutlineNode<br/>一步大纲节点"]
N3["perChapterNode<br/>逐章节点"]
N4["generateOutlineNode<br/>章大纲节点"]
N5["generateSectionsNode<br/>节节点"]
N6["generateSubsectionsNode<br/>小节节点"]
N7["writeChaptersNode<br/>内容节点"]
FT["容错与监控<br/>fault-tolerance.ts"]
end
subgraph "状态与存储"
G["GraphState<br/>graph.ts"]
BS["BookStore<br/>book-generator.store.ts"]
BT["类型定义<br/>book-generator.types.ts"]
end
S1 --> N1
S1 --> N4
S1 --> N5
S1 --> N6
S1 --> N7
S2 --> N1
S2 --> N2
S2 --> N7
S3 --> N1
S3 --> N4
S3 --> N3
S4 --> N1
S4 --> N2
S4 --> N3
S4 --> N4
N1 --> G
N2 --> G
N3 --> G
N4 --> G
N5 --> G
N6 --> G
N7 --> G
G --> BS
BS --> BT
FT --> BS
SEL --> S1
SEL --> S2
SEL --> S3
SEL --> S4
```

图表来源
- [selector.ts:1-81](file://server/src/modules/book-generator/strategies/selector.ts#L1-L81)
- [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)
- [graph.ts:1-83](file://server/src/modules/book-generator/graph.ts#L1-L83)
- [book-generator.store.ts:1-800](file://server/src/modules/book-generator/book-generator.store.ts#L1-L800)

章节来源
- [selector.ts:1-81](file://server/src/modules/book-generator/strategies/selector.ts#L1-L81)
- [graph.ts:1-83](file://server/src/modules/book-generator/graph.ts#L1-L83)
- [book-generator.types.ts:1-226](file://server/src/modules/book-generator/book-generator.types.ts#L1-L226)

## 核心组件
- 策略接口与类型
  - 策略名称枚举与统一接口，定义 generate(bookId, topic, bookScale, genLevel) 执行入口。
  - 策略配置对象包含当前激活策略名称。
- 基础策略执行
  - 统一的 LangGraph 工作流运行器，负责初始化状态、编译图、流式执行、进度更新与最终发布。
- 状态模型
  - GraphState 定义书籍与章节生成过程中的关键状态字段（如进度、层级、完成章节、失败章节等），并提供 reducer 保证进度单调递增与失败信息合并。
- 存储与类型
  - BookStore 封装数据库访问、章节树构建、阶段计算与发布逻辑；类型定义涵盖书籍、章节、任务、配置与提示词模板等。

章节来源
- [types.ts:1-29](file://server/src/modules/book-generator/strategies/types.ts#L1-L29)
- [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)
- [book-generator.types.ts:1-226](file://server/src/modules/book-generator/book-generator.types.ts#L1-L226)
- [book-generator.store.ts:1-800](file://server/src/modules/book-generator/book-generator.store.ts#L1-L800)

## 架构概览
系统以 LangGraph 为核心，将“策略”抽象为不同的工作流编排，节点负责具体阶段的 AI 生成与数据持久化。策略选择器提供运行时切换能力，容错层贯穿执行全过程，确保稳定性与可观测性。

```mermaid
sequenceDiagram
participant Client as "客户端"
participant Selector as "策略选择器"
participant Strategy as "具体策略"
participant Graph as "LangGraph工作流"
participant Nodes as "节点集合"
participant Store as "BookStore"
participant Monitor as "容错监控"
Client->>Selector : 请求生成(参数)
Selector->>Strategy : 获取当前策略实例
Strategy->>Graph : 编译工作流(节点+边)
Strategy->>Graph : 初始化状态
Strategy->>Monitor : 启动进度监控
Graph->>Nodes : 流式执行各节点
Nodes->>Store : 持久化状态/大纲/内容
Nodes-->>Graph : 返回阶段性结果
Graph-->>Strategy : 完成或失败
Strategy->>Store : 更新书籍阶段与进度
Strategy->>Monitor : 停止监控
Strategy-->>Client : 返回执行结果
```

图表来源
- [selector.ts:37-81](file://server/src/modules/book-generator/strategies/selector.ts#L37-L81)
- [base.ts:26-73](file://server/src/modules/book-generator/strategies/base.ts#L26-L73)
- [fault-tolerance.ts:188-261](file://server/src/modules/book-generator/fault-tolerance.ts#L188-L261)
- [book-generator.store.ts:400-428](file://server/src/modules/book-generator/book-generator.store.ts#L400-L428)

## 详细组件分析

### 策略选择器与配置
- 注册与默认策略
  - 策略注册表包含四种策略实例，当前默认策略为“深度规划+并发+连贯性编辑”。
- 运行时切换
  - 提供 setCurrentStrategy(name) 实现策略即时切换，立即生效。
- 查询与导出
  - 支持查询当前策略、所有策略与按名称获取策略实例。

章节来源
- [selector.ts:12-81](file://server/src/modules/book-generator/strategies/selector.ts#L12-L81)

### 基础策略执行框架
- 统一工作流运行
  - 初始化书籍阶段为“大纲生成”，启动进度监控。
  - 编译 LangGraph，流式遍历节点，记录步骤名称。
  - 根据最终书籍状态更新进度与阶段，若达到视频完成则自动发布专辑。
  - 异常捕获统一设置失败状态与错误信息。
- 进度与发布
  - 进度只增不减，最终态为“内容完成/音频完成/视频完成”时更新阶段。
  - 仅在“视频完成”时触发发布。

章节来源
- [base.ts:26-73](file://server/src/modules/book-generator/strategies/base.ts#L26-L73)

### 串行策略（SequentialStrategy）
- 工作流
  - plan_book → generate_outline → generate_sections → generate_subsections → write_chapters
- 特点
  - 各环节串行执行，每个环节独立 AI 调用，适合稳定可控的生成流程。
- 参数与状态
  - 接收 bookId、topic、bookScale、genLevel，初始化状态包含进度、当前章节与完成标记。
- 适用场景
  - 对生成质量与一致性要求高、并发风险敏感的场景。

```mermaid
flowchart TD
Start(["开始"]) --> Plan["规划节点"]
Plan --> Outline["生成章大纲"]
Outline --> Sections["生成节大纲"]
Sections --> Subsections["生成小节大纲"]
Subsections --> Content["生成章节内容"]
Content --> End(["结束"])
```

图表来源
- [sequential.strategy.ts:33-57](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L33-L57)
- [plan.node.ts:145-201](file://server/src/modules/book-generator/nodes/plan.node.ts#L145-L201)

章节来源
- [sequential.strategy.ts:1-60](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L1-L60)

### 一步大纲+并行内容策略（OneStepOutlineStrategy）
- 工作流
  - plan_book → generate_full_outline → write_chapters
- 特点
  - 一次 AI 生成完整树形大纲（章→节→小节），随后将章节分组并行写内容。
  - 调用量约为 1(规划)+1(大纲)+N(内容) 次 AI。
- 优势
  - 大幅减少大纲生成次数，提升整体吞吐。
- 适用场景
  - 大规模内容生成、追求效率优先的场景。

```mermaid
sequenceDiagram
participant Strat as "策略"
participant Plan as "规划节点"
participant Full as "一步大纲节点"
participant Write as "并行内容节点"
Strat->>Plan : 规划书籍
Plan-->>Strat : 返回规划结果
Strat->>Full : 生成完整大纲
Full-->>Strat : 返回树形大纲
Strat->>Write : 并行写各章节内容
Write-->>Strat : 更新章节内容与进度
```

图表来源
- [one-step-outline.strategy.ts:33-53](file://server/src/modules/book-generator/strategies/one-step-outline.strategy.ts#L33-L53)
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)

章节来源
- [one-step-outline.strategy.ts:1-56](file://server/src/modules/book-generator/strategies/one-step-outline.strategy.ts#L1-L56)
- [full-outline.node.ts:1-243](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L1-L243)

### 逐章内聚策略（PerChapterStrategy）
- 工作流
  - plan_book → generate_outline → per_chapter（批量并行）
- 特点
  - 先生成章大纲（仅章节列表），然后每章独立生成内部结构+内容，支持并发。
  - 调用量约为 1(规划)+1(大纲)+N(章节数) 次 AI。
- 优势
  - 章节内聚，便于质量控制与局部重试。
- 适用场景
  - 内容质量优先、章节间相对独立的场景。

```mermaid
flowchart TD
Start(["开始"]) --> Plan["规划节点"]
Plan --> Outline["生成章大纲"]
Outline --> PerChapter["逐章处理(并行)"]
PerChapter --> End(["结束"])
```

图表来源
- [per-chapter.strategy.ts:33-53](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L33-L53)
- [per-chapter.node.ts:92-233](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L92-L233)

章节来源
- [per-chapter.strategy.ts:1-56](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L1-L56)
- [per-chapter.node.ts:1-324](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L1-L324)

### 深度规划+并发+连贯性编辑策略（DeepPlanParallelStrategy）
- 工作流
  - deep_plan → rich_outline → parallel_content → continuity_edit
- 特点
  - 深度规划：AI 分析 goldenThread、narrativeArc、toneProfile、audienceCalibration。
  - 富信息大纲：每节点包含 writingInstructions。
  - 并发内容：8 路并发生成叶节点内容。
  - 连贯性编辑：全局一致性检查与修正。
- 适用场景
  - 对内容质量、风格一致性和生成效率都有较高要求的场景。

章节来源
- [deep-plan-parallel.strategy.ts:1-74](file://server/src/modules/book-generator/strategies/deep-plan-parallel.strategy.ts#L1-L74)

### 节点与状态交互
- 规划节点（planBookNode）
  - 生成前的书籍分析，决定大纲层级与风格逻辑，解析并持久化规划结果。
- 一步大纲节点（generateFullOutlineNode）
  - 一次性生成完整树形大纲，创建章/节/小节记录并持久化。
- 逐章节点（perChapterNode）
  - 逐章生成内部结构与内容，支持并发与结构索引创建。
- 状态与持久化
  - GraphState 提供进度、层级、完成/失败章节等状态；BookStore 负责章节树构建、阶段计算与发布。

章节来源
- [plan.node.ts:145-201](file://server/src/modules/book-generator/nodes/plan.node.ts#L145-L201)
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)
- [per-chapter.node.ts:92-233](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L92-L233)
- [graph.ts:23-83](file://server/src/modules/book-generator/graph.ts#L23-L83)
- [book-generator.store.ts:163-800](file://server/src/modules/book-generator/book-generator.store.ts#L163-L800)

## 依赖分析
- 策略与节点
  - 各策略通过 LangGraph 组合不同节点序列，形成差异化工作流。
- 容错与监控
  - 容错层贯穿节点执行，提供 AI 重试、节点超时与进度监控，保障稳定性。
- 存储与类型
  - 存储层提供 upsert 机制避免并发写入冲突，类型定义确保状态与数据结构一致性。

```mermaid
graph LR
Types["类型定义<br/>book-generator.types.ts"] --> Graph["状态模型<br/>graph.ts"]
Graph --> Base["基础执行框架<br/>base.ts"]
Base --> Strategies["策略实现<br/>sequential/one-step/per-chapter/deep-plan-parallel"]
Strategies --> Nodes["节点实现<br/>plan/full-outline/per-chapter"]
Strategies --> Store["存储封装<br/>book-generator.store.ts"]
Strategies --> FT["容错监控<br/>fault-tolerance.ts"]
```

图表来源
- [book-generator.types.ts:1-226](file://server/src/modules/book-generator/book-generator.types.ts#L1-L226)
- [graph.ts:1-83](file://server/src/modules/book-generator/graph.ts#L1-L83)
- [base.ts:1-73](file://server/src/modules/book-generator/strategies/base.ts#L1-L73)
- [selector.ts:12-81](file://server/src/modules/book-generator/strategies/selector.ts#L12-L81)
- [fault-tolerance.ts:17-51](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L51)
- [book-generator.store.ts:466-556](file://server/src/modules/book-generator/book-generator.store.ts#L466-L556)

章节来源
- [selector.ts:12-81](file://server/src/modules/book-generator/strategies/selector.ts#L12-L81)
- [fault-tolerance.ts:17-51](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L51)
- [book-generator.store.ts:466-556](file://server/src/modules/book-generator/book-generator.store.ts#L466-L556)

## 性能考虑
- 调用次数与吞吐
  - 串行策略：调用次数最高，适合稳定可控场景。
  - 一步大纲+并行内容：大幅降低大纲生成次数，提升吞吐。
  - 逐章内聚：章级并行，兼顾质量与并发。
  - 深度规划+并发+连贯性编辑：最高并发与质量保障，适合高质量内容生产。
- 资源消耗
  - 并发策略显著增加 LLM 调用并发与数据库写入压力，需配合 upsert 与队列限流。
  - 节点超时与重试配置需根据业务 SLA 调整，避免资源浪费。
- 进度与可观测性
  - 进度监控与自动恢复机制可降低长时间无响应风险，提升用户体验。

章节来源
- [fault-tolerance.ts:17-51](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L51)
- [book-generator.store.ts:466-556](file://server/src/modules/book-generator/book-generator.store.ts#L466-L556)

## 故障排查指南
- 常见问题定位
  - AI 调用失败：检查重试配置与日志，确认节点超时与自动恢复触发。
  - 进度停滞：查看进度监控告警与数据库进度字段，确认任务是否卡住。
  - 并发写入冲突：确认 upsert 使用与唯一键约束，避免重复创建。
- 处理流程
  - 容错层会记录失败日志并尝试自动恢复，必要时人工介入重新生成。
  - 策略切换可用于快速回退到稳定方案。

章节来源
- [fault-tolerance.ts:68-123](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L123)
- [fault-tolerance.ts:188-261](file://server/src/modules/book-generator/fault-tolerance.ts#L188-L261)
- [book-generator.store.ts:466-556](file://server/src/modules/book-generator/book-generator.store.ts#L466-L556)

## 结论
生成策略系统通过“策略 + 节点 + 容错 + 存储”的分层设计，实现了灵活、可扩展且稳定的书籍生成流水线。不同策略在调用次数、并发度与质量保障方面各有侧重，策略选择器支持运行时切换，满足多样化业务需求。建议在追求效率时优先考虑一步大纲+并行内容或深度规划+并发策略，在强调质量与一致性时采用逐章内聚或深度规划+连贯性编辑策略，并结合容错与监控机制保障稳定性。

## 附录
- 策略切换与动态调整
  - 通过 setCurrentStrategy(name) 即时切换策略，适用于灰度发布与紧急回滚。
- 自定义策略开发指导
  - 实现 GenerationStrategy 接口，定义工作流节点序列与初始状态，复用基础执行框架与容错监控。
- 性能对比与最佳实践
  - 根据内容规模与质量要求选择策略；大规模生成优先考虑并发策略；严格控制节点超时与重试次数；利用 upsert 与进度监控提升稳定性。

章节来源
- [selector.ts:49-77](file://server/src/modules/book-generator/strategies/selector.ts#L49-L77)
- [types.ts:8-22](file://server/src/modules/book-generator/strategies/types.ts#L8-L22)
- [base.ts:26-73](file://server/src/modules/book-generator/strategies/base.ts#L26-L73)
- [fault-tolerance.ts:17-51](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L51)