策略管理器.md 23 KB

策略管理器

本文引用的文件

  • base.ts
  • one-step-outline.strategy.ts
  • per-chapter.strategy.ts
  • sequential.strategy.ts
  • selector.ts
  • types.ts
  • plan.node.ts
  • full-outline.node.ts
  • outline.node.ts
  • content.node.ts
  • per-chapter.node.ts
  • deep-plan-parallel.strategy.ts
  • fault-tolerance.ts
  • strategy-compare.ts

目录

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

简介

本文件系统性阐述“策略管理器”在书籍生成中的应用,围绕策略模式设计与实现,详解base策略基类的共享执行框架、三大具体策略(顺序策略、一步大纲策略、逐章策略)的差异与适用场景,以及策略选择器的工作原理、切换机制与性能优化。同时,文档覆盖策略配置参数、执行条件判断、错误恢复策略,并提供可操作的实践路径,帮助开发者实现自定义策略、配置策略优先级、监控执行效果。

项目结构

策略管理器位于书籍生成模块的策略目录中,配合节点层(nodes)与容错层(fault-tolerance)共同构成完整的生成流水线。策略层通过统一接口与共享执行框架,屏蔽不同工作流的差异;节点层负责各阶段的具体AI调用与数据持久化;容错层提供重试、超时、进度监控与自动恢复能力。

graph TB
subgraph "策略层"
SBase["base.ts<br/>共享执行框架"]
SSeq["sequential.strategy.ts<br/>顺序策略"]
SOne["one-step-outline.strategy.ts<br/>一步大纲策略"]
SPer["per-chapter.strategy.ts<br/>逐章策略"]
SDeep["deep-plan-parallel.strategy.ts<br/>推荐策略"]
SSelector["selector.ts<br/>策略选择器"]
STypes["types.ts<br/>接口与类型"]
end
subgraph "节点层"
NPlan["plan.node.ts<br/>规划节点"]
NFull["full-outline.node.ts<br/>一步大纲节点"]
NOutline["outline.node.ts<br/>大纲节点"]
NContent["content.node.ts<br/>内容节点"]
NPerChapter["per-chapter.node.ts<br/>逐章节点"]
end
subgraph "容错层"
FT["fault-tolerance.ts<br/>重试/超时/监控/恢复"]
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
  • sequential.strategy.ts:1-60
  • one-step-outline.strategy.ts:1-56
  • per-chapter.strategy.ts:1-56
  • deep-plan-parallel.strategy.ts:1-74
  • selector.ts:1-81
  • types.ts:1-29
  • plan.node.ts:1-201
  • full-outline.node.ts:1-243
  • outline.node.ts:1-129
  • content.node.ts:1-546
  • per-chapter.node.ts:1-324
  • fault-tolerance.ts:1-388

章节来源

  • base.ts:1-73
  • selector.ts:1-81
  • types.ts:1-29

核心组件

  • 策略接口与类型:定义策略名称、描述与generate方法签名,确保所有策略具备一致的对外行为契约。
  • 基类执行框架:封装runGraphWorkflow,统一处理StateGraph构建、编译、流式执行、进度更新、最终态处理与失败回滚。
  • 三大策略实现:
    • 顺序策略:串行执行规划→大纲→节→小节→内容,适合稳定可控的生成流程。
    • 一步大纲策略:一次性生成完整树形大纲,随后并行写内容,适合快速产出与高吞吐。
    • 逐章策略:先生成章大纲,再对每章独立生成内部结构与内容,适合强质量与可扩展性。
  • 策略选择器:集中注册与切换策略,支持运行时切换与默认策略配置。
  • 容错层:为节点级AI调用提供重试、超时、进度监控与自动恢复,保障生成稳定性。

章节来源

  • types.ts:8-22
  • base.ts:26-72
  • sequential.strategy.ts:21-59
  • one-step-outline.strategy.ts:21-55
  • per-chapter.strategy.ts:21-55
  • selector.ts:14-77
  • fault-tolerance.ts:16-50

架构总览

策略管理器采用“策略接口 + 基类执行框架 + 具体策略实现 + 选择器”的分层设计。所有策略共享同一套图执行与状态管理逻辑,仅在节点组合与初始状态上有所差异。节点层负责与LLM交互、解析与持久化,容错层贯穿所有节点,提供稳健的执行保障。

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
  • base.ts:26-72
  • fault-tolerance.ts:67-122

详细组件分析

基类执行框架(base.ts)

  • 设计理念
    • 统一图执行:所有策略共享runGraphWorkflow,避免重复编译与流式执行逻辑。
    • 进度与最终态:启动进度监控,流式消费节点输出,最终根据书籍状态更新进度与阶段。
    • 错误处理:捕获异常,标记失败阶段与错误信息,保证状态一致性。
  • 关键流程
    • 初始化:设置生成阶段与进度为0,启动进度监控。
    • 执行:编译StateGraph,开启流式迭代,记录非进度步名称。
    • 收尾:查询最终书籍状态,更新进度至100,必要时自动发布专辑;若失败则标记失败阶段与错误。
  • 性能与可靠性
    • 通过流式执行降低内存峰值,及时反馈中间状态。
    • 与容错层结合,提升整体稳定性。

章节来源

  • base.ts:26-72

顺序策略(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
  • outline.node.ts:14-129
  • content.node.ts:102-332

一步大纲策略(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
  • full-outline.node.ts:135-218
  • content.node.ts:444-545

逐章策略(per-chapter.strategy.ts)

  • 工作流
    • plan_book → generate_outline → per_chapter(每章独立生成内部结构+内容)
  • 特点
    • 先生成章大纲,再对每章独立生成内部结构与内容,章节间可并行。
    • 适合对章节质量与独立性要求较高的场景。
  • 与节点的协作
    • 依赖outline.node.ts生成章大纲,per-chapter.node.ts负责逐章生成与内部结构创建。
  • 并发与一致性
    • 逐章串行处理以避免写入竞争,同时在策略层面体现“章节级并行”的思想。

章节来源

  • per-chapter.strategy.ts:13-55
  • outline.node.ts:14-129
  • per-chapter.node.ts:92-233

策略选择器(selector.ts)

  • 注册与默认策略
    • 统一注册所有策略实例,默认策略为“推荐策略”,可通过setCurrentStrategy动态切换。
  • 运行时切换
    • setCurrentStrategy即时生效,适合A/B对比与紧急切换。
  • 查询接口
    • getCurrentStrategy/getAllStrategies/getStrategy提供灵活访问策略的能力。
  • 与策略类型
    • 通过StrategyName与GenerationStrategy约束策略实现,确保类型安全。

章节来源

  • selector.ts:14-77
  • types.ts:5-28

推荐策略(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

容错层(fault-tolerance.ts)

  • 重试机制
    • callLLMWithRetry:指数退避重试,记录失败并通知用户。
  • 节点超时
    • executeNodeWithTimeout:超时后通知并触发恢复策略。
  • 进度监控
    • startProgressMonitor:长时间无进度更新时发出警告与自动恢复尝试。
  • 自动恢复
    • attemptAutoRecovery:在限定次数内自动重启生成流程。

章节来源

  • fault-tolerance.ts:67-122
  • fault-tolerance.ts:130-179
  • fault-tolerance.ts:187-260
  • fault-tolerance.ts:267-324

节点层关键节点

  • 规划节点(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
  • full-outline.node.ts:135-218
  • outline.node.ts:14-129
  • content.node.ts:102-332
  • content.node.ts:444-545
  • per-chapter.node.ts:92-233

依赖分析

  • 策略层依赖
    • 所有策略依赖types.ts定义的接口与名称枚举,确保策略实现的一致性。
    • 基类执行框架被所有策略复用,形成高内聚低耦合的结构。
  • 节点层依赖
    • 各策略通过StateGraph组合不同节点,节点间通过GraphState传递数据。
  • 容错层依赖

    • 节点层广泛使用callLLMWithRetry与executeNodeWithTimeout,容错配置集中管理。

      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
  • sequential.strategy.ts:21-23
  • one-step-outline.strategy.ts:21-23
  • per-chapter.strategy.ts:21-23
  • deep-plan-parallel.strategy.ts:32-34
  • selector.ts:61-77

性能考量

  • 并发与吞吐
    • 一步大纲策略与推荐策略通过并行内容生成显著提升吞吐,适合大规模内容生成。
    • 并发度受AsyncPool限制,避免资源争用与超载。
  • 调用次数与成本
    • 顺序策略调用次数最多,成本与耗时相对更高;一步大纲策略与逐章策略在不同场景下平衡成本与质量。
  • 节点超时与重试
    • 合理设置节点超时阈值与重试次数,避免单点阻塞影响整体进度。
  • 进度监控与恢复
    • 长时间无进度时自动恢复,减少人工干预与资源浪费。

章节来源

  • content.node.ts:336-338
  • fault-tolerance.ts:16-50
  • fault-tolerance.ts:187-260

故障排查指南

  • 常见问题定位
    • 大纲生成失败:检查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
  • full-outline.node.ts:210-217
  • content.node.ts:308-317
  • per-chapter.node.ts:206-232
  • fault-tolerance.ts:67-122
  • fault-tolerance.ts:130-179
  • base.ts:62-71

结论

策略管理器通过统一的接口与执行框架,将复杂的书籍生成流程抽象为可插拔的策略集合。顺序策略强调可控性,一步大纲策略强调吞吐,逐章策略强调质量与扩展性。配合容错层的重试、超时与自动恢复,系统在复杂业务场景下仍能保持稳定与高效。推荐在生产环境中优先采用推荐策略,并根据业务目标灵活切换与优化。

附录

策略选择与切换流程

flowchart TD
Start(["开始"]) --> GetSel["获取策略选择器"]
GetSel --> GetCurrent["获取当前策略名称"]
GetCurrent --> Switch{"是否需要切换?"}
Switch --> |否| UseCurrent["使用当前策略"]
Switch --> |是| SetNew["setCurrentStrategy(新策略)"]
SetNew --> UseCurrent
UseCurrent --> Run["调用策略.generate(...)"]
Run --> End(["结束"])

图表来源

  • selector.ts:42-56
  • base.ts:26-72

策略对比测试(策略比较)

  • 用途:在同一小书中对比顺序、一步大纲、逐章三种策略的执行耗时与结果。
  • 使用方式:通过setCurrentStrategy切换策略,调用langGraphGenerator.generate执行生成。
  • 输出:统计各策略耗时、章节数量、完成情况与规划信息。

章节来源

  • strategy-compare.ts:12-82

自定义策略实现步骤

  • 实现GenerationStrategy接口:定义name、description与generate方法。
  • 构建StateGraph:在generate中定义节点与边,设置入口与终止。
  • 初始化State:准备初始状态(bookId、topic、bookScale、genLevel等)。
  • 复用基类执行:调用runGraphWorkflow,交由基类统一处理执行与收尾。
  • 注册与切换:在selector.ts中注册实例,通过setCurrentStrategy启用。

章节来源

  • types.ts:8-22
  • sequential.strategy.ts:33-55
  • base.ts:26-72
  • selector.ts:14-77

策略配置参数与执行条件

  • 配置参数
    • 当前激活策略:通过DEFAULT_STRATEGY与setCurrentStrategy控制。
    • 大纲层级:由规划节点决定,也可由用户显式指定(auto/1/2/3)。
    • 书籍规模:影响章节数、字数上限与并发策略。
  • 执行条件
    • 书籍存在且大纲存在:content.node.ts会检查大纲与章节完整性。
    • 额度与字数:生成过程中持续检查用户配额与累计字数上限。
    • 节点超时与重试:容错层根据配置自动处理失败与恢复。

章节来源

  • selector.ts:23-33
  • plan.node.ts:145-199
  • content.node.ts:162-206
  • fault-tolerance.ts:16-50

监控策略执行效果

  • 进度监控:通过startProgressMonitor与bookStore更新进度,结合WebSocket推送实时状态。
  • 失败追踪:记录失败节点、错误信息与自动恢复尝试次数,便于诊断。
  • 结果验证:策略对比测试脚本可输出章节数量、完成情况与规划信息,辅助评估策略优劣。

章节来源

  • base.ts:33-71
  • fault-tolerance.ts:187-260
  • strategy-compare.ts:54-64