本文引用的文件
本文件面向“大纲生成策略”的技术文档,聚焦两类策略:
文档将从输入参数处理、输出格式规范、质量控制机制入手,深入解析两者的实现原理、数据流、并行与进度控制,并给出参数调优、错误恢复与质量评估建议及使用案例与最佳实践。
围绕“大纲生成策略”,相关代码主要位于 server/src/modules/book-generator/strategies 与 nodes 目录,配合 LangGraph 状态机与容错层,形成可扩展、可观测、可恢复的生成流水线。
graph TB
subgraph "策略层"
S1["one-step-outline.strategy.ts"]
S2["per-chapter.strategy.ts"]
ST["types.ts"]
SEL["selector.ts"]
SB["base.ts"]
end
subgraph "节点层"
N1["plan.node.ts"]
N2["full-outline.node.ts"]
N3["outline.node.ts"]
N4["per-chapter.node.ts"]
N5["content.node.ts"]
end
subgraph "基础设施"
G["graph.ts"]
FT["fault-tolerance.ts"]
CFG["book-type-config.ts"]
U["utils.ts"]
end
S1 --> N1
S1 --> N2
S1 --> N5
S2 --> N1
S2 --> N3
S2 --> N4
S1 --> SB
S2 --> SB
SB --> G
SB --> FT
N1 --> CFG
N2 --> CFG
N3 --> CFG
N4 --> CFG
N5 --> CFG
N5 --> U
图示来源
章节来源
章节来源
两策略共享同一执行框架:先规划(planBookNode),再生成大纲,最后生成内容;差异在于大纲生成与内容生成阶段的并行化程度与并发控制。
sequenceDiagram
participant C as "控制器/调用方"
participant STR as "OneStepOutlineStrategy/PerChapterStrategy"
participant BASE as "runGraphWorkflow"
participant G as "LangGraph"
participant N1 as "planBookNode"
participant N2 as "大纲/内容节点"
participant DB as "bookStore/数据库"
C->>STR : 调用 generate(bookId, topic, bookScale, genLevel)
STR->>BASE : 初始化状态并编译工作流
BASE->>G : graph.stream(initialState)
G->>N1 : 执行规划
N1-->>G : 返回规划结果/进度
G->>N2 : 执行大纲/内容生成
N2->>DB : 写入大纲/内容
DB-->>N2 : 确认写入
N2-->>G : 返回阶段性进度/状态
G-->>BASE : 流式步骤输出
BASE-->>C : 完成/失败,更新进度与阶段
图示来源
并行与进度
进度常量 utils.ts:15-23 控制 outline/content 阶段的进度区间。
flowchart TD
Start(["开始:OneStepOutlineStrategy.generate"]) --> Plan["planBookNode<br/>生成规划(genLevel)"]
Plan --> FullOutline["generateFullOutlineNode<br/>一次性生成完整大纲(JSON)"]
FullOutline --> FindLeaves["定位所有叶节点(level=3)"]
FindLeaves --> ParallelWrite["并行写入叶节点内容<br/>writeChaptersParallelNode"]
ParallelWrite --> AudioTrigger["完成后触发音频生成"]
AudioTrigger --> End(["结束"])
图示来源
章节来源
并行与进度
进度常量 utils.ts:15-23 控制 outline/content 阶段的进度区间。
flowchart TD
Start2(["开始:PerChapterStrategy.generate"]) --> Plan2["planBookNode<br/>生成规划(genLevel)"]
Plan2 --> Outline2["generateOutlineNode<br/>生成章大纲(JSON)"]
Outline2 --> LoopChapters["遍历每章(perChapterNode)"]
LoopChapters --> BuildMsg["构建单章提示(含规划/上下文)"]
BuildMsg --> CallLLM["调用LLM生成内容(JSON/纯文本)"]
CallLLM --> Parse["解析内容并写入数据库"]
Parse --> Verify["写入验证(失败重试)"]
Verify --> Next["下一章"]
Next --> |完成| End2(["结束"])
图示来源
章节来源
章节来源
配置与工具
book-type-config.ts 提供书籍规模、章节数与字数范围等配置;utils.ts 提供进度常量与字数统计。
graph LR
STR1["OneStepOutlineStrategy"] --> |调用| PLAN["planBookNode"]
STR1 --> |调用| FOUT["generateFullOutlineNode"]
STR1 --> |调用| WCON["writeChaptersNode"]
STR2["PerChapterStrategy"] --> |调用| PLAN
STR2 --> |调用| OUT["generateOutlineNode"]
STR2 --> |调用| PCH["perChapterNode"]
BASE["runGraphWorkflow"] --> STR1
BASE --> STR2
BASE --> FT["fault-tolerance.ts"]
PLAN --> CFG["book-type-config.ts"]
FOUT --> CFG
OUT --> CFG
PCH --> CFG
WCON --> CFG
WCON --> U["utils.ts"]
图示来源
章节来源
章节来源
章节来源
章节来源