AI书籍生成引擎.md 22 KB

AI书籍生成引擎

本文档引用的文件

  • index.ts
  • graph.ts
  • stage-manager.ts
  • book-generator.store.ts
  • book-generator.service.ts
  • selector.ts
  • full-outline.node.ts
  • templates.ts
  • book-generator.types.ts
  • deep-plan-parallel.strategy.ts
  • fault-tolerance.ts
  • utils.ts
  • book-type-config.ts
  • book-tools.ts

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本项目是一个基于LangGraph的AI书籍生成引擎,提供从“书籍规划→大纲生成→内容创作→媒体合成”的全流程自动化能力。系统采用策略门面模式,支持多种生成策略(串行、一步大纲+并行内容、逐章内聚、DeepPlan+富大纲+并发+连贯性编辑),并通过阶段管理器、存储层、容错层与进度监控,确保大规模生成任务的稳定性与可观测性。

项目结构

  • 服务端核心位于 server/src/modules/book-generator,包含:
    • 策略系统:strategies/selector.ts、deep-plan-parallel.strategy.ts 等
    • LangGraph工作流:graph.ts、nodes/*、prompts/templates.ts
    • 存储与阶段管理:book-generator.store.ts、stage-manager.ts
    • 批量编排与进度:book-generator.service.ts
    • 容错与监控:fault-tolerance.ts
    • 工具与配置:book-tools.ts、book-type-config.ts、utils.ts、book-generator.types.ts
  • 前端位于 my-uniapp-vue3,提供书籍生成界面与状态展示

    graph TB
    subgraph "策略层"
    S1["策略选择器<br/>selector.ts"]
    S2["DeepPlan+并行策略<br/>deep-plan-parallel.strategy.ts"]
    end
    subgraph "LangGraph工作流"
    G1["状态定义<br/>graph.ts"]
    N1["一步大纲节点<br/>full-outline.node.ts"]
    P1["提示词模板<br/>prompts/templates.ts"]
    end
    subgraph "编排与存储"
    B1["批量编排器<br/>book-generator.service.ts"]
    ST["阶段管理器<br/>stage-manager.ts"]
    DS["存储层<br/>book-generator.store.ts"]
    end
    subgraph "容错与工具"
    FT["容错层<br/>fault-tolerance.ts"]
    BT["LLM工具集<br/>book-tools.ts"]
    CFG["类型配置<br/>book-type-config.ts"]
    end
    S1 --> S2
    S2 --> G1
    G1 --> N1
    N1 --> P1
    B1 --> DS
    B1 --> ST
    DS --> FT
    DS --> BT
    DS --> CFG
    

图表来源

  • selector.ts:1-81
  • deep-plan-parallel.strategy.ts:1-74
  • graph.ts:1-83
  • full-outline.node.ts:1-243
  • templates.ts:1-361
  • book-generator.service.ts:1-549
  • stage-manager.ts:1-202
  • book-generator.store.ts:1-800
  • fault-tolerance.ts:1-387
  • book-tools.ts:1-104
  • book-type-config.ts:1-133

章节来源

  • index.ts:1-119
  • book-generator.types.ts:1-226

核心组件

  • 策略门面与主生成器:LangGraphBookGenerator,负责根据书籍规模与话题推断大纲层级,调用当前策略执行生成
  • LangGraph状态与节点:GraphState定义状态字段;full-outline.node.ts等节点实现“一步大纲生成”等步骤
  • 存储层:BookStore封装数据库读写、树形大纲构建、章节批量创建与更新、音频/视频生成与关联
  • 阶段管理器:线性阶段模型与安全转移,支持前进与回退(regenerate),并自动清理下游资源
  • 批量编排器:BatchGenerationOrchestrator,按步骤顺序执行内容生成、音频生成、音频合并、视频生成、视频合并,并推送进度
  • 容错层:AI调用重试、节点超时、进度监控、自动恢复
  • 提示词模板与工具:templates.ts提供系统提示词;book-tools.ts提供LLM工具(获取大纲、已写章节、问题上报)

章节来源

  • index.ts:74-119
  • graph.ts:23-82
  • full-outline.node.ts:135-218
  • book-generator.store.ts:163-800
  • stage-manager.ts:100-198
  • book-generator.service.ts:45-549
  • fault-tolerance.ts:17-387
  • templates.ts:1-361
  • book-tools.ts:19-104

架构总览

系统采用“策略门面 + LangGraph工作流 + 编排器 + 存储/阶段/容错”的分层架构。策略门面根据输入选择具体工作流;LangGraph节点负责AI提示词工程与内容生成;编排器负责跨阶段的协调与进度推送;存储层负责持久化与树形大纲构建;阶段管理器保证状态机安全;容错层提供鲁棒性保障。

sequenceDiagram
participant U as "用户"
participant API as "API控制器"
participant GEN as "LangGraphBookGenerator"
participant STR as "策略选择器"
participant WF as "LangGraph工作流"
participant NODE as "大纲/内容节点"
participant STORE as "BookStore"
participant STAGE as "阶段管理器"
U->>API : "提交生成任务"
API->>GEN : "generate(bookId, topic, scale, genLevel)"
GEN->>STR : "getCurrentStrategy()"
STR-->>GEN : "返回策略实例"
GEN->>WF : "runGraphWorkflow(initialState)"
WF->>NODE : "执行节点如full-outline"
NODE->>STORE : "写入大纲/章节记录"
NODE-->>WF : "返回状态更新"
WF->>STAGE : "推进章节/书籍阶段"
WF-->>GEN : "完成一轮节点"
GEN-->>API : "异步生成中"
API-->>U : "返回任务ID/进度"

图表来源

  • index.ts:74-91
  • selector.ts:61-77
  • deep-plan-parallel.strategy.ts:44-71
  • full-outline.node.ts:135-218
  • book-generator.store.ts:163-239
  • stage-manager.ts:158-198

详细组件分析

LangGraph工作流与状态

  • 状态字段:包含书籍ID、用户ID、主题、规模、大纲层级、描述、规划结果、当前/已完成章节、完成标志、错误信息、进度、失败章节列表等
  • 进度reducer:只增不减,防止回退丢失进度
  • 节点:full-outline.node.ts实现“一步生成完整大纲”,并写入数据库(章→节→小节)

    flowchart TD
    Start(["开始"]) --> Init["初始化GraphState<br/>bookId/topic/scale/genLevel"]
    Init --> Run["执行节点:full-outline"]
    Run --> Parse["解析JSON大纲"]
    Parse --> Save["写入outlineJson与章节记录"]
    Save --> Next["推进进度/完成标志"]
    Next --> End(["结束"])
    

图表来源

  • graph.ts:23-82
  • full-outline.node.ts:135-218

章节来源

  • graph.ts:9-82
  • full-outline.node.ts:18-108

策略系统与门面

  • 策略注册:sequential、one-step-outline、per-chapter、deep-plan-parallel
  • 门面类:LangGraphBookGenerator.generate(bookId, topic, bookScale, genLevel?),内部解析genLevel并调用当前策略
  • 推荐策略:deep-plan-parallel,包含深度规划→富大纲→并发内容→连贯性编辑

    classDiagram
    class LangGraphBookGenerator {
    +generate(bookId, topic, bookScale, genLevel)
    }
    class StrategySelector {
    +getCurrentStrategy()
    +setCurrentStrategy(name)
    +getAllStrategies()
    }
    class DeepPlanParallelStrategy {
    +generate(bookId, topic, bookScale, genLevel)
    }
    LangGraphBookGenerator --> StrategySelector : "使用"
    StrategySelector --> DeepPlanParallelStrategy : "返回实例"
    

图表来源

  • index.ts:74-91
  • selector.ts:14-77
  • deep-plan-parallel.strategy.ts:32-73

章节来源

  • index.ts:23-65
  • selector.ts:14-77
  • deep-plan-parallel.strategy.ts:32-73

存储机制与树形大纲

  • 存储类:BookStore封装创建/查询/更新/删除书籍与章节,批量创建章节(upsert),章节树构建
  • 树形结构:按level与number排序,支持章→节→小节三层
  • 大纲构建:从数据库章节记录重建BookOutline,优先使用数据库构建的树

    erDiagram
    BOOK {
    int id PK
    string title
    string description
    string bookScale
    int totalChapters
    int estimatedWords
    string genStage
    int progress
    }
    BOOK_CHAPTER {
    int id PK
    int bookId FK
    int number
    string title
    string summary
    string keyPoints
    int estimatedWords
    int level
    int parentId
    string genStage
    string audioUrl
    float audioDuration
    string videoUrl
    float videoDuration
    }
    BOOK ||--o{ BOOK_CHAPTER : "包含"
    

图表来源

  • book-generator.store.ts:244-331
  • book-generator.store.ts:179-239

章节来源

  • book-generator.store.ts:163-800

阶段管理器与状态机

  • 章节阶段:idle → outline_completed → content_generating → content_completed → audio_generating → audio_completed → video_generating → video_completed → failed
  • 安全转移:验证转移矩阵、乐观锁、回退时自动清理下游资源(音频/视频URL与时长)
  • 书籍阶段:由最低阶段(最落后章节)决定

    stateDiagram-v2
    [*] --> idle
    idle --> outline_completed : "大纲完成"
    outline_completed --> content_generating : "开始内容生成"
    content_generating --> content_completed : "内容完成"
    content_completed --> audio_generating : "开始音频生成"
    audio_generating --> audio_completed : "音频完成"
    audio_completed --> video_generating : "开始视频生成"
    video_generating --> video_completed : "视频完成"
    content_generating --> failed : "失败"
    audio_generating --> failed : "失败"
    video_generating --> failed : "失败"
    failed --> content_generating : "重新生成"
    failed --> audio_generating : "重新生成"
    failed --> video_generating : "重新生成"
    failed --> idle : "重置"
    

图表来源

  • stage-manager.ts:13-49
  • stage-manager.ts:100-198

章节来源

  • stage-manager.ts:100-198

批量生成编排器

  • 步骤:generate_content → generate_audio → merge_audio → generate_video → merge_video
  • 进度:通过WebSocket推送,包含步骤名、百分比与消息
  • 轮询检查:等待内容/音频/视频生成完成,设置最大等待时间
  • 取消机制:支持设置/检查/清理取消标志

    sequenceDiagram
    participant Orchestrator as "批量编排器"
    participant Store as "BookStore"
    participant LLM as "LangGraph生成"
    participant Stage as "阶段管理器"
    Orchestrator->>Store : "获取书籍/章节树"
    Orchestrator->>LLM : "异步启动内容生成"
    Orchestrator->>Store : "轮询检查完成状态"
    Orchestrator->>Stage : "推进章节/书籍阶段"
    Orchestrator-->>Orchestrator : "推送进度"
    

图表来源

  • book-generator.service.ts:45-549

章节来源

  • book-generator.service.ts:45-549

容错与监控

  • AI调用重试:最多3次,指数退避,失败记录到errorMsg
  • 节点超时:不同节点设定超时阈值,超时通知用户并触发恢复
  • 进度监控:超过10分钟无进度发出警告,建议干预或自动恢复
  • 自动恢复:重新加入队列,最多尝试2次

    flowchart TD
    A["开始节点"] --> B["callLLMWithRetry<br/>重试+退避"]
    B --> C{"成功?"}
    C -- 否 --> D["记录失败到errorMsg"]
    D --> E["通知用户AI失败"]
    E --> F["尝试自动恢复"]
    F --> G["重新加入队列"]
    C -- 是 --> H["executeNodeWithTimeout<br/>超时控制"]
    H --> I{"超时?"}
    I -- 是 --> J["通知节点超时"]
    J --> K["尝试自动恢复"]
    I -- 否 --> L["正常完成"]
    

图表来源

  • fault-tolerance.ts:68-180
  • fault-tolerance.ts:188-323

章节来源

  • fault-tolerance.ts:17-387

提示词工程与工具调用

  • 提示词模板:大纲/章节/小节/前言/后记系统提示词,严格格式约束
  • LLM工具:get_existing_chapters、get_book_outline、report_chapter_issue,支持在生成过程中动态获取上下文与反馈

章节来源

  • templates.ts:1-361
  • book-tools.ts:19-104

依赖分析

  • 组件耦合
    • 策略门面依赖策略选择器;策略实现依赖LangGraph与节点
    • 编排器依赖存储层与阶段管理器;存储层依赖Prisma与LLM服务
    • 容错层横切多个模块,提供统一的重试/超时/监控能力
  • 外部依赖

    • LangGraph:状态图与节点执行
    • Prisma:数据库访问
    • WebSocket:进度推送
    • LLM服务:提示词调用与工具调用

      graph LR
      Index["index.ts"] --> Sel["strategies/selector.ts"]
      Sel --> Strat["deep-plan-parallel.strategy.ts"]
      Strat --> Graph["graph.ts"]
      Graph --> Nodes["nodes/*.ts"]
      Nodes --> Templates["prompts/templates.ts"]
      Index --> Store["book-generator.store.ts"]
      Store --> Stage["stage-manager.ts"]
      Store --> FT["fault-tolerance.ts"]
      Store --> Tools["book-tools.ts"]
      Orchestrator["book-generator.service.ts"] --> Store
      Orchestrator --> Stage
      

图表来源

  • index.ts:18-91
  • selector.ts:6-77
  • deep-plan-parallel.strategy.ts:23-71
  • graph.ts:5-82
  • full-outline.node.ts:7-13
  • templates.ts:1-42
  • book-generator.store.ts:5-13
  • stage-manager.ts:6-8
  • fault-tolerance.ts:11-13
  • book-tools.ts:10-11
  • book-generator.service.ts:6-13

章节来源

  • index.ts:18-91
  • book-generator.service.ts:6-13

性能考虑

  • 并行策略:deep-plan-parallel通过“并行内容生成”显著缩短总耗时
  • 节点超时与重试:避免单点阻塞,提高吞吐
  • 进度只增不减:减少无效回退带来的重复计算
  • upsert批量创建:避免唯一约束冲突,降低写入竞争
  • 音频/视频合并:按父节点分组,减少I/O与状态切换

[本节为通用性能讨论,无需列出章节来源]

故障排查指南

  • AI调用失败
    • 现象:节点执行超时或最终失败
    • 处理:查看errorMsg记录,确认重试次数;必要时触发自动恢复
  • 生成卡住
    • 现象:长时间无进度更新
    • 处理:检查进度监控日志;若达到临界值,系统会尝试自动恢复
  • 章节状态异常
    • 现象:状态冲突或回退失败
    • 处理:使用regenerateChapter回退到上游阶段;系统会自动清理下游资源
  • 音频/视频生成失败
    • 现象:叶节点音频/视频URL为空
    • 处理:检查对应章节内容与genStage;必要时重新生成

章节来源

  • fault-tolerance.ts:188-323
  • stage-manager.ts:100-198
  • book-generator.service.ts:222-453

结论

本引擎通过策略门面与LangGraph工作流实现了可插拔的生成策略;通过阶段管理器与存储层确保状态一致性与数据完整性;通过容错层与监控保障大规模任务的稳定性;通过提示词工程与工具调用提升内容质量与可控性。推荐使用deep-plan-parallel策略以获得最佳的并发与质量平衡。

[本节为总结性内容,无需列出章节来源]

附录

如何启动生成任务

  • 通过API提交生成请求,传入bookId、topic、bookScale与可选genLevel
  • 引擎将根据策略与提示词生成大纲与内容,并推进阶段状态
  • 前端可通过WebSocket轮询进度

章节来源

  • index.ts:74-91
  • book-generator.service.ts:149-217

如何监控生成进度

  • 编排器在每个步骤开始与结束时推送进度
  • 进度包含步骤名、百分比与消息
  • 若长时间无更新,系统会发出警告并尝试自动恢复

章节来源

  • book-generator.service.ts:59-142
  • fault-tolerance.ts:188-261

如何处理生成失败

  • AI调用失败:重试+记录错误;最终失败时推进到failed阶段
  • 节点超时:通知用户并尝试自动恢复
  • 章节失败:使用regenerateChapter回退到上游阶段,清理下游资源

章节来源

  • fault-tolerance.ts:68-180
  • stage-manager.ts:100-198

与AI模型的集成方式

  • 通过callLLMWithMessages发送消息
  • 通过callLLMWithRetry实现重试与退避
  • 通过createBookTools提供工具调用(获取大纲、已写章节、问题上报)

章节来源

  • full-outline.node.ts:149-160
  • book-tools.ts:19-104
  • fault-tolerance.ts:68-123

提示词工程与质量控制

  • 严格格式约束:系统提示词要求返回合法JSON,禁止markdown与标签
  • 写作指令:富信息大纲为每个节点附加writingInstructions,提升内容一致性
  • 连贯性编辑:全局检查章节过渡、重复、术语统一与风格一致

章节来源

  • templates.ts:10-42
  • templates.ts:241-318
  • templates.ts:324-361