# 生成节点系统

<cite>
**本文档引用的文件**
- [content.node.ts](file://server/src/modules/book-generator/nodes/content.node.ts)
- [foreword.node.ts](file://server/src/modules/book-generator/nodes/foreword.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)
- [per-chapter.node.ts](file://server/src/modules/book-generator/nodes/per-chapter.node.ts)
- [plan.node.ts](file://server/src/modules/book-generator/nodes/plan.node.ts)
- [sections.node.ts](file://server/src/modules/book-generator/nodes/sections.node.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)
- [book-type-config.ts](file://server/src/modules/book-generator/book-type-config.ts)
- [utils.ts](file://server/src/modules/book-generator/utils.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)
- [book-generator.controller.ts](file://server/src/modules/book-generator/book-generator.controller.ts)
</cite>

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

## 简介
本文件面向“生成节点系统”，系统性梳理并解释各节点的功能、输入输出、处理逻辑与协作关系，覆盖以下节点：
- content.node（内容生成节点）
- foreword.node（序言节点）
- full-outline.node（完整大纲节点）
- outline.node（大纲节点）
- per-chapter.node（按章节生成节点）
- plan.node（规划节点）
- sections.node（章节节点）

同时阐明节点间依赖关系、执行顺序、数据传递机制，并提供扩展新节点类型、配置参数与调试执行过程的方法。

## 项目结构
生成节点系统位于服务端模块 book-generator 下，采用“节点 + 策略 + 图状态”的分层设计：
- nodes：具体节点实现（每个文件对应一个节点）
- strategies：生成策略（串联/并行组合不同节点）
- graph.ts：LangGraph 状态定义与工作流编排
- book-generator.types.ts：核心数据类型
- book-type-config.ts：书籍规模与字数/章节数配置
- utils.ts：通用工具（进度常量、字数统计等）
- book-generator.controller.ts：对外 API（批量生成、取消、状态查询）

```mermaid
graph TB
subgraph "节点"
PLAN["plan.node.ts"]
OUTLINE["outline.node.ts"]
FULL_OUTLINE["full-outline.node.ts"]
SECTIONS["sections.node.ts"]
PER_CHAPTER["per-chapter.node.ts"]
CONTENT["content.node.ts"]
FOREWORD["foreword.node.ts"]
end
subgraph "策略"
SEQ["sequential.strategy.ts"]
ONESTEP["one-step-outline.strategy.ts"]
PERCHAPTER["per-chapter.strategy.ts"]
end
subgraph "图与类型"
GRAPH["graph.ts"]
TYPES["book-generator.types.ts"]
CFG["book-type-config.ts"]
UTILS["utils.ts"]
end
PLAN --> OUTLINE
OUTLINE --> SECTIONS
SECTIONS --> CONTENT
FULL_OUTLINE --> CONTENT
PER_CHAPTER --> CONTENT
FOREWORD --> CONTENT
SEQ --> PLAN
SEQ --> OUTLINE
SEQ --> SECTIONS
SEQ --> CONTENT
ONESTEP --> PLAN
ONESTEP --> FULL_OUTLINE
ONESTEP --> CONTENT
PERCHAPTER --> PLAN
PERCHAPTER --> OUTLINE
PERCHAPTER --> PER_CHAPTER
```

图表来源
- [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)
- [plan.node.ts:145-201](file://server/src/modules/book-generator/nodes/plan.node.ts#L145-L201)
- [outline.node.ts:14-129](file://server/src/modules/book-generator/nodes/outline.node.ts#L14-L129)
- [sections.node.ts:19-235](file://server/src/modules/book-generator/nodes/sections.node.ts#L19-L235)
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [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)
- [foreword.node.ts:14-48](file://server/src/modules/book-generator/nodes/foreword.node.ts#L14-L48)

章节来源
- [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-type-config.ts:1-133](file://server/src/modules/book-generator/book-type-config.ts#L1-L133)
- [utils.ts:1-24](file://server/src/modules/book-generator/utils.ts#L1-L24)

## 核心组件
- 节点（Node）：每个文件代表一个独立的处理单元，负责特定阶段的任务（规划、大纲、章节、内容、序言等），接收 GraphState，返回部分状态更新。
- 策略（Strategy）：定义节点的执行顺序与组合方式，如串行策略、一步大纲策略、逐章策略。
- 图状态（GraphState）：LangGraph 的状态注解，包含 bookId、topic、bookScale、genLevel、progress、finished 等字段，支持 reducer 保证进度只增不减。
- 类型与配置：book-generator.types.ts 定义书籍、章节、任务等核心类型；book-type-config.ts 提供书籍规模、字数/章节数、安全上限等配置；utils.ts 提供进度常量与字数统计。

章节来源
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [book-generator.types.ts:8-139](file://server/src/modules/book-generator/book-generator.types.ts#L8-L139)
- [book-type-config.ts:47-133](file://server/src/modules/book-generator/book-type-config.ts#L47-L133)
- [utils.ts:15-24](file://server/src/modules/book-generator/utils.ts#L15-L24)

## 架构总览
系统通过 LangGraph 将多个节点串联或并行组合，形成不同的生成策略。策略文件定义节点连接关系，节点文件实现具体业务逻辑，类型与配置为节点提供数据契约与约束。

```mermaid
sequenceDiagram
participant Client as "客户端"
participant Controller as "book-generator.controller.ts"
participant Strategy as "策略(Sequential/OneStep/PerChapter)"
participant Plan as "plan.node.ts"
participant Outline as "outline.node.ts 或 full-outline.node.ts"
participant Sections as "sections.node.ts"
participant Content as "content.node.ts"
participant Foreword as "foreword.node.ts"
Client->>Controller : POST /books/ : id/batch-generate
Controller->>Strategy : 创建并启动生成任务
Strategy->>Plan : plan_book
Plan-->>Strategy : 返回 genLevel 与 bookPlan
alt 串行策略
Strategy->>Outline : generate_outline
Outline-->>Strategy : 返回 outlineJson
Strategy->>Sections : generate_sections
Sections-->>Strategy : 补充节大纲
Strategy->>Sections : generate_subsections
Sections-->>Strategy : 补充小节大纲
Strategy->>Content : write_chapters
Content-->>Strategy : 完成内容生成
else 一步大纲策略
Strategy->>Outline : generate_full_outline
Outline-->>Strategy : 返回完整树形大纲
Strategy->>Content : write_chapters
Content-->>Strategy : 完成内容生成
else 逐章策略
Strategy->>Outline : generate_outline
Outline-->>Strategy : 返回章大纲
Strategy->>Content : per_chapter
Content-->>Strategy : 每章独立生成结构+内容
end
Strategy->>Foreword : 生成前言/后记
Foreword-->>Strategy : 完成
Strategy-->>Controller : 返回完成状态
Controller-->>Client : 返回任务结果
```

图表来源
- [book-generator.controller.ts:24-119](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L119)
- [sequential.strategy.ts:33-58](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L33-L58)
- [one-step-outline.strategy.ts:33-53](file://server/src/modules/book-generator/strategies/one-step-outline.strategy.ts#L33-L53)
- [per-chapter.strategy.ts:33-53](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L33-L53)
- [plan.node.ts:145-201](file://server/src/modules/book-generator/nodes/plan.node.ts#L145-L201)
- [outline.node.ts:14-129](file://server/src/modules/book-generator/nodes/outline.node.ts#L14-L129)
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)
- [sections.node.ts:19-235](file://server/src/modules/book-generator/nodes/sections.node.ts#L19-L235)
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [foreword.node.ts:14-48](file://server/src/modules/book-generator/nodes/foreword.node.ts#L14-L48)

## 详细组件分析

### 规划节点（plan.node）
- 功能：在生成任何内容之前，由 AI 对书籍进行规划，确定大纲层级（1/2/3层）、写作风格、结构逻辑、内容深度与目标读者分析。
- 输入：GraphState.bookId、topic、description、bookScale
- 输出：GraphState.genLevel、GraphState.bookPlan（JSON字符串）
- 关键逻辑：
  - 构建规划提示词，调用 LLM，解析 JSON，持久化到数据库并回传给后续节点。
  - 若用户已指定 genLevel，则在特定条件下保留用户选择。
- 典型用途：为 outline.node、sections.node、content.node 提供 genLevel 与规划上下文。

章节来源
- [plan.node.ts:145-201](file://server/src/modules/book-generator/nodes/plan.node.ts#L145-L201)
- [plan.node.ts:101-139](file://server/src/modules/book-generator/nodes/plan.node.ts#L101-L139)
- [plan.node.ts:41-96](file://server/src/modules/book-generator/nodes/plan.node.ts#L41-L96)

### 大纲节点（outline.node）
- 功能：生成章级大纲，支持容错重试与超时控制，解析并校验章节数范围，补充默认章节。
- 输入：GraphState.bookId、topic、bookScale、description、bookPlan
- 输出：GraphState.progress（OUTLINE_DONE）、更新书籍 outlineJson
- 关键逻辑：
  - 使用提示词构建器生成消息，调用 LLM，解析 JSON，校验章节数（±20%浮动），必要时补充默认章节。
  - 容错包装器封装 AI 调用与超时。
- 典型用途：为 sections.node 提供章级大纲。

章节来源
- [outline.node.ts:14-129](file://server/src/modules/book-generator/nodes/outline.node.ts#L14-L129)

### 完整大纲节点（full-outline.node）
- 功能：一步生成完整树形大纲（章→节→小节），并存入数据库。
- 输入：GraphState.bookId、topic、bookScale、genLevel、bookPlan
- 输出：GraphState.progress（OUTLINE_DONE）、更新书籍 outlineJson
- 关键逻辑：
  - 构建一步大纲提示词，调用 LLM，解析 JSON，按 genLevel 写入章/节/小节记录。
  - 容错包装器与超时控制。
- 典型用途：配合 content.node 的并行内容生成。

章节来源
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)
- [full-outline.node.ts:18-108](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L18-L108)

### 章节节点（sections.node）
- 功能：为每章生成节的大纲（genLevel>1 时生效），并写入数据库。
- 输入：GraphState.bookId、genLevel、outlineJson
- 输出：GraphState.progress（SECTIONS_DONE）、更新 outlineJson（带 sections）
- 关键逻辑：
  - 逐章构建提示词，调用 LLM，解析节大纲，写入节记录。
  - 多次重试确保解析成功。
- 典型用途：为小节节点提供节级大纲。

章节来源
- [sections.node.ts:19-110](file://server/src/modules/book-generator/nodes/sections.node.ts#L19-L110)

### 小节节点（sections.node）
- 功能：为每节生成小节的大纲（genLevel>2 时生效），并写入数据库。
- 输入：GraphState.bookId、genLevel、outlineJson
- 输出：GraphState.progress（SUBSECTIONS_DONE）、更新 outlineJson（带 subsections）
- 关键逻辑：
  - 逐节构建提示词，调用 LLM，解析小节大纲，写入小节记录。
  - 多次重试确保解析成功。
- 典型用途：为 content.node 提供完整层级结构。

章节来源
- [sections.node.ts:117-235](file://server/src/modules/book-generator/nodes/sections.node.ts#L117-L235)

### 内容生成节点（content.node）
- 功能：为叶节点（没有子节点）生成正文内容，支持串行与并行两种实现。
- 输入：GraphState.bookId、topic、bookScale、genLevel、outlineJson
- 输出：GraphState.progress（CONTENT_END）、更新章节内容与字数、触发音频生成
- 关键逻辑：
  - 识别叶节点，过滤未完成内容的目标。
  - 串行实现：逐个生成，额度与字数安全控制，异常处理与重试。
  - 并行实现：AsyncPool 并发生成，拓扑排序与依赖处理，统一更新父节点状态。
  - 安全防护：章节预算偏差检测、全书累计字数上限、全局绝对上限。
- 典型用途：生成最终内容并触发音频生成。

```mermaid
flowchart TD
Start(["进入 writeChaptersNode"]) --> LoadBook["加载书籍与大纲"]
LoadBook --> FindLeaves["查找叶节点并过滤未完成项"]
FindLeaves --> HasTargets{"是否存在待生成目标？"}
HasTargets --> |否| Skip["跳过生成，触发音频生成"] --> End
HasTargets --> |是| BuildCtx["构建父节点映射与工具"]
BuildCtx --> Loop["遍历每个目标"]
Loop --> Quota["额度检查与字数上限校验"]
Quota --> GenType{"短文还是长篇？"}
GenType --> |短文| ShortMsg["构建短文消息"]
GenType --> |长篇| LongMsg["构建小节内容消息"]
ShortMsg --> CallLLM["调用 LLM 生成内容"]
LongMsg --> CallLLM
CallLLM --> Clean["清理思考标签与无关文本"]
Clean --> Safety["三层安全防护：预算偏差/全书上限/全局上限"]
Safety --> Consume["消耗音频分钟配额"]
Consume --> Save["保存内容与字数，推进阶段"]
Save --> Trigger["触发音频生成"]
Trigger --> Next["下一个目标"]
Next --> Loop
Loop --> Done["全部完成，更新父节点状态"] --> End(["退出"])
```

图表来源
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [content.node.ts:22-55](file://server/src/modules/book-generator/nodes/content.node.ts#L22-L55)
- [content.node.ts:240-317](file://server/src/modules/book-generator/nodes/content.node.ts#L240-L317)

章节来源
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [content.node.ts:334-546](file://server/src/modules/book-generator/nodes/content.node.ts#L334-L546)

### 按章节生成节点（per-chapter.node）
- 功能：先生成章大纲，再为每章独立生成内部结构（节/小节）+ 内容，支持容错与重试。
- 输入：GraphState.bookId、topic、bookScale、genLevel、bookPlan
- 输出：GraphState.progress（CONTENT_END）、更新章节内容与结构
- 关键逻辑：
  - 逐章构建提示词，调用 LLM，解析 JSON，创建内部结构（节/小节）并保存内容。
  - 数据库写入验证与重试，确保内容落库。
- 典型用途：逐章内聚生成，便于并行扩展。

章节来源
- [per-chapter.node.ts:92-233](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L92-L233)
- [per-chapter.node.ts:28-86](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L28-L86)

### 序言节点（foreword.node）
- 功能：生成前言与后记，分别更新进度与完成状态。
- 输入：GraphState.bookId、topic
- 输出：GraphState.progress（FOREWORD_DONE/AFTERWORD_DONE）、更新书籍 foreword/afterword
- 关键逻辑：构建提示词，调用 LLM，保存到数据库。

章节来源
- [foreword.node.ts:14-48](file://server/src/modules/book-generator/nodes/foreword.node.ts#L14-L48)

## 依赖关系分析
- 节点依赖：
  - outline.node 依赖 bookPlan（来自 plan.node）与书籍规模配置。
  - sections.node 依赖 outline.node 的章级大纲。
  - full-outline.node 与 per-chapter.node 均可替代 outline.node 的作用，但前者生成完整树形大纲，后者仅生成章级大纲。
  - content.node 依赖 outlineJson 与 genLevel，支持串行与并行两种实现。
  - foreword.node 独立于大纲生成，完成后置处理。
- 策略依赖：
  - sequential.strategy 串联 plan → outline → sections → subsections → content。
  - one-step-outline.strategy 串联 plan → full-outline → content。
  - per-chapter.strategy 串联 plan → outline → per-chapter。
- 类型与配置：
  - GraphState 定义状态字段与 reducer。
  - book-type-config 提供字数/章节数/安全上限等配置。
  - utils 提供进度常量。

```mermaid
graph LR
PLAN["plan.node"] --> OUTLINE["outline.node"]
PLAN --> FULL_OUTLINE["full-outline.node"]
PLAN --> PERCHAPTER["per-chapter.node"]
OUTLINE --> SECTIONS["sections.node"]
SECTIONS --> CONTENT["content.node"]
FULL_OUTLINE --> CONTENT
PERCHAPTER --> CONTENT
FOREWORD["foreword.node"] --> CONTENT
```

图表来源
- [sequential.strategy.ts:33-44](file://server/src/modules/book-generator/strategies/sequential.strategy.ts#L33-L44)
- [one-step-outline.strategy.ts:33-40](file://server/src/modules/book-generator/strategies/one-step-outline.strategy.ts#L33-L40)
- [per-chapter.strategy.ts:33-40](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L33-L40)

章节来源
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [book-type-config.ts:95-133](file://server/src/modules/book-generator/book-type-config.ts#L95-L133)
- [utils.ts:15-24](file://server/src/modules/book-generator/utils.ts#L15-L24)

## 性能考量
- 并行优化：
  - content.node 的并行实现通过 AsyncPool 控制并发数，减少整体生成时间。
  - per-chapter.node 的逐章处理避免并发写入冲突，适合大规模书籍。
- 容错与超时：
  - outline.node、full-outline.node、per-chapter.node 均使用容错包装器与超时控制，提升稳定性。
- 配额与安全：
  - 字数安全三重防护：章节预算偏差检测、全书累计字数上限、全局绝对上限（50 万字）。
  - 音频分钟配额消耗，结合订阅服务进行额度控制。
- 进度只增不减：
  - GraphState 的 reducer 设计确保进度不会回退，便于前端展示与任务追踪。

章节来源
- [content.node.ts:444-546](file://server/src/modules/book-generator/nodes/content.node.ts#L444-L546)
- [outline.node.ts:29-46](file://server/src/modules/book-generator/nodes/outline.node.ts#L29-L46)
- [full-outline.node.ts:149-160](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L149-L160)
- [per-chapter.node.ts:138-143](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L138-L143)
- [book-type-config.ts:120-133](file://server/src/modules/book-generator/book-type-config.ts#L120-L133)
- [graph.ts:12-21](file://server/src/modules/book-generator/graph.ts#L12-L21)

## 故障排查指南
- 常见问题与定位：
  - 大纲解析失败：检查 outline.node 与 full-outline.node 的 JSON 解析逻辑，确认提示词格式与 LLM 输出一致性。
  - 章节内容未落库：查看 per-chapter.node 的写入验证与重试逻辑，确认数据库查询条件与 ID 映射。
  - 并行内容生成异常：检查 content.node 的并行池配置与任务上下文，关注工具调用与截断逻辑。
  - 额度不足或字数超限：查看额度检查与字数上限逻辑，确认用户配额与累计字数统计。
- 调试建议：
  - 在节点入口打印 bookId、genLevel、进度等关键信息。
  - 使用容错包装器捕获错误并记录重试次数与最后一次错误。
  - 逐步缩小问题范围：先验证 outline 生成，再验证 sections/subsections，最后验证 content 生成。
- API 层辅助：
  - 使用批量生成 API 的状态查询与取消接口，便于任务管理与资源回收。

章节来源
- [outline.node.ts:14-129](file://server/src/modules/book-generator/nodes/outline.node.ts#L14-L129)
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)
- [per-chapter.node.ts:169-201](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L169-L201)
- [content.node.ts:240-317](file://server/src/modules/book-generator/nodes/content.node.ts#L240-L317)
- [book-generator.controller.ts:162-199](file://server/src/modules/book-generator/book-generator.controller.ts#L162-L199)

## 结论
生成节点系统通过“节点 + 策略 + 图状态”的架构实现了可插拔、可扩展的书籍生成流水线。不同策略在不同场景下平衡了生成质量与效率，节点间通过 GraphState 实现稳定的数据传递与进度管理。安全与容错机制保障了大规模生成的可靠性，而并行优化显著提升了吞吐能力。建议在扩展新节点时遵循现有模式：定义输入输出、实现容错与日志、接入进度更新与安全检查，并通过策略文件进行编排。

## 附录

### A. 节点输入输出与处理逻辑速览
- 规划节点（plan.node）
  - 输入：bookId、topic、description、bookScale
  - 输出：genLevel、bookPlan
  - 处理：构建提示词 → LLM → 解析 JSON → 持久化 → 回传
- 大纲节点（outline.node）
  - 输入：bookId、topic、bookScale、description、bookPlan
  - 输出：outlineJson、progress（OUTLINE_DONE）
  - 处理：容错调用 → 解析 → 校验章节数 → 写入数据库
- 完整大纲节点（full-outline.node）
  - 输入：bookId、topic、bookScale、genLevel、bookPlan
  - 输出：outlineJson、progress（OUTLINE_DONE）
  - 处理：一步生成树形大纲 → 写入章/节/小节
- 章节节点（sections.node）
  - 输入：bookId、genLevel、outlineJson
  - 输出：更新 outlineJson（含 sections）、progress（SECTIONS_DONE）
  - 处理：逐章生成节大纲 → 写入数据库
- 小节节点（sections.node）
  - 输入：bookId、genLevel、outlineJson
  - 输出：更新 outlineJson（含 subsections）、progress（SUBSECTIONS_DONE）
  - 处理：逐节生成小节大纲 → 写入数据库
- 内容生成节点（content.node）
  - 输入：bookId、topic、bookScale、genLevel、outlineJson
  - 输出：progress（CONTENT_END）、章节内容与字数、触发音频生成
  - 处理：识别叶节点 → 串行/并行生成 → 安全防护 → 保存与推进
- 按章节生成节点（per-chapter.node）
  - 输入：bookId、topic、bookScale、genLevel、bookPlan
  - 输出：progress（CONTENT_END）、章节内容与结构
  - 处理：逐章生成 → 解析 JSON → 创建内部结构 → 写入数据库
- 序言节点（foreword.node）
  - 输入：bookId、topic
  - 输出：foreword、afterword、progress（FOREWORD_DONE/AFTERWORD_DONE）
  - 处理：构建提示词 → LLM → 保存

章节来源
- [plan.node.ts:145-201](file://server/src/modules/book-generator/nodes/plan.node.ts#L145-L201)
- [outline.node.ts:14-129](file://server/src/modules/book-generator/nodes/outline.node.ts#L14-L129)
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)
- [sections.node.ts:19-235](file://server/src/modules/book-generator/nodes/sections.node.ts#L19-L235)
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [per-chapter.node.ts:92-233](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L92-L233)
- [foreword.node.ts:14-48](file://server/src/modules/book-generator/nodes/foreword.node.ts#L14-L48)

### B. 执行顺序与策略对照
- 串行策略（sequential）：plan → outline → sections → subsections → content
- 一步大纲策略（one-step-outline）：plan → full-outline → content
- 逐章策略（per-chapter）：plan → outline → per-chapter

章节来源
- [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)

### C. 扩展新节点类型指南
- 步骤
  - 定义节点函数：接收 GraphState，返回部分状态更新。
  - 引入容错与日志：使用容错包装器与超时控制，打印关键信息。
  - 解析与持久化：解析 LLM 输出，写入数据库或更新 GraphState。
  - 进度管理：更新 progress 常量，确保只增不减。
  - 加入策略：在策略文件中注册节点并设置边连接。
- 示例路径
  - 新节点实现：参考 [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
  - 容错与超时：参考 [outline.node.ts:29-46](file://server/src/modules/book-generator/nodes/outline.node.ts#L29-L46)
  - 进度常量：参考 [utils.ts:15-24](file://server/src/modules/book-generator/utils.ts#L15-L24)

章节来源
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [outline.node.ts:14-129](file://server/src/modules/book-generator/nodes/outline.node.ts#L14-L129)
- [utils.ts:15-24](file://server/src/modules/book-generator/utils.ts#L15-L24)

### D. 配置节点参数
- 书籍规模与层级
  - bookScale：影响章节数与字数上限（参考 [book-type-config.ts:95-133](file://server/src/modules/book-generator/book-type-config.ts#L95-L133)）
  - genLevel：1/2/3 层级（参考 [graph.ts:40-44](file://server/src/modules/book-generator/graph.ts#L40-L44)）
- 进度与安全
  - 进度常量：OUTLINE_DONE、SECTIONS_DONE、SUBSECTIONS_DONE、CONTENT_START、CONTENT_END、FOREWORD_DONE、AFTERWORD_DONE（参考 [utils.ts:15-24](file://server/src/modules/book-generator/utils.ts#L15-L24)）
  - 字数上限：章节预算偏差检测、全书累计字数上限、全局绝对上限（参考 [content.node.ts:255-281](file://server/src/modules/book-generator/nodes/content.node.ts#L255-L281)、[book-type-config.ts:120-133](file://server/src/modules/book-generator/book-type-config.ts#L120-L133)）
- 并发与容错
  - 并行内容生成并发数：参考 [content.node.ts:336-338](file://server/src/modules/book-generator/nodes/content.node.ts#L336-L338)
  - 容错重试与超时：参考 [outline.node.ts:29-46](file://server/src/modules/book-generator/nodes/outline.node.ts#L29-L46)、[full-outline.node.ts:149-160](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L149-L160)、[per-chapter.node.ts:138-143](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L138-L143)

章节来源
- [book-type-config.ts:95-133](file://server/src/modules/book-generator/book-type-config.ts#L95-L133)
- [graph.ts:40-44](file://server/src/modules/book-generator/graph.ts#L40-L44)
- [utils.ts:15-24](file://server/src/modules/book-generator/utils.ts#L15-L24)
- [content.node.ts:255-281](file://server/src/modules/book-generator/nodes/content.node.ts#L255-L281)
- [outline.node.ts:29-46](file://server/src/modules/book-generator/nodes/outline.node.ts#L29-L46)
- [full-outline.node.ts:149-160](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L149-L160)
- [per-chapter.node.ts:138-143](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L138-L143)

### E. 调试节点执行过程
- 关键调试点
  - 节点入口：打印 bookId、genLevel、topic、进度等。
  - 容错日志：记录重试次数、最后一次错误、超时原因。
  - 数据落库验证：写入后二次查询确认内容已保存。
  - 并行任务：检查任务上下文、并发数与失败统计。
- API 辅助
  - 批量生成状态查询与取消接口，便于任务管理（参考 [book-generator.controller.ts:162-199](file://server/src/modules/book-generator/book-generator.controller.ts#L162-L199)）

章节来源
- [per-chapter.node.ts:183-198](file://server/src/modules/book-generator/nodes/per-chapter.node.ts#L183-L198)
- [content.node.ts:512-516](file://server/src/modules/book-generator/nodes/content.node.ts#L512-L516)
- [book-generator.controller.ts:162-199](file://server/src/modules/book-generator/book-generator.controller.ts#L162-L199)