顺序执行策略.md 20 KB

顺序执行策略

本文引用的文件

  • sequential.strategy.ts
  • base.ts
  • types.ts
  • graph.ts
  • plan.node.ts
  • outline.node.ts
  • sections.node.ts
  • content.node.ts
  • fault-tolerance.ts
  • utils.ts
  • book-generator.store.ts
  • stage-manager.ts

目录

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

简介

顺序执行策略(SequentialStrategy)是书籍生成流水线中的串行执行方案,严格遵循“规划 → 大纲 → 节 → 小节 → 内容”的线性步骤,确保各环节独立完成后再进入下一环节。该策略强调可预测性、可控性和可审计性,适合对生成质量与一致性要求较高、对吞吐量敏感度较低的场景。

项目结构

顺序策略位于书籍生成模块的策略层,配合通用图执行框架、节点实现、容错与进度监控、状态机与持久化等基础设施共同构成完整的执行闭环。

graph TB
subgraph "策略层"
S1["SequentialStrategy<br/>顺序策略"]
ST["策略接口与类型"]
end
subgraph "图执行与状态"
G["GraphState<br/>状态注解"]
B["runGraphWorkflow<br/>通用执行器"]
end
subgraph "节点实现"
N1["planBookNode<br/>规划"]
N2["generateOutlineNode<br/>大纲"]
N3["generateSectionsNode<br/>节"]
N4["generateSubsectionsNode<br/>小节"]
N5["writeChaptersNode<br/>内容"]
end
subgraph "容错与监控"
FT["容错配置与重试"]
PM["进度监控"]
end
subgraph "持久化与状态"
BS["BookStore<br/>存储"]
SM["StageManager<br/>阶段管理"]
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
  • base.ts:26-72
  • graph.ts:23-82
  • plan.node.ts:145-200
  • outline.node.ts:14-128
  • sections.node.ts:19-234
  • content.node.ts:102-332
  • fault-tolerance.ts:17-51
  • book-generator.store.ts:401-428
  • stage-manager.ts:158-198

章节来源

  • sequential.strategy.ts:1-60
  • base.ts:1-73
  • graph.ts:1-83

核心组件

  • 策略接口与类型
    • 定义统一的策略接口与策略名称枚举,保证多策略可插拔与一致的调用契约。
  • 顺序策略实现
    • 通过 LangGraph 定义线性节点链路,初始化状态并交由通用执行器驱动。
  • 图状态与执行器
    • 以状态注解定义全局状态,统一的图执行器负责编译、流式迭代与收尾。
  • 节点实现
    • 各阶段节点分别承担规划、大纲、节、小节、内容生成,具备容错包装与进度推进。
  • 容错与监控
    • AI 调用重试、节点超时、进度监控、自动恢复,保障长流程稳定性。
  • 存储与阶段管理
    • 通过存储层持久化大纲与章节内容,阶段管理器确保线性状态迁移与资源清理。

章节来源

  • types.ts:5-29
  • sequential.strategy.ts:21-58
  • graph.ts:23-82
  • base.ts:26-72
  • fault-tolerance.ts:17-51
  • book-generator.store.ts:401-428
  • stage-manager.ts:158-198

架构总览

顺序策略采用“策略定义 + 图执行 + 节点实现 + 容错监控 + 存储与阶段”的分层设计,通过 LangGraph 的状态机驱动,确保步骤间依赖清晰、数据可追踪、错误可恢复。

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
  • base.ts:26-72
  • graph.ts:36-43
  • book-generator.store.ts:401-428

详细组件分析

顺序策略(SequentialStrategy)

  • 设计理念
    • 严格的串行步骤:规划 → 大纲 → 节 → 小节 → 内容,避免跨阶段耦合。
    • 每个节点独立调用 LLM,便于定位问题与重试。
  • 关键行为
    • 构建 StateGraph 并设置入口与边,形成单向链路。
    • 初始化 GraphState,包含 bookId、topic、bookScale、genLevel、进度与完成标记等。
    • 交由 runGraphWorkflow 统一编译与流式执行。
  • 适用场景

    • 对生成质量与一致性要求高、可接受较长生成时延。
    • 需要清晰的阶段边界与可审计路径。

      classDiagram
      class GenerationStrategy {
      +name
      +description
      +generate(bookId, topic, bookScale, genLevel)
      }
      class SequentialStrategy {
      +name = "sequential"
      +description
      +generate(...)
      }
      GenerationStrategy <|.. SequentialStrategy
      

图表来源

  • types.ts:8-22
  • sequential.strategy.ts:21-23

章节来源

  • sequential.strategy.ts:21-58
  • types.ts:5-29

图状态与执行器(GraphState 与 runGraphWorkflow)

  • GraphState
    • 定义书籍与章节级别的状态字段,含进度、完成章节、错误、层级等。
    • 使用 reducer 确保进度只增不减、失败章节合并等语义。
  • runGraphWorkflow

    • 统一的图执行入口,负责初始化生成阶段、启动进度监控、编译与流式迭代、收尾更新状态。
    • 根据最终状态更新书籍阶段与进度,必要时自动发布。

      flowchart TD
      Start(["开始"]) --> Init["初始化生成阶段与进度"]
      Init --> Compile["编译 StateGraph"]
      Compile --> Stream["流式执行节点"]
      Stream --> Update["按节点输出更新状态"]
      Update --> Done{"执行完成?"}
      Done --> |否| Stream
      Done --> |是| Final["更新最终阶段与进度"]
      Final --> End(["结束"])
      

图表来源

  • base.ts:26-72
  • graph.ts:12-21

章节来源

  • graph.ts:23-82
  • base.ts:26-72

节点实现与数据传递

规划节点(planBookNode)

  • 输入:bookId、topic、bookScale、genLevel(可能来自用户选择或解析)。
  • 处理:构建提示词,调用 LLM,解析 JSON,决定最终大纲层级。
  • 输出:更新书籍分析、genLevel、进度;将规划结果写入状态以便后续节点使用。

    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
  • book-generator.store.ts:401-428

章节来源

  • plan.node.ts:145-200

大纲节点(generateOutlineNode)

  • 输入:topic、bookScale、description、bookPlan(来自规划节点)。
  • 处理:容错包装的 LLM 调用,解析大纲,校验章节数范围,补足或截断。
  • 输出:持久化大纲与章节记录,更新进度。

    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
  • fault-tolerance.ts:131-180

章节来源

  • outline.node.ts:14-128
  • fault-tolerance.ts:17-51

节与小节节点(generateSectionsNode / generateSubsectionsNode)

  • 输入:上层输出的大纲结构。
  • 处理:逐章/逐节生成下一级大纲,写入数据库;genLevel 控制是否跳过。
  • 输出:更新大纲 JSON,推进进度。

    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

章节来源

  • sections.node.ts:19-234

内容节点(writeChaptersNode)

  • 输入:所有叶节点(无子节点)。
  • 处理:遍历叶节点,按短文或长篇构建消息,调用 LLM 生成内容;额度与字数上限控制;触发音频生成。
  • 输出:更新章节内容与字数,推进阶段,汇总失败列表。

    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
  • stage-manager.ts:158-198

章节来源

  • content.node.ts:102-332
  • stage-manager.ts:158-198

容错与进度监控

  • AI 调用重试:指数退避、最大重试次数、用户通知。
  • 节点超时:按节点设定超时阈值,超时后通知并触发恢复。
  • 进度监控:定时检查进度,长时间无进展发出警告与自动恢复尝试。
  • 自动恢复:重新入队,支持最大恢复次数限制。

    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
  • fault-tolerance.ts:131-180
  • fault-tolerance.ts:188-261

章节来源

  • fault-tolerance.ts:17-51
  • fault-tolerance.ts:68-123
  • fault-tolerance.ts:131-180
  • fault-tolerance.ts:188-261

依赖关系分析

  • 策略层依赖图执行框架与通用执行器,确保一致的控制流。
  • 节点层依赖存储层进行持久化,依赖 LLM 服务与容错包装。
  • 阶段管理器确保状态迁移合法与资源清理。
  • 进度监控贯穿执行全程,保障可观测性。

    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
  • base.ts:26-72
  • book-generator.store.ts:401-428
  • stage-manager.ts:158-198
  • fault-tolerance.ts:188-261

章节来源

  • sequential.strategy.ts:21-58
  • base.ts:26-72
  • book-generator.store.ts:401-428
  • stage-manager.ts:158-198
  • fault-tolerance.ts:188-261

性能考量

  • 串行特性
    • 优点:步骤清晰、资源占用稳定、易于调试与重试;适合对质量优先的场景。
    • 成本:整体吞吐较低,端到端时延较长;对网络与 LLM 调用次数敏感。
  • 容错与监控
    • 重试与超时减少单点失败影响;进度监控避免长时间卡死。
  • 存储与阶段
    • 每步持久化,利于断点续跑与审计;但频繁写入带来一定 IO 压力。

[本节为通用性能讨论,不直接分析具体文件]

故障排查指南

  • 常见问题定位
    • 大纲生成失败:检查提示词构建、LLM 返回解析与章节数量校验逻辑。
    • 内容生成失败:检查额度与字数上限、工具调用降级、音频生成触发。
    • 节点超时:查看容错层超时配置与通知日志。
  • 调试步骤
    • 启用进度监控,观察长时间无响应告警。
    • 检查存储层更新与阶段推进,确认最终状态。
    • 回看容错层重试与失败日志,定位失败节点。
  • 恢复策略
    • 自动恢复:满足条件时重新入队,避免人工干预。
    • 人工干预:根据失败节点与错误信息,针对性重试或调整参数。

章节来源

  • outline.node.ts:115-127
  • content.node.ts:308-316
  • fault-tolerance.ts:131-180
  • fault-tolerance.ts:268-323
  • base.ts:62-71

结论

顺序执行策略通过严格的线性步骤与完善的容错监控,提供了高可预测性的生成体验。其优势在于清晰的阶段边界与稳定的资源占用,适合对质量与一致性要求高的场景。若需提升吞吐,可结合并行策略或其他优化手段,但需权衡复杂度与风险。

[本节为总结性内容,不直接分析具体文件]

附录

配置参数说明

  • 容错配置(节选)
    • AI 调用重试:最大重试次数、初始/最大延迟、指数退避倍数。
    • 节点超时:各节点超时阈值(分钟级)。
    • 进度监控:最大空闲时间、检查间隔。
    • 自动恢复:最大恢复尝试次数、恢复延迟。
  • 进度常量
    • 大纲、节、小节、内容阶段的进度区间与起止值。

章节来源

  • fault-tolerance.ts:17-51
  • utils.ts:15-23

实际应用场景与使用示例

  • 场景
    • 教程/教材类书籍:需要稳定的三层大纲与高质量内容。
    • 小说/文学类:短文场景可直接生成章节内容。
  • 示例
    • 调用顺序策略的 generate 方法,传入书籍主题、规模与层级,等待流式执行完成并查看最终阶段与进度。

章节来源

  • sequential.strategy.ts:25-57
  • base.ts:26-72