# AI内容生成引擎 **本文档引用的文件** - [index.ts](file://server/src/modules/book-generator/index.ts) - [graph.ts](file://server/src/modules/book-generator/graph.ts) - [book-generator.service.ts](file://server/src/modules/book-generator/book-generator.service.ts) - [book-generator.controller.ts](file://server/src/modules/book-generator/book-generator.controller.ts) - [langgraph-controller.ts](file://server/src/modules/book-generator/langgraph-controller.ts) - [selector.ts](file://server/src/modules/book-generator/strategies/selector.ts) - [types.ts](file://server/src/modules/book-generator/strategies/types.ts) - [per-chapter.strategy.ts](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts) - [full-outline.node.ts](file://server/src/modules/book-generator/nodes/full-outline.node.ts) - [content.node.ts](file://server/src/modules/book-generator/nodes/content.node.ts) - [builder.ts](file://server/src/modules/book-generator/prompts/builder.ts) - [book-generator.store.ts](file://server/src/modules/book-generator/book-generator.store.ts) - [fault-tolerance.ts](file://server/src/modules/book-generator/fault-tolerance.ts) - [book-tools.ts](file://server/src/services/llm/book-tools.ts) - [stage-manager.ts](file://server/src/modules/book-generator/stage-manager.ts) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构概览](#架构概览) 5. [详细组件分析](#详细组件分析) 6. [依赖分析](#依赖分析) 7. [性能考虑](#性能考虑) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本项目是一个基于LangGraph的AI内容生成引擎,专注于自动化生成结构化的书籍内容,涵盖从大纲规划、章节创作到音频/视频生成的完整工作流。系统采用策略模式灵活切换生成路径,结合容错机制、配额控制与状态机管理,确保在复杂场景下的稳定性与可扩展性。 ## 项目结构 项目主要位于 `server/src/modules/book-generator` 目录下,围绕“策略-节点-状态”的三层架构组织: - 策略层:通过 `strategies/` 管理不同的生成策略(串行、一步大纲+并行内容、逐章内聚) - 节点层:通过 `nodes/` 实现具体的工作节点(大纲生成、章节内容生成等) - 状态层:通过 `graph.ts` 定义LangGraph状态与进度管理 - 控制层:通过控制器暴露REST API,协调生成流程与批量任务 - 存储层:通过 `book-generator.store.ts` 封装数据库访问与状态推进 - 容错层:通过 `fault-tolerance.ts` 提供重试、超时与自动恢复能力 ```mermaid graph TB subgraph "策略层" S1["selector.ts
策略选择器"] S2["per-chapter.strategy.ts
逐章内聚策略"] S3["types.ts
策略接口定义"] end subgraph "节点层" N1["full-outline.node.ts
一步大纲节点"] N2["content.node.ts
内容生成节点"] end subgraph "状态层" G["graph.ts
LangGraph状态定义"] end subgraph "控制层" C1["book-generator.controller.ts
批量生成API"] C2["langgraph-controller.ts
LangGraph主流程API"] end subgraph "存储层" D["book-generator.store.ts
数据库访问与树形结构构建"] end subgraph "容错层" F["fault-tolerance.ts
重试/超时/恢复"] end S1 --> S2 S2 --> N1 S2 --> N2 N1 --> G N2 --> G C1 --> D C2 --> D D --> F ``` **图表来源** - [selector.ts:1-78](file://server/src/modules/book-generator/strategies/selector.ts#L1-L78) - [per-chapter.strategy.ts:1-56](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L1-L56) - [full-outline.node.ts:1-243](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L1-L243) - [content.node.ts:1-547](file://server/src/modules/book-generator/nodes/content.node.ts#L1-L547) - [graph.ts:1-83](file://server/src/modules/book-generator/graph.ts#L1-L83) - [book-generator.controller.ts:1-199](file://server/src/modules/book-generator/book-generator.controller.ts#L1-L199) - [langgraph-controller.ts:1-800](file://server/src/modules/book-generator/langgraph-controller.ts#L1-L800) - [book-generator.store.ts:1-800](file://server/src/modules/book-generator/book-generator.store.ts#L1-L800) - [fault-tolerance.ts:1-379](file://server/src/modules/book-generator/fault-tolerance.ts#L1-L379) **章节来源** - [index.ts:1-104](file://server/src/modules/book-generator/index.ts#L1-L104) - [graph.ts:1-83](file://server/src/modules/book-generator/graph.ts#L1-L83) ## 核心组件 - LangGraphBookGenerator:对外暴露的主入口,负责根据书籍规模与类型解析生成层级,并委派给当前策略执行 - BatchGenerationOrchestrator:批量生成编排器,串联内容生成、音频生成、音频合并、视频生成与视频合并五个阶段,并提供进度推送与取消机制 - 策略选择器:支持串行、一步大纲+并行内容、逐章内聚三种策略,可通过运行时切换 - LangGraph节点:包括一步大纲生成、内容生成等节点,负责具体的AI调用与状态推进 - 容错层:提供AI调用重试、节点超时控制、进度监控与自动恢复 - 存储层:封装数据库访问、树形大纲构建、章节状态推进与发布管理 **章节来源** - [index.ts:60-104](file://server/src/modules/book-generator/index.ts#L60-L104) - [book-generator.service.ts:45-143](file://server/src/modules/book-generator/book-generator.service.ts#L45-L143) - [selector.ts:13-78](file://server/src/modules/book-generator/strategies/selector.ts#L13-L78) - [per-chapter.strategy.ts:21-56](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L21-L56) - [fault-tolerance.ts:17-47](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L47) - [book-generator.store.ts:163-332](file://server/src/modules/book-generator/book-generator.store.ts#L163-L332) ## 架构概览 系统采用“策略-节点-状态”三层架构,结合LangGraph实现多步骤工作流。策略层通过选择器动态切换;节点层负责具体步骤的执行;状态层通过Annotation定义状态与reducer,确保进度与状态的正确收敛。 ```mermaid classDiagram class LangGraphBookGenerator { +generate(bookId, topic, bookScale, genLevel) Promise~void~ } class GenerationStrategy { <> +name StrategyName +description string +generate(bookId, topic, bookScale, genLevel) Promise~void~ } class PerChapterStrategy { +name "per-chapter" +description "逐章内聚:先生成章大纲,然后每章独立并行生成结构+内容" +generate(bookId, topic, bookScale, genLevel) Promise~void~ } class GraphState { +bookId string +topic string +bookScale string +genLevel number +progress number +finished boolean +error string +completedChapters number[] +failedChapters number[] } class FullOutlineNode { +generateFullOutlineNode(state) Promise~Partial~State~~ } class ContentNode { +writeChaptersNode(state) Promise~Partial~State~~ +writeChaptersParallelNode(state) Promise~Partial~State~~ } class BatchGenerationOrchestrator { +execute() Promise~Result~ +setCancellationFlag(taskId) void +clearCancellationFlag(taskId) void +isTaskCancelled(taskId) boolean } class BookStore { +create(data) Promise~Book~ +getById(id, filterPublic, userId) Promise~Book|null~ +update(id, data) Promise~Book|null~ +getChapterTree(bookId) Promise~any[]~ +updateChapterById(id, data) Promise~Chapter|null~ +generateChapterAudioById(chapterId, userId) Promise~Result~ } class FaultTolerance { +callLLMWithRetry(messages, modelId, context) Promise~string~ +executeNodeWithTimeout(fn, timeoutMs) Promise~T~ +startProgressMonitor(bookId) void +attemptAutoRecovery(bookId) Promise~void~ } LangGraphBookGenerator --> GenerationStrategy : "委派" GenerationStrategy <|.. PerChapterStrategy : "实现" PerChapterStrategy --> GraphState : "使用" PerChapterStrategy --> FullOutlineNode : "调用" PerChapterStrategy --> ContentNode : "调用" BatchGenerationOrchestrator --> BookStore : "读写" BatchGenerationOrchestrator --> FaultTolerance : "容错" BookStore --> FaultTolerance : "配合" ``` **图表来源** - [index.ts:60-104](file://server/src/modules/book-generator/index.ts#L60-L104) - [types.ts:8-22](file://server/src/modules/book-generator/strategies/types.ts#L8-L22) - [per-chapter.strategy.ts:21-56](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L21-L56) - [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82) - [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218) - [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332) - [book-generator.service.ts:45-143](file://server/src/modules/book-generator/book-generator.service.ts#L45-L143) - [book-generator.store.ts:163-332](file://server/src/modules/book-generator/book-generator.store.ts#L163-L332) - [fault-tolerance.ts:64-176](file://server/src/modules/book-generator/fault-tolerance.ts#L64-L176) ## 详细组件分析 ### LangGraphBookGenerator 与策略选择 - 作用:根据书籍规模与类型解析生成层级,委派给当前策略执行 - 关键点: - 书籍类型到生成层级映射 - 规模配置与层级解析 - 独立大纲生成函数(不依赖策略) ```mermaid sequenceDiagram participant Client as "客户端" participant API as "LangGraph API" participant Gen as "LangGraphBookGenerator" participant Sel as "策略选择器" participant Strat as "PerChapterStrategy" participant Graph as "LangGraph工作流" Client->>API : POST /api/book-generator/langgraph/books API->>Gen : generate(bookId, topic, bookScale, genLevel) Gen->>Sel : getCurrentStrategy() Sel-->>Gen : PerChapterStrategy Gen->>Strat : generate(...) Strat->>Graph : 初始化状态与节点 Graph-->>Strat : 执行工作流 Strat-->>Gen : 完成 Gen-->>API : 返回结果 API-->>Client : 生成完成 ``` **图表来源** - [index.ts:60-104](file://server/src/modules/book-generator/index.ts#L60-L104) - [selector.ts:58-60](file://server/src/modules/book-generator/strategies/selector.ts#L58-L60) - [per-chapter.strategy.ts:33-54](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L33-L54) **章节来源** - [index.ts:24-51](file://server/src/modules/book-generator/index.ts#L24-L51) - [index.ts:84-104](file://server/src/modules/book-generator/index.ts#L84-L104) ### LangGraph 状态与进度管理 - 状态定义:通过Annotation定义bookId、topic、bookScale、genLevel、progress、finished、error、completedChapters、failedChapters等字段 - Reducer策略: - 进度与章节数只增不减,防止回退导致状态丢失 - 失败章节列表合并而非覆盖 - 用途:作为LangGraph工作流的共享状态,贯穿整个生成过程 ```mermaid flowchart TD Start(["初始化状态"]) --> SetFields["设置基础字段
bookId/topic/bookScale/genLevel"] SetFields --> InitProgress["初始化进度与完成状态"] InitProgress --> RunNodes["执行节点
逐步更新状态"] RunNodes --> ProgressUpdate{"进度是否增加?"} ProgressUpdate --> |是| UpdateMax["使用maxReducer
只增不减"] ProgressUpdate --> |否| KeepPrev["保持原值"] UpdateMax --> NextNode["下一个节点"] KeepPrev --> NextNode NextNode --> Finished{"finished为true?"} Finished --> |是| End(["结束"]) Finished --> |否| RunNodes ``` **图表来源** - [graph.ts:12-21](file://server/src/modules/book-generator/graph.ts#L12-L21) - [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82) **章节来源** - [graph.ts:9-82](file://server/src/modules/book-generator/graph.ts#L9-L82) ### 一步大纲生成节点(fullOutlineNode) - 目标:一次AI调用生成完整树形大纲(章→节→小节) - 关键流程: - 构建提示词(包含层级约束、字数预算、规划参考) - 调用LLM并解析JSON - 将大纲持久化到数据库,同时创建各级章节记录 - 容错:带超时与重试包装,失败时标记失败阶段 ```mermaid sequenceDiagram participant Node as "fullOutlineNode" participant LLM as "LLM调用" participant Store as "BookStore" participant FT as "容错层" Node->>FT : executeNodeWithTimeout(...) FT->>LLM : callLLMWithRetry(buildFullOutlinePrompt,...) LLM-->>FT : JSON大纲 FT-->>Node : 大纲数据 Node->>Store : update(bookId, outlineJson, progress) Node->>Store : createChapters/Items(各级章节) Node-->>Node : 返回进度完成 ``` **图表来源** - [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218) - [fault-tolerance.ts:127-176](file://server/src/modules/book-generator/fault-tolerance.ts#L127-L176) **章节来源** - [full-outline.node.ts:18-108](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L18-L108) - [full-outline.node.ts:135-218](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L218) ### 内容生成节点(content.node) - 目标:为所有叶节点生成正文内容 - 并行策略:使用AsyncPool并发生成,提升吞吐 - 安全机制: - 配额检查与消耗 - 字数预算与上限保护 - 智能截断与内容清洗 - 状态推进:通过advanceChapter/regenerateChapter安全推进/回退状态 ```mermaid flowchart TD Start(["开始内容生成"]) --> FindLeaves["查找叶节点"] FindLeaves --> FilterTargets["过滤未完成目标"] FilterTargets --> Loop{"遍历目标"} Loop --> |检查配额| QuotaCheck["checkQuotaForWords"] QuotaCheck --> |不足| Interrupt["中断生成并标记"] QuotaCheck --> |充足| BuildMsg["构建消息短文/长篇"] BuildMsg --> CallLLM["LLM调用工具/非工具"] CallLLM --> Clean["内容清洗与截断"] Clean --> Consume["消耗音频分钟配额"] Consume --> Save["保存内容并推进状态"] Save --> Loop Loop --> |完成| Done(["完成"]) ``` **图表来源** - [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332) - [content.node.ts:445-547](file://server/src/modules/book-generator/nodes/content.node.ts#L445-L547) **章节来源** - [content.node.ts:19-55](file://server/src/modules/book-generator/nodes/content.node.ts#L19-L55) - [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332) - [content.node.ts:445-547](file://server/src/modules/book-generator/nodes/content.node.ts#L445-L547) ### 批量生成编排器(BatchGenerationOrchestrator) - 职责:串行执行内容生成、音频生成、音频合并、视频生成、视频合并五个阶段 - 进度:每个阶段推进进度并推送WebSocket消息 - 取消:支持任务取消标志,及时终止执行 - 超时:各阶段内置轮询检查与超时控制 ```mermaid sequenceDiagram participant Orchestrator as "编排器" participant Store as "BookStore" participant LLM as "LangGraph生成" participant TTS as "TTS服务" participant Merge as "合并服务" participant WS as "WebSocket" Orchestrator->>WS : 推送阶段开始 Orchestrator->>Store : 获取书籍与章节树 Orchestrator->>LLM : 异步启动LangGraph生成 Orchestrator->>Store : 轮询检查内容完成 Orchestrator->>TTS : 生成音频并行 Orchestrator->>Merge : 合并音频/视频 Orchestrator->>WS : 推送阶段完成 Orchestrator-->>Orchestrator : 返回结果 ``` **图表来源** - [book-generator.service.ts:45-143](file://server/src/modules/book-generator/book-generator.service.ts#L45-L143) - [book-generator.service.ts:149-217](file://server/src/modules/book-generator/book-generator.service.ts#L149-L217) - [book-generator.service.ts:222-285](file://server/src/modules/book-generator/book-generator.service.ts#L222-L285) - [book-generator.service.ts:289-359](file://server/src/modules/book-generator/book-generator.service.ts#L289-L359) - [book-generator.service.ts:363-453](file://server/src/modules/book-generator/book-generator.service.ts#L363-L453) - [book-generator.service.ts:458-528](file://server/src/modules/book-generator/book-generator.service.ts#L458-L528) **章节来源** - [book-generator.service.ts:45-143](file://server/src/modules/book-generator/book-generator.service.ts#L45-L143) ### API 接口文档 - LangGraph主流程API - POST /api/book-generator/langgraph/books:创建并生成书籍(异步/同步) - GET /api/book-generator/langgraph/books/{id}/progress:获取生成进度 - POST /api/book-generator/langgraph/books/{id}/generate:对已有书籍再次生成 - GET /api/book-generator/langgraph/estimate:书籍规模预估 - POST /api/book-generator/langgraph/detect-book-type:AI自动检测书籍类型 - POST /api/book-generator/langgraph/smart-recommend:智能推荐难度/人群/风格/领域 - 批量生成API - POST /api/book-generator/books/{id}/batch-generate:一键完整生成(内容、音频、合并、生成视频、合并视频) - POST /api/book-generator/books/{id}/batch-generate/cancel:取消批量生成任务 - GET /api/book-generator/books/{id}/batch-generate/status:查询批量生成任务状态 **章节来源** - [langgraph-controller.ts:378-530](file://server/src/modules/book-generator/langgraph-controller.ts#L378-L530) - [langgraph-controller.ts:657-698](file://server/src/modules/book-generator/langgraph-controller.ts#L657-L698) - [book-generator.controller.ts:24-119](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L119) - [book-generator.controller.ts:125-197](file://server/src/modules/book-generator/book-generator.controller.ts#L125-L197) ## 依赖分析 - 组件耦合 - 策略层与节点层松耦合:策略通过StateGraph组合节点,便于替换与扩展 - 存储层与状态层强耦合:状态推进依赖存储层的乐观锁与清理规则 - 容错层横切关注:为LLM调用与节点执行提供统一的重试与超时机制 - 外部依赖 - LangGraph:工作流与状态管理 - Prisma:数据库ORM与事务 - WebSocket:进度推送 - TTS/视频生成服务:内容产物生成 ```mermaid graph TB Strat["策略层"] --> Nodes["节点层"] Nodes --> State["状态层"] Orchestrator["编排器"] --> Store["存储层"] Orchestrator --> FT["容错层"] Store --> DB["数据库"] Orchestrator --> WS["WebSocket"] ``` **图表来源** - [selector.ts:13-17](file://server/src/modules/book-generator/strategies/selector.ts#L13-L17) - [per-chapter.strategy.ts:33-40](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L33-L40) - [book-generator.service.ts:45-143](file://server/src/modules/book-generator/book-generator.service.ts#L45-L143) - [fault-tolerance.ts:17-47](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L47) **章节来源** - [selector.ts:13-78](file://server/src/modules/book-generator/strategies/selector.ts#L13-L78) - [per-chapter.strategy.ts:33-56](file://server/src/modules/book-generator/strategies/per-chapter.strategy.ts#L33-L56) - [book-generator.service.ts:45-143](file://server/src/modules/book-generator/book-generator.service.ts#L45-L143) ## 性能考虑 - 并行策略:内容生成节点支持并发池,显著提升长篇书籍生成效率 - 节点超时:为不同节点设置合理的超时阈值,避免长时间阻塞 - 进度监控:长时间无响应时自动告警并尝试恢复 - 配额控制:在生成前检查用户配额,避免无效调用 - 缓存与重用:工具调用可复用已生成内容摘要,减少重复生成 [本节为通用性能建议,无需特定文件引用] ## 故障排查指南 - 常见问题 - 生成超时:检查节点超时配置与网络状况,必要时启用自动恢复 - 额度不足:检查用户配额与累计字数,适当调整生成规模 - 状态冲突:通过安全转移函数与乐观锁避免并发写入冲突 - 调试方法 - 启用进度监控,观察长时间无响应任务 - 查看容错日志,定位失败原因与重试次数 - 通过WebSocket轮询获取实时进度与错误信息 **章节来源** - [fault-tolerance.ts:184-257](file://server/src/modules/book-generator/fault-tolerance.ts#L184-L257) - [fault-tolerance.ts:264-319](file://server/src/modules/book-generator/fault-tolerance.ts#L264-L319) - [stage-manager.ts:100-147](file://server/src/modules/book-generator/stage-manager.ts#L100-L147) ## 结论 本AI内容生成引擎通过策略化设计与LangGraph工作流,实现了从大纲规划到内容创作再到多媒体产物的完整自动化。结合容错机制、配额控制与状态机管理,系统在复杂场景下具备良好的稳定性与可扩展性。建议在生产环境中持续优化并发参数、监控指标与成本控制策略,以获得最佳的生成体验。 [本节为总结性内容,无需特定文件引用] ## 附录 ### 提示词工程与模型调用策略 - 动态提示词组装:根据书籍类型、目标读者、内容深度、行业领域与特殊需求动态拼装系统提示词 - 工具调用:通过LLM工具集获取已生成章节摘要与大纲,避免重复与风格不一致 - 模型调用:支持工具调用与普通消息两种模式,失败时自动降级 **章节来源** - [builder.ts:69-137](file://server/src/modules/book-generator/prompts/builder.ts#L69-L137) - [builder.ts:185-240](file://server/src/modules/book-generator/prompts/builder.ts#L185-L240) - [book-tools.ts:19-103](file://server/src/services/llm/book-tools.ts#L19-L103) - [content.node.ts:240-249](file://server/src/modules/book-generator/nodes/content.node.ts#L240-L249) ### 错误处理与状态管理机制 - 容错层:AI调用重试、节点超时、进度监控与自动恢复 - 状态机:章节线性阶段推进,支持安全转移与资源清理 - 失败回退:通过regenerateChapter实现失败章节的回退与重试 **章节来源** - [fault-tolerance.ts:64-176](file://server/src/modules/book-generator/fault-tolerance.ts#L64-L176) - [stage-manager.ts:158-198](file://server/src/modules/book-generator/stage-manager.ts#L158-L198) ### API 使用示例 - 创建并生成书籍:POST /api/book-generator/langgraph/books - 获取生成进度:GET /api/book-generator/langgraph/books/{id}/progress - 一键完整生成:POST /api/book-generator/books/{id}/batch-generate - 取消任务:POST /api/book-generator/books/{id}/batch-generate/cancel **章节来源** - [langgraph-controller.ts:378-530](file://server/src/modules/book-generator/langgraph-controller.ts#L378-L530) - [book-generator.controller.ts:24-119](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L119)