# 顺序执行策略 **本文引用的文件** - [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)