本文档引用的文件
本文件为 LangGraph 工作流引擎的技术文档,面向希望理解并扩展“书籍生成”自动化流水线的工程师与产品人员。文档从系统架构、节点设计、状态管理、阶段切换、容错机制、配置选项、调试监控等方面进行深入剖析,并提供最佳实践与排障建议。
LangGraph 工作流位于后端服务的书籍生成模块中,采用“策略门面 + 图编排 + 节点执行 + 阶段管理 + 容错控制”的分层设计。核心目录与职责如下:
utils.ts:通用工具(进度常量、字数统计)
graph TB
subgraph "API 层"
C["langgraph-controller.ts<br/>路由与任务调度"]
end
subgraph "策略层"
S["selector.ts<br/>策略选择器"]
I["index.ts<br/>策略门面"]
end
subgraph "编排层"
G["graph.ts<br/>状态与reducer"]
end
subgraph "节点层"
P["plan.node.ts<br/>书籍规划"]
O["outline.node.ts<br/>大纲生成"]
FO["full-outline.node.ts<br/>一步大纲"]
W["content.node.ts<br/>内容生成/并行"]
end
subgraph "阶段管理"
SM["stage-manager.ts<br/>章节阶段机"]
end
subgraph "容错层"
FT["fault-tolerance.ts<br/>重试/超时/监控"]
end
subgraph "存储层"
BS["book-generator.store.ts<br/>持久化"]
BTC["book-type-config.ts<br/>规模配置"]
end
C --> I
I --> S
I --> G
G --> P --> O --> W
G --> FO
W --> SM
O --> BS
W --> BS
FO --> BS
P --> BS
C --> FT
C --> BS
C --> BTC
图表来源
章节来源
章节来源
LangGraph 工作流以“策略门面 + 图编排 + 节点执行”为核心,结合“阶段管理 + 容错控制 + 存储层”,形成完整的书籍生成流水线。API 层接收请求后,选择策略并启动图编排;节点在图中按顺序执行,状态通过 reducer 合并;阶段管理器确保章节状态线性推进;容错层保障稳定性;存储层提供持久化与数据重建能力。
sequenceDiagram
participant Client as "客户端"
participant API as "langgraph-controller.ts"
participant Strat as "index.ts/selector.ts"
participant Graph as "graph.ts"
participant Node as "nodes/*"
participant Stage as "stage-manager.ts"
participant Store as "book-generator.store.ts"
Client->>API : POST /api/book-generator/langgraph/books
API->>Strat : 选择策略并初始化
Strat->>Graph : 初始化GraphState
Graph->>Node : planBookNode规划
Node->>Store : 写入规划结果/更新bookPlan
Graph->>Node : generateOutlineNode 或 fullOutlineNode
Node->>Store : 写入大纲/创建章节
Graph->>Node : writeChaptersParallelNode并行内容
Node->>Stage : advanceChapter/content_completed
Node->>Store : 更新章节内容/字数/音频URL
Graph-->>API : 返回进度/状态
API-->>Client : 任务状态/进度
图表来源
控制流:GraphState 作为节点间共享上下文,节点通过返回 partial state 更新状态。
classDiagram
class GraphState {
+string bookId
+string|number userId
+string topic
+string bookScale
+number genLevel
+string description
+string|undefined bookPlan
+number currentChapter
+number[] completedChapters
+boolean finished
+string|undefined error
+number progress
+number[] failedChapters
}
图表来源
章节来源
内容节点(content.node.ts):
安全防护:章节预算偏差检测、全书字数上限、配额消耗、失败回退。
flowchart TD
Start(["开始:content.node"]) --> FindLeaves["查找叶节点无子节点"]
FindLeaves --> Filter["过滤未完成内容的叶节点"]
Filter --> Loop{"还有待生成节点?"}
Loop --> |否| Done["完成:推进父节点状态"]
Loop --> |是| Gen["生成单个叶节点内容"]
Gen --> Safety["安全防护:预算/上限/配额"]
Safety --> Save["保存内容与字数"]
Save --> Advance["advanceChapter 到 content_completed"]
Advance --> Trigger["触发音频生成"]
Trigger --> Next["下一个节点"]
Next --> Loop
图表来源
章节来源
上层封装:提供 advanceChapter(仅前进)、regenerateChapter(回退/重试)等便捷方法。
stateDiagram-v2
[*] --> idle
idle --> content_generating : "advanceChapter"
idle --> failed : "regenerateChapter"
outline_completed --> content_generating : "advanceChapter"
outline_completed --> failed : "regenerateChapter"
content_generating --> content_completed : "完成"
content_generating --> failed : "失败"
content_completed --> audio_generating : "advanceChapter"
content_completed --> audio_completed : "advanceChapter"
content_completed --> content_generating : "regenerateChapter"
content_completed --> failed : "regenerateChapter"
audio_generating --> audio_completed : "完成"
audio_generating --> content_completed : "回退"
audio_generating --> failed : "失败"
audio_completed --> video_generating : "advanceChapter"
audio_completed --> audio_generating : "regenerateChapter"
audio_completed --> content_generating : "regenerateChapter"
audio_completed --> failed : "regenerateChapter"
video_generating --> video_completed : "完成"
video_generating --> failed : "失败"
video_completed --> video_generating : "regenerateChapter"
video_completed --> audio_generating : "regenerateChapter"
video_completed --> content_generating : "regenerateChapter"
video_completed --> failed : "regenerateChapter"
failed --> content_generating : "regenerateChapter"
failed --> audio_generating : "regenerateChapter"
failed --> video_generating : "regenerateChapter"
failed --> idle : "regenerateChapter"
图表来源
章节来源
自动恢复:重新入队并延时重试,避免任务永久卡死。
flowchart TD
Enter(["进入节点"]) --> Timeout["设置超时计时器"]
Timeout --> CallLLM["调用LLM带重试"]
CallLLM --> Success{"成功?"}
Success --> |是| Complete["通知完成并返回"]
Success --> |否| Retry["指数退避重试"]
Retry --> Max{"超过最大重试?"}
Max --> |否| CallLLM
Max --> |是| Fail["记录失败并通知用户"]
Timeout --> |超时| TimeoutAction["记录超时并尝试恢复"]
TimeoutAction --> Recovery["自动恢复:重新入队"]
图表来源
章节来源
阶段映射:根据章节状态计算书籍整体阶段,确保整体进度一致性。
erDiagram
BOOK {
int id PK
string title
string description
string bookScale
int totalChapters
int estimatedWords
string genStage
int progress
boolean isPublished
}
CHAPTER {
int id PK
int bookId FK
int number
string title
string content
int wordCount
string genStage
string audioUrl
float audioDuration
string videoUrl
float videoDuration
int level
int parentId
}
BOOK ||--o{ CHAPTER : "包含"
图表来源
章节来源
章节来源
章节来源
外部依赖:
LLM 服务:提示词构建与调用。
graph LR
Controller["langgraph-controller.ts"] --> Strategy["selector.ts"]
Strategy --> Graph["graph.ts"]
Graph --> Nodes["nodes/*"]
Nodes --> Store["book-generator.store.ts"]
Nodes --> Stage["stage-manager.ts"]
Controller --> FT["fault-tolerance.ts"]
Controller --> Store
Controller --> BTC["book-type-config.ts"]
图表来源
章节来源
章节来源
LangGraph 工作流引擎通过“策略门面 + 图编排 + 节点执行 + 阶段管理 + 容错控制”的分层设计,实现了从书籍规划到内容生成的自动化流水线。其状态中枢与 reducer 设计保证了并发安全性,阶段管理器确保线性推进与资源清理,容错层提升了稳定性与用户体验。配合存储层的数据模型与 API 层的任务调度,形成了可扩展、可观测、可恢复的完整体系。
章节来源