Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | /** * 策略1 - Sequential(当前方案) * * 工作流: * plan_book → generate_outline → generate_sections → generate_subsections → write_chapters * * 特点: * 各环节串行执行,每个环节独立 AI 调用 * 调用量较大(~457 次 AI 调用/65章3层书) */ import { StateGraph, END } from '@langchain/langgraph'; import { GraphState } from '../graph'; import { planBookNode } from '../nodes/plan.node'; import { generateOutlineNode } from '../nodes/outline.node'; import { generateSectionsNode, generateSubsectionsNode } from '../nodes/sections.node'; import { writeChaptersNode } from '../nodes/content.node'; import { runGraphWorkflow } from './base'; import { GenerationStrategy } from './types'; export class SequentialStrategy implements GenerationStrategy { readonly name = 'sequential' as const; readonly description = '逐环节串行(当前方案):plan→outline→sections→subsections→content'; async generate( bookId: string, topic: string, bookScale: string, genLevel: number, userSpecifiedGenLevel?: number ): Promise<void> { console.log(`[Strategy-sequential] 开始, bookId=${bookId}, scale=${bookScale}, genLevel=${genLevel}, userSpecified=${userSpecifiedGenLevel}`); const workflow = new StateGraph(GraphState) .addNode('plan_book', planBookNode) .addNode('generate_outline', generateOutlineNode) .addNode('generate_sections', generateSectionsNode) .addNode('generate_subsections', generateSubsectionsNode) .addNode('write_chapters', writeChaptersNode) .setEntryPoint('plan_book') .addEdge('plan_book', 'generate_outline') .addEdge('generate_outline', 'generate_sections') .addEdge('generate_sections', 'generate_subsections') .addEdge('generate_subsections', 'write_chapters') .addEdge('write_chapters', END); const initialState: typeof GraphState.State = { bookId, topic, bookScale, genLevel, userSpecifiedGenLevel, userId: '', description: undefined, bookPlan: undefined, currentChapter: 0, completedChapters: [], finished: false, error: undefined, progress: 0, failedChapters: [], qualityPassed: true, rewriteCount: 0, maxRewriteCount: 3, qualityResult: undefined, }; await runGraphWorkflow(bookId, initialState, workflow); } } |