# 策略管理器 **本文引用的文件** - [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)