本文引用的文件
顺序执行策略(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
图表来源
章节来源
章节来源
顺序策略采用“策略定义 + 图执行 + 节点实现 + 容错监控 + 存储与阶段”的分层设计,通过 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 : 返回完成
图表来源
适用场景
需要清晰的阶段边界与可审计路径。
classDiagram
class GenerationStrategy {
+name
+description
+generate(bookId, topic, bookScale, genLevel)
}
class SequentialStrategy {
+name = "sequential"
+description
+generate(...)
}
GenerationStrategy <|.. SequentialStrategy
图表来源
章节来源
runGraphWorkflow
根据最终状态更新书籍阶段与进度,必要时自动发布。
flowchart TD
Start(["开始"]) --> Init["初始化生成阶段与进度"]
Init --> Compile["编译 StateGraph"]
Compile --> Stream["流式执行节点"]
Stream --> Update["按节点输出更新状态"]
Update --> Done{"执行完成?"}
Done --> |否| Stream
Done --> |是| Final["更新最终阶段与进度"]
Final --> End(["结束"])
图表来源
章节来源
输出:更新书籍分析、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
图表来源
章节来源
输出:持久化大纲与章节记录,更新进度。
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["结束"]
图表来源
章节来源
输出:更新大纲 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 : 返回进度
图表来源
章节来源
输出:更新章节内容与字数,推进阶段,汇总失败列表。
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["结束"]
图表来源
章节来源
自动恢复:重新入队,支持最大恢复次数限制。
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
图表来源
章节来源
进度监控贯穿执行全程,保障可观测性。
graph LR
Strat["SequentialStrategy"] --> Exec["runGraphWorkflow"]
Exec --> Graph["StateGraph"]
Graph --> Nodes["各节点"]
Nodes --> Store["BookStore"]
Nodes --> FT["容错层"]
Store --> SM["StageManager"]
Exec --> Mon["进度监控"]
图表来源
章节来源
[本节为通用性能讨论,不直接分析具体文件]
章节来源
顺序执行策略通过严格的线性步骤与完善的容错监控,提供了高可预测性的生成体验。其优势在于清晰的阶段边界与稳定的资源占用,适合对质量与一致性要求高的场景。若需提升吞吐,可结合并行策略或其他优化手段,但需权衡复杂度与风险。
[本节为总结性内容,不直接分析具体文件]
章节来源
章节来源