本文档引用的文件
本项目实现了基于LangGraph的AI内容生成功能,支持从主题输入到书籍大纲、章节内容的全流程自动化生成,并提供批量生成、异步处理、进度跟踪与错误恢复能力。系统采用策略模式选择不同的生成路径,结合容错层保障稳定性,通过阶段管理器确保生成流程的线性可控与可回溯。
围绕“书籍生成”模块,主要文件分布如下:
工具与进度:utils.ts
graph TB
subgraph "策略与入口"
IDX["index.ts<br/>主入口与策略门面"]
SEL["strategies/selector.ts<br/>策略选择器"]
end
subgraph "LangGraph"
GR["graph.ts<br/>状态定义与工作流"]
N1["nodes/full-outline.node.ts<br/>一步大纲节点"]
N2["nodes/content.node.ts<br/>内容生成节点"]
end
subgraph "提示词与存储"
PB["prompts/builder.ts<br/>提示词构建器"]
ST["book-generator.store.ts<br/>数据存储"]
TY["book-generator.types.ts<br/>类型定义"]
end
subgraph "编排与API"
SVC["book-generator.service.ts<br/>批量编排"]
CTRL["book-generator.controller.ts<br/>批量API"]
LGC["langgraph-controller.ts<br/>LangGraph API"]
SM["stage-manager.ts<br/>阶段管理"]
FT["fault-tolerance.ts<br/>容错层"]
UT["utils.ts<br/>工具与进度"]
end
IDX --> SEL
IDX --> GR
GR --> N1
GR --> N2
N1 --> PB
N2 --> PB
N1 --> ST
N2 --> ST
SVC --> ST
CTRL --> SVC
LGC --> IDX
LGC --> ST
LGC --> SM
LGC --> FT
SVC --> FT
ST --> TY
图表来源
章节来源
章节来源
系统采用“策略门面 + LangGraph工作流 + 节点执行 + 容错与阶段管理”的分层架构。策略门面根据输入解析genLevel并选择具体策略;LangGraph定义状态与节点,节点通过提示词工程与LLM交互;容错层保障稳定性;阶段管理器确保生成流程可控;存储层持久化状态与结果。
sequenceDiagram
participant C as "客户端"
participant API as "LangGraph API(langgraph-controller)"
participant GEN as "LangGraphBookGenerator(index)"
participant STR as "策略选择器(selector)"
participant WF as "LangGraph(graph)"
participant N1 as "大纲节点(full-outline.node)"
participant N2 as "内容节点(content.node)"
participant ST as "存储(book-generator.store)"
participant FT as "容错(fault-tolerance)"
C->>API : "POST /api/book-generator/langgraph/books"
API->>GEN : "generate(bookId, topic, scale, level)"
GEN->>STR : "getCurrentStrategy()"
STR-->>GEN : "策略实例"
GEN->>WF : "执行工作流"
WF->>N1 : "生成完整大纲"
N1->>FT : "AI调用重试/超时"
N1->>ST : "写入大纲与章节记录"
WF->>N2 : "并行生成章节内容"
N2->>FT : "AI调用重试/超时"
N2->>ST : "写入章节内容与进度"
API-->>C : "返回生成状态/进度"
图表来源
节点职责:
content.node:并行生成叶节点内容,支持工具调用、字数截断、配额消耗与音频触发。
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 FullOutlineNode {
+generateFullOutlineNode(state) Partial~state~
}
class ContentNode {
+writeChaptersNode(state) Partial~state~
+writeChaptersParallelNode(state) Partial~state~
}
GraphState <.. FullOutlineNode : "读取/写入"
GraphState <.. ContentNode : "读取/写入"
图表来源
章节来源
生成流程:LangGraph工作流按节点顺序执行,节点间通过状态传递,最终完成内容生成。
flowchart TD
Start(["开始"]) --> Resolve["解析genLevel<br/>resolveGenLevel()"]
Resolve --> Select["选择策略<br/>getCurrentStrategy()"]
Select --> Exec["执行策略.generate()"]
Exec --> Outline["大纲节点<br/>full-outline.node"]
Outline --> Content["内容节点<br/>content.node(并行)"]
Content --> Done(["完成"])
图表来源
章节来源
章节来源
队列与降级:langgraph-controller在创建书籍时尝试加入队列,若失败则降级为同步执行,确保核心业务可用。
sequenceDiagram
participant Client as "客户端"
participant Ctrl as "book-generator.controller"
participant Orchestrator as "BatchGenerationOrchestrator"
participant Store as "book-generator.store"
Client->>Ctrl : "POST /api/book-generator/books/ : id/batch-generate"
Ctrl->>Orchestrator : "createBatchGenerationTask()"
Orchestrator->>Orchestrator : "execute() 阶段循环"
Orchestrator->>Store : "轮询检查章节状态/进度"
Orchestrator-->>Ctrl : "推送进度/完成"
Ctrl-->>Client : "任务启动/状态"
图表来源
章节来源
章节来源
章节来源
外部依赖
WebSocket:用于批量生成进度推送。
graph LR
IDX["index.ts"] --> SEL["strategies/selector.ts"]
IDX --> GR["graph.ts"]
GR --> N1["nodes/full-outline.node.ts"]
GR --> N2["nodes/content.node.ts"]
N1 --> PB["prompts/builder.ts"]
N2 --> PB
N1 --> ST["book-generator.store.ts"]
N2 --> ST
SVC["book-generator.service.ts"] --> ST
CTRL["book-generator.controller.ts"] --> SVC
LGC["langgraph-controller.ts"] --> IDX
LGC --> ST
LGC --> FT["fault-tolerance.ts"]
SVC --> FT
图表来源
章节来源
章节来源
本系统通过策略门面、LangGraph工作流与节点化实现,结合提示词工程、并行生成、容错与阶段管理,形成了稳定高效的AI内容生成流水线。其API设计支持从交互式创建到批量生成的多种场景,具备良好的扩展性与可维护性。
章节来源