从零打造 AI 小说创作平台(五):AI 创作流水线(上)——六阶段编排设计
从零打造 AI 小说创作平台(五):AI 创作流水线(上)——六阶段编排设计
系列:从零打造 AI 小说创作平台 NovelForge
篇章:第 5 篇 / 共 10 篇
关键词:LangGraph、StateGraph、Human-in-the-loop、阶段流转、状态持久化
前言
这是整个项目最核心的模块。六阶段创作流水线让用户从一个想法出发,经过结构化的引导,最终生成完整的小说章节。每个阶段都有 AI 辅助,但用户始终保持决策权。
一、六阶段流程
阶段 1: 基础设定 (Foundation) ↓ 用户确认 阶段 2a: 总大纲 (Macro Outline) ↓ 用户确认 阶段 2b: 分卷大纲 (Volume Outline) ↓ 用户确认 阶段 2c: 章节小纲 (Chapter Outline) ↓ 用户确认 阶段 3: 情节校验 (Plot Validation) ↓ 用户确认/修改 阶段 4: 提示词组装 (Prompt Composer) [自动] ↓ 阶段 5: 章节写作 (Chapter Writer) [流式] ↓ 阶段 6: 修订优化 (Revise) ↓ 用户确认 → 下一章 / 完成二、架构决策:Service 层 + LangGraph
为什么不用纯 LangGraph interrupt?
原始设计是用 LangGraph 的interrupt_after+AsyncPostgresSaver实现 Human-in-the-loop。实际开发中发现几个问题:
- 前端需要细粒度控制:每个阶段的 AI 生成需要独立的 SSE 端点,用户可以选择"AI 生成"或"手动编辑"
- 状态需要业务层可见:前端需要随时查询当前阶段和历史数据
- 阶段间可能有复杂交互:比如基础设定更新后需要同步到项目表
最终方案:
| 层 | 职责 |
|---|---|
| Service 层 | 会话生命周期、阶段流转、状态持久化(JSONB) |
| LangGraph | 各阶段内部的 AI 调用编排(节点连接、条件路由) |
| 独立 SSE 端点 | 每个阶段的 AI 生成 |
三、PipelineState 定义
classPipelineState(TypedDict,total=False):# 基本信息user_id:strproject_id:strsession_id:strcurrent_stage:str# 阶段 1: 基础设定foundation:Optional[FoundationState]# 阶段 2: 大纲macro_outline:Optional[OutlineItem]volume_outlines:Optional[List[OutlineItem]]chapter_outlines:Optional[List[OutlineItem]]# 阶段 3: 情节校验validation_result:Optional[ValidationResult]# 阶段 4: 提示词prompt:Optional[PromptData]# 阶段 5: 章节写作draft:Optional[DraftData]# 阶段 6: 修订revision:Optional