本文档引用的文件
LangGraph工作流设计是一个基于LangChain LangGraph框架构建的智能书籍生成系统。该系统通过状态驱动的工作流管理复杂的多节点协作,实现了从书籍规划到内容生成的完整自动化流程。
本系统的核心特点是:
该项目采用模块化的组织方式,主要集中在server/src/modules/book-generator目录下:
graph TB
subgraph "核心模块"
A[graph.ts<br/>状态定义]
B[index.ts<br/>主入口]
C[langgraph-controller.ts<br/>API控制器]
end
subgraph "策略系统"
D[selector.ts<br/>策略选择器]
E[deep-plan-parallel.strategy.ts<br/>推荐策略]
end
subgraph "节点实现"
F[deep-plan.node.ts<br/>深度规划]
G[rich-outline.node.ts<br/>富大纲生成]
H[content.node.ts<br/>内容生成]
I[foreword.node.ts<br/>前后记生成]
end
subgraph "辅助模块"
J[langgraph-types.ts<br/>类型定义]
end
A --> B
B --> C
D --> E
E --> F
E --> G
E --> H
E --> I
F --> G
G --> H
H --> I
图表来源
章节来源
系统使用LangChain的Annotation API定义了完整的状态管理系统:
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
}
class ReducerFunctions {
+maxReducer(prev, update)
+appendReducer(prev, update)
+defaultReducer(prev, update)
}
class StateFields {
+bookId : string
+userId : string|number
+topic : string
+bookScale : string
+genLevel : number
+description : string
+bookPlan : string|undefined
+currentChapter : number
+completedChapters : number[]
+finished : boolean
+error : string|undefined
+progress : number
+failedChapters : number[]
}
GraphState --> ReducerFunctions
GraphState --> StateFields
图表来源
系统实现了三种核心Reducer函数来管理不同类型的状态更新:
章节来源
系统采用策略模式结合LangGraph实现的工作流架构:
graph TD
subgraph "API层"
A[langgraph-controller.ts<br/>REST API]
end
subgraph "策略层"
B[selector.ts<br/>策略选择器]
C[deep-plan-parallel.strategy.ts<br/>推荐策略]
end
subgraph "工作流层"
D[StateGraph<br/>状态图]
E[deep_plan<br/>深度规划]
F[rich_outline<br/>富大纲]
G[parallel_content<br/>并行内容]
H[continuity_edit<br/>连贯性编辑]
end
subgraph "节点层"
I[deep-plan.node.ts]
J[rich-outline.node.ts]
K[content.node.ts]
L[foreword.node.ts]
end
A --> B
B --> C
C --> D
D --> E
D --> F
D --> G
D --> H
E --> I
F --> J
G --> K
H --> L
图表来源
| 字段名 | 类型 | 默认值 | 作用 | Reducer |
|---|---|---|---|---|
| bookId | string | '' | 书籍唯一标识 | 覆盖 |
| userId | string|number | '' | 用户标识 | 覆盖 |
| topic | string | '' | 书籍主题 | 覆盖 |
| bookScale | string | '标准教程' | 书籍规模 | 覆盖 |
| genLevel | number | 2 | 大纲层级(1-3) | 覆盖 |
| description | string | '' | 书籍描述 | 覆盖 |
| bookPlan | string|undefined | undefined | AI规划结果 | 覆盖 |
| currentChapter | number | 0 | 当前处理章节 | maxReducer |
| completedChapters | number[] | [] | 已完成章节列表 | appendReducer |
| finished | boolean | false | 完成标志 | 覆盖 |
| error | string|undefined | undefined | 错误信息 | 覆盖 |
| progress | number | 0 | 生成进度(0-100) | maxReducer |
| failedChapters | number[] | [] | 失败章节列表 | appendReducer |
flowchart TD
Start([开始生成]) --> InitProgress["初始化进度: 0"]
InitProgress --> DeepPlan["深度规划阶段"]
DeepPlan --> Outline["大纲生成阶段"]
Outline --> Content["内容生成阶段"]
Content --> Edit["连贯性编辑阶段"]
Edit --> Foreword["前言生成阶段"]
Foreword --> Afterword["后记生成阶段"]
Afterword --> Complete["完成"]
DeepPlan -.-> Progress10["进度: 10%"]
Outline -.-> Progress20["进度: 20%"]
Content -.-> Progress80["进度: 80%"]
Edit -.-> Progress90["进度: 90%"]
Foreword -.-> Progress95["进度: 95%"]
Afterword -.-> Progress100["进度: 100%"]
Progress10 --> MaxCheck1{"进度检查"}
Progress20 --> MaxCheck2{"进度检查"}
Progress80 --> MaxCheck3{"进度检查"}
Progress90 --> MaxCheck4{"进度检查"}
Progress95 --> MaxCheck5{"进度检查"}
Progress100 --> MaxCheck6{"进度检查"}
MaxCheck1 --> Update1["更新进度"]
MaxCheck2 --> Update2["更新进度"]
MaxCheck3 --> Update3["更新进度"]
MaxCheck4 --> Update4["更新进度"]
MaxCheck5 --> Update5["更新进度"]
MaxCheck6 --> Update6["更新进度"]
图表来源
章节来源
推荐的"DeepPlan+RichOutline+Concurrent+Edit"策略实现了最优的工作流连接:
sequenceDiagram
participant Client as 客户端
participant API as API控制器
participant Strategy as 深度规划策略
participant DeepPlan as 深度规划节点
participant RichOutline as 富大纲节点
participant ParallelContent as 并行内容节点
participant ContinuityEdit as 连贯性编辑节点
Client->>API : POST /api/book-generator/langgraph/books
API->>Strategy : 选择推荐策略
Strategy->>DeepPlan : 执行深度规划
DeepPlan->>DeepPlan : AI分析书籍需求
DeepPlan->>RichOutline : 传递规划结果
RichOutline->>RichOutline : 生成富信息大纲
RichOutline->>ParallelContent : 传递大纲数据
ParallelContent->>ParallelContent : 并行生成内容
ParallelContent->>ContinuityEdit : 传递生成内容
ContinuityEdit->>ContinuityEdit : 全局连贯性检查
ContinuityEdit->>API : 返回完成状态
API->>Client : 返回生成结果
图表来源
章节来源
深度规划节点使用AI进行智能书籍分析:
flowchart TD
Start([接收输入]) --> BuildPrompt["构建深度规划提示词"]
BuildPrompt --> CallLLM["调用LLM进行分析"]
CallLLM --> ParseResponse["解析AI响应"]
ParseResponse --> ValidatePlan{"验证规划有效性"}
ValidatePlan --> |有效| StorePlan["存储规划结果"]
ValidatePlan --> |无效| UseDefault["使用默认值"]
StorePlan --> UpdateState["更新状态"]
UseDefault --> UpdateState
UpdateState --> ReturnResult["返回结果"]
ReturnResult --> End([完成])
图表来源
章节来源
富大纲节点生成带有写作指令的完整大纲结构:
flowchart TD
Start([开始富大纲生成]) --> LoadPlan["加载深度规划结果"]
LoadPlan --> BuildRichPrompt["构建富大纲提示词"]
BuildRichPrompt --> CallLLM["调用LLM生成大纲"]
CallLLM --> ParseOutline["解析大纲JSON"]
ParseOutline --> ValidateOutline{"验证大纲结构"}
ValidateOutline --> |有效| QualityCheck["质量评估"]
ValidateOutline --> |无效| HandleError["处理错误"]
QualityCheck --> EvaluateScore["评估大纲质量"]
EvaluateScore --> StoreOutline["存储大纲到数据库"]
StoreOutline --> CreateChapters["创建章节结构"]
CreateChapters --> ReturnSuccess["返回成功"]
HandleError --> ReturnError["返回错误"]
图表来源
章节来源
内容生成节点实现了高效的并行处理机制:
flowchart TD
Start([开始内容生成]) --> LoadBook["加载书籍信息"]
LoadBook --> FindLeaves["查找叶节点"]
FindLeaves --> FilterTargets["过滤待生成目标"]
FilterTargets --> CheckTargets{"有目标需要生成?"}
CheckTargets --> |否| SkipGeneration["跳过生成"]
CheckTargets --> |是| BuildContext["构建上下文"]
BuildContext --> CreateTasks["创建并行任务"]
CreateTasks --> ExecuteParallel["并发执行"]
ExecuteParallel --> ProcessResults["处理执行结果"]
ProcessResults --> UpdateState["更新状态"]
UpdateState --> TriggerAudio["触发音频生成"]
TriggerAudio --> ReturnComplete["返回完成"]
SkipGeneration --> ReturnComplete
图表来源
章节来源
graph TB
subgraph "外部依赖"
A[@langchain/langgraph<br/>核心框架]
B[Prisma<br/>数据库ORM]
C[LLM服务<br/>AI调用]
D[队列服务<br/>任务调度]
end
subgraph "内部模块"
E[graph.ts<br/>状态定义]
F[langgraph-controller.ts<br/>API层]
G[selector.ts<br/>策略选择]
H[deep-plan-parallel.strategy.ts<br/>工作流定义]
I[nodes/*<br/>节点实现]
end
A --> E
A --> H
B --> I
C --> I
D --> F
E --> F
F --> G
G --> H
H --> I
图表来源
章节来源
系统通过以下机制提升性能:
症状:进度停留在某个百分比不再变化
排查步骤:
解决方案:
症状:部分内容生成失败且影响整体进度
排查步骤:
解决方案:
症状:长时间运行后内存使用持续增长
排查步骤:
解决方案:
章节来源
LangGraph工作流设计通过以下关键特性实现了高效的智能书籍生成:
该系统为AI内容生成提供了可扩展、可维护的架构基础,支持从简单教程到复杂技术书籍的多种场景。通过模块化的组件设计和策略模式的应用,系统具备良好的可扩展性和维护性。
未来可以进一步优化的方向包括: