# LangGraph 本项目 vs OpenMAIC-main 实现对比与借鉴 ## 一、核心架构区别 | 维度 | LangGraph (本项目) | OpenMAIC-main | |------|-------------------|---------------| | **流程框架** | 使用 `@langchain/langgraph` 官方库,状态流由框架控制 | 自定义工作流,类似但非 LangGraph 库 | | **状态管理** | LangGraph StateGraph + Annotation,状态在节点间传递 | 内存 Map 存储状态,Phase 阶段控制 | | **执行模式** | 流式 `graph.stream()`,每个 step 可观测 | 顺序执行 + 回调 `onProgress` | --- ## 二、流程设计对比 ### LangGraph 流程 ``` generate_outline → write_chapters → write_foreword → write_afterword → END ``` - 固定顺序,无分支 - 节点返回 `Partial` 更新状态 ### OpenMAIC 流程 ``` initializing → researching → generating_outlines → generating_scenes → generating_media → generating_tts → persisting → completed ``` - 多个阶段,每个阶段有独立的 LLM 调用 - 支持条件跳过(如 enableWebSearch, enableImageGeneration) --- ## 三、提示词对比 ### LangGraph (本项目) #### 大纲生成提示词 ```typescript const prompt = `请为书籍《${state.topic}》设计大纲。 书籍规模:${scaleDesc[state.bookScale]} 请分析这个主题的复杂程度,决定合适的章节数量... 返回JSON格式: { "mainTheme": "主题一句话描述", "chapters": [...] } 请确保: 1. 章节数根据主题实际复杂度决定 2. 章节之间有清晰的逻辑递进关系` ``` #### 章节生成提示词 ```typescript `撰写《${state.topic}》第${chapterOutline.number}章。 章节:${chapterOutline.title},概述:${chapterOutline.summary}, 知识点:${chapterOutline.keyPoints.join(', ')}, 长度${chapterOutline.estimatedWords}字左右。直接输出正文:` ``` #### 特点 - 系统提示词非常简短:`你是专业的书籍作者,擅长撰写结构严谨、内容丰富、通俗易懂的作品。` - 用户提示词详细,包含完整的上下文信息 - 强调"直接输出"减少解析成本 ### OpenMAIC-main #### Agent Profile 生成 ```typescript const systemPrompt = `You are an expert instructional designer. Generate agent profiles for a multi-agent classroom simulation. Return ONLY valid JSON, no markdown or explanation.`; const userPrompt = `Generate agent profiles for a course with this requirement: ${requirement} Requirements: - Decide the appropriate number of agents based on the course content (typically 3-5) - Exactly 1 agent must have role "teacher"... Return a JSON object with this exact structure: {...}` ``` #### PBL System Prompt ```typescript // 完整的中文系统提示词,包含角色定义、模式系统、工作流程 `你是项目式学习(PBL)平台的教学助手(TA)。 你需要根据老师提供的课程信息,自主设计完整的学生小组项目。 ## 你的职责 设计一个完整的项目... ## 模式系统 你可以在不同模式间切换... - project_info:设置项目基本信息 - agent:定义项目角色 - issueboard:配置协作工作流和任务 - idle:表示项目配置完成的特殊模式 ## 工作流程 1. 在 project_info 模式中... ...` ``` #### 特点 - 系统提示词非常详细,包含完整的角色定义、工具说明、工作流程 - 用户提示词相对简洁,传递核心参数 - 强调结构化输出 (JSON) --- ## 四、核心差异总结 | 方面 | LangGraph (本项目) | OpenMAIC-main | |------|-------------------|---------------| | **系统提示词** | 简短,只描述角色 | 详细,包含完整的工作流、工具、模式说明 | | **用户提示词** | 详细,包含所有上下文 | 简洁,主要是参数传递 | | **输出格式** | 强调"直接输出正文" | 要求 "Return ONLY valid JSON" | | **状态传递** | LangGraph State + 数据库持久化 | 内存状态 + Phase 回调 | | **灵活性** | 固定流程 | 支持条件分支 (enableWebSearch等) | | **适用场景** | 书籍/章节生成 (线性) | 课堂/场景生成 (多阶段多任务) | ### 关键区别 1. **提示词设计哲学不同**: - 本项目:System 简单,User 详细 → 让 LLM 根据丰富上下文生成 - OpenMAIC:System 详细定义工作方式,User 简单传递参数 → 结构化引导 2. **状态管理方式**: - 本项目使用 LangGraph 官方状态流,状态通过 `Partial` 更新 - OpenMAIC 使用内存 Map + Phase 阶段控制 3. **执行粒度**: - 本项目按章节顺序执行,每个章节单独调用 LLM - OpenMAIC 按场景 (Scene) 并行/串行执行,支持媒体生成、TTS 等多个子阶段 --- ## 五、OpenMAIC 值得借鉴的地方 ### 1. 工具调用模式 (Tool Calling + MCP) **OpenMAIC 的做法:** ```typescript // 定义工具 + Zod 输入校验 const pblTools = { set_mode: tool({ description: '切换工作模式...', inputSchema: z.object({ mode: z.enum(['project_info', 'agent', 'issueboard', 'idle']), }), execute: async ({ mode }) => modeMCP.setMode(mode), }), create_agent: tool({ inputSchema: z.object({ name: z.string(), system_prompt: z.string(), }), execute: async (params) => agentMCP.createAgent(params), }), }; // 使用 Vercel AI SDK 的 generateText const result = await generateText({ model, tools, stopWhen: ({ finishReason }) => finishReason === 'tool-calls', }); ``` **借鉴价值:⭐⭐⭐⭐⭐** - 本项目的书籍生成是纯提示词驱动,LLM 只是按顺序生成内容 - 可以引入工具调用,让 LLM 在生成章节时能: - 查询相似内容避免重复 - 调用外部 API 获取最新信息 - 动态调整章节结构 --- ### 2. LangGraph 状态管理 (Annotation) **OpenMAIC 的做法:** ```typescript const OrchestratorState = Annotation.Root({ // 只读输入 messages: Annotation, availableAgentIds: Annotation, // 可变状态 currentAgentId: Annotation, turnCount: Annotation, agentResponses: Annotation({ reducer: (prev, update) => [...prev, ...update], default: () => [], }), }); ``` **本项目的做法:** ```typescript const GraphState = Annotation.Root({ bookId: Annotation, topic: Annotation, currentChapter: Annotation, finished: Annotation, // 缺少 reducer 和 default 工厂 }); ``` **借鉴价值:⭐⭐⭐** - 使用 `reducer` 合并更新,避免手动覆盖 - 添加 `default` 工厂函数,避免 undefined 问题 --- ### 3. AI SDK Adapter 封装 **OpenMAIC 的做法:** ```typescript // 将任意 LanguageModel 转换为 LangChain BaseChatModel export class AISdkLangGraphAdapter extends BaseChatModel { private languageModel: LanguageModel; async _generate(messages: BaseMessage[]): Promise { const aiMessages = convertMessages(messages); const result = await callLLM({ model: this.languageModel, messages: aiMessages }); return { generations: [{ text: result.text, message: new AIMessage(result.text) }] }; } } ``` **借鉴价值:⭐⭐⭐⭐** - 本项目直接用 axios 调用 LLM,缺少 LangChain 生态支持 - 可以封装为统一适配器,兼容多模型(OpenAI/Anthropic/本地模型) - 便于后续集成 LangChain 的输出解析、工具调用等能力 --- ### 4. 流式 JSON 解析 **OpenMAIC 的做法:** ```typescript import { parse as parsePartialJson, Allow } from 'partial-json'; import { jsonrepair } from 'jsonrepair'; // 增量解析流式 JSON 数组 for await (const chunk of result.textStream) { const parsed = parsePartialJson(buffer + chunk, { allow: Allow.Array }); // 实时提取完整项 } ``` **借鉴价值:⭐⭐⭐** - 本项目的章节生成是一次性返回完整 JSON - 对于大纲生成这种需要结构化输出的场景,流式解析能: - 边生成边校验,提前发现格式错误 - 提供更好的用户体验(实时展示进度) --- ### 5. 多 Agent 协调 (Director Graph) **OpenMAIC 的做法:** ``` START → director ──(next)→ agent_generate ──→ director (循环) │ └─(end)→ END // Director 根据 Agent 数量决定策略 - 单 Agent:纯代码逻辑,直接派发 - 多 Agent:LLM 决策下一个谁说话 ``` **借鉴价值:⭐⭐** - 本项目是单线生成(大纲 → 章节 → 前言 → 后记) - 如果要做"多 Agent 协作写书"(比如不同 Agent 写不同风格章节),可以借鉴这套协调机制 --- ### 6. 系统提示词设计 **OpenMAIC 的特点:** - 系统提示词非常详细,包含完整的工具说明、模式定义、工作流程 - 用户提示词简洁,只传递参数 - 强调 JSON 输出的结构约束 **借鉴价值:⭐⭐⭐** - 本项目的 System Prompt 太简短:`你是专业的书籍作者...` - 可以增加: - 输出格式约束(如"使用 JSON"、"用 markdown 格式") - 工具说明(如"遇到问题时返回 {error: ...}") - 风格指导(如"避免使用专业术语,保持通俗易懂") --- ## 六、总结:优先级建议 | 借鉴项 | 优先级 | 原因 | |--------|--------|------| | **AI SDK Adapter** | 高 | 统一多模型调用,为后续扩展打基础 | | **工具调用模式** | 高 | 让 LLM 有能力调用外部服务(搜索、数据库等) | | **Annotation 状态管理** | 中 | 更规范的类型定义和状态合并 | | **流式 JSON 解析** | 中 | 改善大纲生成的实时性 | | **系统提示词增强** | 中 | 提升输出质量 | | **多 Agent 协调** | 低 | 当前场景暂无需求 | --- *文档生成时间: 2026-04-12*