# AI内容生成
**本文档引用的文件**
- [index.ts](file://server/src/modules/book-generator/index.ts)
- [graph.ts](file://server/src/modules/book-generator/graph.ts)
- [book-generator.service.ts](file://server/src/modules/book-generator/book-generator.service.ts)
- [book-generator.controller.ts](file://server/src/modules/book-generator/book-generator.controller.ts)
- [langgraph-controller.ts](file://server/src/modules/book-generator/langgraph-controller.ts)
- [selector.ts](file://server/src/modules/book-generator/strategies/selector.ts)
- [full-outline.node.ts](file://server/src/modules/book-generator/nodes/full-outline.node.ts)
- [content.node.ts](file://server/src/modules/book-generator/nodes/content.node.ts)
- [builder.ts](file://server/src/modules/book-generator/prompts/builder.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)
- [fault-tolerance.ts](file://server/src/modules/book-generator/fault-tolerance.ts)
- [utils.ts](file://server/src/modules/book-generator/utils.ts)
- [book-generator.types.ts](file://server/src/modules/book-generator/book-generator.types.ts)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本项目实现了基于LangGraph的AI内容生成功能,支持从主题输入到书籍大纲、章节内容的全流程自动化生成,并提供批量生成、异步处理、进度跟踪与错误恢复能力。系统采用策略模式选择不同的生成路径,结合容错层保障稳定性,通过阶段管理器确保生成流程的线性可控与可回溯。
## 项目结构
围绕“书籍生成”模块,主要文件分布如下:
- 策略与入口:index.ts、strategies/selector.ts
- LangGraph状态与工作流:graph.ts
- 节点实现:nodes/full-outline.node.ts、nodes/content.node.ts
- 提示词工程:prompts/builder.ts
- 存储与类型:book-generator.store.ts、book-generator.types.ts
- 编排与API:book-generator.service.ts、book-generator.controller.ts、langgraph-controller.ts
- 阶段管理与容错:stage-manager.ts、fault-tolerance.ts
- 工具与进度:utils.ts
```mermaid
graph TB
subgraph "策略与入口"
IDX["index.ts
主入口与策略门面"]
SEL["strategies/selector.ts
策略选择器"]
end
subgraph "LangGraph"
GR["graph.ts
状态定义与工作流"]
N1["nodes/full-outline.node.ts
一步大纲节点"]
N2["nodes/content.node.ts
内容生成节点"]
end
subgraph "提示词与存储"
PB["prompts/builder.ts
提示词构建器"]
ST["book-generator.store.ts
数据存储"]
TY["book-generator.types.ts
类型定义"]
end
subgraph "编排与API"
SVC["book-generator.service.ts
批量编排"]
CTRL["book-generator.controller.ts
批量API"]
LGC["langgraph-controller.ts
LangGraph API"]
SM["stage-manager.ts
阶段管理"]
FT["fault-tolerance.ts
容错层"]
UT["utils.ts
工具与进度"]
end
IDX --> SEL
IDX --> GR
GR --> N1
GR --> N2
N1 --> PB
N2 --> PB
N1 --> ST
N2 --> ST
SVC --> ST
CTRL --> SVC
LGC --> IDX
LGC --> ST
LGC --> SM
LGC --> FT
SVC --> FT
ST --> TY
```
**图表来源**
- [index.ts:74-91](file://server/src/modules/book-generator/index.ts#L74-L91)
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [builder.ts:220-248](file://server/src/modules/book-generator/prompts/builder.ts#L220-L248)
- [book-generator.store.ts:163-800](file://server/src/modules/book-generator/book-generator.store.ts#L163-L800)
- [book-generator.service.ts:45-549](file://server/src/modules/book-generator/book-generator.service.ts#L45-L549)
- [book-generator.controller.ts:24-199](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L199)
- [langgraph-controller.ts:388-546](file://server/src/modules/book-generator/langgraph-controller.ts#L388-L546)
- [stage-manager.ts:100-198](file://server/src/modules/book-generator/stage-manager.ts#L100-L198)
- [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)
**章节来源**
- [index.ts:1-119](file://server/src/modules/book-generator/index.ts#L1-L119)
- [graph.ts:1-83](file://server/src/modules/book-generator/graph.ts#L1-L83)
- [book-generator.service.ts:1-549](file://server/src/modules/book-generator/book-generator.service.ts#L1-L549)
- [book-generator.controller.ts:1-199](file://server/src/modules/book-generator/book-generator.controller.ts#L1-L199)
- [langgraph-controller.ts:1-800](file://server/src/modules/book-generator/langgraph-controller.ts#L1-L800)
- [selector.ts:1-81](file://server/src/modules/book-generator/strategies/selector.ts#L1-L81)
- [full-outline.node.ts:1-243](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L1-L243)
- [content.node.ts:1-546](file://server/src/modules/book-generator/nodes/content.node.ts#L1-L546)
- [builder.ts:1-275](file://server/src/modules/book-generator/prompts/builder.ts#L1-L275)
- [book-generator.store.ts:1-1073](file://server/src/modules/book-generator/book-generator.store.ts#L1-L1073)
- [stage-manager.ts:1-202](file://server/src/modules/book-generator/stage-manager.ts#L1-L202)
- [fault-tolerance.ts:1-387](file://server/src/modules/book-generator/fault-tolerance.ts#L1-L387)
- [utils.ts:1-24](file://server/src/modules/book-generator/utils.ts#L1-L24)
- [book-generator.types.ts:1-226](file://server/src/modules/book-generator/book-generator.types.ts#L1-L226)
## 核心组件
- LangGraphBookGenerator:策略门面,负责根据书籍规模与类型解析大纲层级并调度策略执行。
- GraphState:LangGraph状态注解,定义bookId、topic、bookScale、genLevel、progress、completedChapters、failedChapters等状态字段及reducer。
- BatchGenerationOrchestrator:批量生成编排器,串联内容生成、音频生成、音频合并、视频生成、视频合并五个阶段,支持取消与进度推送。
- GenerationStrategy/selector:策略体系,支持sequential、one-step-outline、per-chapter、deep-plan-parallel四种策略,可运行时切换。
- Nodes:full-outline.node与content.node分别负责一步生成完整大纲与并行生成章节内容。
- Prompts/builder:动态提示词构建器,结合正则与DeepPlan输出增强大纲生成质量。
- StageManager:线性阶段管理器,提供advanceChapter与regenerateChapter,保证状态机安全流转。
- FaultTolerance:容错层,提供AI重试、节点超时、进度监控与自动恢复。
- Store/Types:Prisma数据访问与类型定义,支撑书籍、章节、任务等实体。
**章节来源**
- [index.ts:74-91](file://server/src/modules/book-generator/index.ts#L74-L91)
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [book-generator.service.ts:45-143](file://server/src/modules/book-generator/book-generator.service.ts#L45-L143)
- [selector.ts:14-77](file://server/src/modules/book-generator/strategies/selector.ts#L14-L77)
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [builder.ts:71-212](file://server/src/modules/book-generator/prompts/builder.ts#L71-L212)
- [stage-manager.ts:100-198](file://server/src/modules/book-generator/stage-manager.ts#L100-L198)
- [fault-tolerance.ts:68-180](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L180)
- [book-generator.store.ts:163-800](file://server/src/modules/book-generator/book-generator.store.ts#L163-L800)
- [book-generator.types.ts:8-139](file://server/src/modules/book-generator/book-generator.types.ts#L8-L139)
## 架构总览
系统采用“策略门面 + LangGraph工作流 + 节点执行 + 容错与阶段管理”的分层架构。策略门面根据输入解析genLevel并选择具体策略;LangGraph定义状态与节点,节点通过提示词工程与LLM交互;容错层保障稳定性;阶段管理器确保生成流程可控;存储层持久化状态与结果。
```mermaid
sequenceDiagram
participant C as "客户端"
participant API as "LangGraph API(langgraph-controller)"
participant GEN as "LangGraphBookGenerator(index)"
participant STR as "策略选择器(selector)"
participant WF as "LangGraph(graph)"
participant N1 as "大纲节点(full-outline.node)"
participant N2 as "内容节点(content.node)"
participant ST as "存储(book-generator.store)"
participant FT as "容错(fault-tolerance)"
C->>API : "POST /api/book-generator/langgraph/books"
API->>GEN : "generate(bookId, topic, scale, level)"
GEN->>STR : "getCurrentStrategy()"
STR-->>GEN : "策略实例"
GEN->>WF : "执行工作流"
WF->>N1 : "生成完整大纲"
N1->>FT : "AI调用重试/超时"
N1->>ST : "写入大纲与章节记录"
WF->>N2 : "并行生成章节内容"
N2->>FT : "AI调用重试/超时"
N2->>ST : "写入章节内容与进度"
API-->>C : "返回生成状态/进度"
```
**图表来源**
- [langgraph-controller.ts:388-546](file://server/src/modules/book-generator/langgraph-controller.ts#L388-L546)
- [index.ts:74-91](file://server/src/modules/book-generator/index.ts#L74-L91)
- [selector.ts:61-62](file://server/src/modules/book-generator/strategies/selector.ts#L61-L62)
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [book-generator.store.ts:163-800](file://server/src/modules/book-generator/book-generator.store.ts#L163-L800)
- [fault-tolerance.ts:68-180](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L180)
## 详细组件分析
### LangGraph状态与节点
- 状态字段:包含bookId、userId、topic、bookScale、genLevel、description、bookPlan、currentChapter、completedChapters、finished、error、progress、failedChapters等,reducer确保进度只增不减、失败章节合并等语义正确。
- 节点职责:
- full-outline.node:一次性生成完整树形大纲(章→节→小节),解析并写入数据库。
- content.node:并行生成叶节点内容,支持工具调用、字数截断、配额消耗与音频触发。
```mermaid
classDiagram
class GraphState {
+string bookId
+string|number userId
+string topic
+string bookScale
+number genLevel
+string description
+string|undefined bookPlan
+number currentChapter
+number[] completedChapters
+boolean finished
+string|undefined error
+number progress
+number[] failedChapters
}
class FullOutlineNode {
+generateFullOutlineNode(state) Partial~state~
}
class ContentNode {
+writeChaptersNode(state) Partial~state~
+writeChaptersParallelNode(state) Partial~state~
}
GraphState <.. FullOutlineNode : "读取/写入"
GraphState <.. ContentNode : "读取/写入"
```
**图表来源**
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
**章节来源**
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
### 策略与生成流程
- 策略选择:selector.ts注册四种策略,可通过setCurrentStrategy运行时切换。
- 生成入口:index.ts的LangGraphBookGenerator.generate接收bookId、topic、bookScale与genLevel,委托当前策略执行。
- 生成流程:LangGraph工作流按节点顺序执行,节点间通过状态传递,最终完成内容生成。
```mermaid
flowchart TD
Start(["开始"]) --> Resolve["解析genLevel
resolveGenLevel()"]
Resolve --> Select["选择策略
getCurrentStrategy()"]
Select --> Exec["执行策略.generate()"]
Exec --> Outline["大纲节点
full-outline.node"]
Outline --> Content["内容节点
content.node(并行)"]
Content --> Done(["完成"])
```
**图表来源**
- [index.ts:74-91](file://server/src/modules/book-generator/index.ts#L74-L91)
- [selector.ts:61-62](file://server/src/modules/book-generator/strategies/selector.ts#L61-L62)
- [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)
**章节来源**
- [index.ts:74-91](file://server/src/modules/book-generator/index.ts#L74-L91)
- [selector.ts:14-77](file://server/src/modules/book-generator/strategies/selector.ts#L14-L77)
### 提示词工程与多轮对话
- 动态需求分析:builder.ts的analyzeRequirements从用户输入中抽取书籍类型、目标读者、内容深度、行业与特殊需求,支持正则与DeepPlan高置信度覆盖。
- 动态提示词:buildDynamicPrompt根据需求组合系统提示词,buildOutlineMessages等消息构建函数为各节点提供上下文。
- 多轮与工具:content.node支持callLLMWithTools与降级callLLMWithMessages,结合工具调用与内容清洗,提升质量与稳定性。
**章节来源**
- [builder.ts:71-212](file://server/src/modules/book-generator/prompts/builder.ts#L71-L212)
- [builder.ts:220-248](file://server/src/modules/book-generator/prompts/builder.ts#L220-L248)
- [content.node.ts:240-249](file://server/src/modules/book-generator/nodes/content.node.ts#L240-L249)
### 批量生成与异步处理
- 批量编排:BatchGenerationOrchestrator按顺序执行generate_content、generate_audio、merge_audio、generate_video、merge_video五个阶段,轮询检查进度并支持取消。
- API接口:book-generator.controller提供批量生成、取消与状态查询;langgraph-controller提供书籍创建与生成、进度查询等。
- 队列与降级:langgraph-controller在创建书籍时尝试加入队列,若失败则降级为同步执行,确保核心业务可用。
```mermaid
sequenceDiagram
participant Client as "客户端"
participant Ctrl as "book-generator.controller"
participant Orchestrator as "BatchGenerationOrchestrator"
participant Store as "book-generator.store"
Client->>Ctrl : "POST /api/book-generator/books/ : id/batch-generate"
Ctrl->>Orchestrator : "createBatchGenerationTask()"
Orchestrator->>Orchestrator : "execute() 阶段循环"
Orchestrator->>Store : "轮询检查章节状态/进度"
Orchestrator-->>Ctrl : "推送进度/完成"
Ctrl-->>Client : "任务启动/状态"
```
**图表来源**
- [book-generator.controller.ts:24-119](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L119)
- [book-generator.service.ts:45-143](file://server/src/modules/book-generator/book-generator.service.ts#L45-L143)
- [book-generator.store.ts:677-683](file://server/src/modules/book-generator/book-generator.store.ts#L677-L683)
**章节来源**
- [book-generator.controller.ts:24-199](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L199)
- [book-generator.service.ts:45-549](file://server/src/modules/book-generator/book-generator.service.ts#L45-L549)
### 审核与质量控制
- 内容清洗:content.node对LLM输出进行清洗,移除思考标签与冗余换行,必要时截断至预算字数的2.5倍。
- 字数上限:累计字数达到规模上限(±20%浮动)或全书上限时自动停止生成并中断。
- 配额与安全:订阅配额检查与消耗,失败章节自动回退到上游阶段并清理下游资源。
**章节来源**
- [content.node.ts:255-281](file://server/src/modules/book-generator/nodes/content.node.ts#L255-L281)
- [content.node.ts:283-289](file://server/src/modules/book-generator/nodes/content.node.ts#L283-L289)
- [stage-manager.ts:75-92](file://server/src/modules/book-generator/stage-manager.ts#L75-L92)
### API接口与使用示例
- 书籍创建与生成
- POST /api/book-generator/langgraph/books:创建书籍并开始生成,支持队列与同步两种模式。
- GET /api/book-generator/langgraph/books/:id/progress:查询生成进度。
- 批量生成
- POST /api/book-generator/books/:id/batch-generate:一键生成(内容→音频→合并→视频→合并)。
- POST /api/book-generator/books/:id/batch-generate/cancel:取消批量任务。
- GET /api/book-generator/books/:id/batch-generate/status:查询任务状态。
- 其他
- GET /api/book-generator/langgraph/estimate:书籍规模预估。
- GET /api/book-generator/langgraph/book-types:书籍类型配置。
- POST /api/book-generator/langgraph/detect-book-type:AI自动检测书籍类型。
- POST /api/book-generator/langgraph/smart-recommend:智能推荐难度/人群/风格/领域。
**章节来源**
- [langgraph-controller.ts:388-714](file://server/src/modules/book-generator/langgraph-controller.ts#L388-L714)
- [book-generator.controller.ts:24-199](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L199)
## 依赖关系分析
- 组件耦合
- index.ts与selector.ts:策略门面依赖策略选择器。
- graph.ts与nodes:节点依赖LangGraph状态注解。
- nodes与builder:节点依赖提示词构建器。
- nodes与store:节点依赖存储层写入与查询。
- service与controller:编排器依赖控制器暴露的API。
- fault-tolerance与nodes/service:容错层贯穿AI调用与节点执行。
- 外部依赖
- LLM服务:通过callLLMWithMessages/Tools调用。
- 队列服务:用于任务排队与降级同步执行。
- WebSocket:用于批量生成进度推送。
```mermaid
graph LR
IDX["index.ts"] --> SEL["strategies/selector.ts"]
IDX --> GR["graph.ts"]
GR --> N1["nodes/full-outline.node.ts"]
GR --> N2["nodes/content.node.ts"]
N1 --> PB["prompts/builder.ts"]
N2 --> PB
N1 --> ST["book-generator.store.ts"]
N2 --> ST
SVC["book-generator.service.ts"] --> ST
CTRL["book-generator.controller.ts"] --> SVC
LGC["langgraph-controller.ts"] --> IDX
LGC --> ST
LGC --> FT["fault-tolerance.ts"]
SVC --> FT
```
**图表来源**
- [index.ts:18-91](file://server/src/modules/book-generator/index.ts#L18-L91)
- [selector.ts:14-77](file://server/src/modules/book-generator/strategies/selector.ts#L14-L77)
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [builder.ts:220-248](file://server/src/modules/book-generator/prompts/builder.ts#L220-L248)
- [book-generator.store.ts:163-800](file://server/src/modules/book-generator/book-generator.store.ts#L163-L800)
- [book-generator.service.ts:45-549](file://server/src/modules/book-generator/book-generator.service.ts#L45-L549)
- [book-generator.controller.ts:24-199](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L199)
- [langgraph-controller.ts:388-546](file://server/src/modules/book-generator/langgraph-controller.ts#L388-L546)
- [fault-tolerance.ts:68-180](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L180)
**章节来源**
- [index.ts:18-91](file://server/src/modules/book-generator/index.ts#L18-L91)
- [selector.ts:14-77](file://server/src/modules/book-generator/strategies/selector.ts#L14-L77)
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218)
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [builder.ts:220-248](file://server/src/modules/book-generator/prompts/builder.ts#L220-L248)
- [book-generator.store.ts:163-800](file://server/src/modules/book-generator/book-generator.store.ts#L163-L800)
- [book-generator.service.ts:45-549](file://server/src/modules/book-generator/book-generator.service.ts#L45-L549)
- [book-generator.controller.ts:24-199](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L199)
- [langgraph-controller.ts:388-546](file://server/src/modules/book-generator/langgraph-controller.ts#L388-L546)
- [fault-tolerance.ts:68-180](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L180)
## 性能考量
- 并行内容生成:content.node的并行池(默认8路)显著缩短长篇书籍内容生成时间,需结合队列与资源限制避免过载。
- 节点超时与重试:fault-tolerance为各节点设置超时阈值与AI调用重试,平衡稳定性与响应速度。
- 进度与轮询:批量编排通过轮询检查章节状态,建议前端采用WebSocket或长轮询降低延迟。
- 存储与索引:章节树查询与状态更新频繁,建议在bookId、level、number等字段建立合适索引。
## 故障排查指南
- AI调用失败:检查fault-tolerance的重试配置与通知,确认模型可用性与限流。
- 节点超时:根据FAULT_TOLERANCE_CONFIG调整对应节点超时时间,或检查LLM响应质量。
- 进度停滞:启用startProgressMonitor,关注空闲时间与自动恢复尝试次数。
- 状态回退:使用regenerateChapter将章节回退到上游阶段,清理下游资源后重试。
- 取消任务:通过批量API的cancel接口设置取消标志,编排器会在检查点退出。
**章节来源**
- [fault-tolerance.ts:68-323](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L323)
- [stage-manager.ts:158-198](file://server/src/modules/book-generator/stage-manager.ts#L158-L198)
- [book-generator.controller.ts:125-156](file://server/src/modules/book-generator/book-generator.controller.ts#L125-L156)
## 结论
本系统通过策略门面、LangGraph工作流与节点化实现,结合提示词工程、并行生成、容错与阶段管理,形成了稳定高效的AI内容生成流水线。其API设计支持从交互式创建到批量生成的多种场景,具备良好的扩展性与可维护性。
## 附录
- 关键进度常量:OUTLINE_DONE、CONTENT_START/END、FOREWORD_DONE、AFTERWORD_DONE,用于编排器与节点的进度推进。
- 类型定义:涵盖书籍、章节、任务、请求/响应与生成配置,确保前后端一致性。
**章节来源**
- [utils.ts:15-23](file://server/src/modules/book-generator/utils.ts#L15-L23)
- [book-generator.types.ts:8-139](file://server/src/modules/book-generator/book-generator.types.ts#L8-L139)