| 维度 | LangGraph (本项目) | OpenMAIC-main |
|---|---|---|
| 流程框架 | 使用 @langchain/langgraph 官方库,状态流由框架控制 |
自定义工作流,类似但非 LangGraph 库 |
| 状态管理 | LangGraph StateGraph + Annotation,状态在节点间传递 | 内存 Map 存储状态,Phase 阶段控制 |
| 执行模式 | 流式 graph.stream(),每个 step 可观测 |
顺序执行 + 回调 onProgress |
generate_outline → write_chapters → write_foreword → write_afterword → END
Partial<State> 更新状态initializing → researching → generating_outlines → generating_scenes →
generating_media → generating_tts → persisting → completed
const prompt = `请为书籍《${state.topic}》设计大纲。
书籍规模:${scaleDesc[state.bookScale]}
请分析这个主题的复杂程度,决定合适的章节数量...
返回JSON格式:
{
"mainTheme": "主题一句话描述",
"chapters": [...]
}
请确保:
1. 章节数根据主题实际复杂度决定
2. 章节之间有清晰的逻辑递进关系`
`撰写《${state.topic}》第${chapterOutline.number}章。
章节:${chapterOutline.title},概述:${chapterOutline.summary},
知识点:${chapterOutline.keyPoints.join(', ')},
长度${chapterOutline.estimatedWords}字左右。直接输出正文:`
你是专业的书籍作者,擅长撰写结构严谨、内容丰富、通俗易懂的作品。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)平台的教学助手(TA)。
你需要根据老师提供的课程信息,自主设计完整的学生小组项目。
## 你的职责
设计一个完整的项目...
## 模式系统
你可以在不同模式间切换...
- project_info:设置项目基本信息
- agent:定义项目角色
- issueboard:配置协作工作流和任务
- idle:表示项目配置完成的特殊模式
## 工作流程
1. 在 project_info 模式中...
...`
| 方面 | LangGraph (本项目) | OpenMAIC-main |
|---|---|---|
| 系统提示词 | 简短,只描述角色 | 详细,包含完整的工作流、工具、模式说明 |
| 用户提示词 | 详细,包含所有上下文 | 简洁,主要是参数传递 |
| 输出格式 | 强调"直接输出正文" | 要求 "Return ONLY valid JSON" |
| 状态传递 | LangGraph State + 数据库持久化 | 内存状态 + Phase 回调 |
| 灵活性 | 固定流程 | 支持条件分支 (enableWebSearch等) |
| 适用场景 | 书籍/章节生成 (线性) | 课堂/场景生成 (多阶段多任务) |
提示词设计哲学不同:
状态管理方式:
Partial<State> 更新执行粒度:
OpenMAIC 的做法:
// 定义工具 + 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',
});
借鉴价值:⭐⭐⭐⭐⭐
OpenMAIC 的做法:
const OrchestratorState = Annotation.Root({
// 只读输入
messages: Annotation<StatelessChatRequest['messages']>,
availableAgentIds: Annotation<string[]>,
// 可变状态
currentAgentId: Annotation<string | null>,
turnCount: Annotation<number>,
agentResponses: Annotation<AgentTurnSummary[]>({
reducer: (prev, update) => [...prev, ...update],
default: () => [],
}),
});
本项目的做法:
const GraphState = Annotation.Root({
bookId: Annotation<string>,
topic: Annotation<string>,
currentChapter: Annotation<number>,
finished: Annotation<boolean>,
// 缺少 reducer 和 default 工厂
});
借鉴价值:⭐⭐⭐
reducer 合并更新,避免手动覆盖default 工厂函数,避免 undefined 问题OpenMAIC 的做法:
// 将任意 LanguageModel 转换为 LangChain BaseChatModel
export class AISdkLangGraphAdapter extends BaseChatModel {
private languageModel: LanguageModel;
async _generate(messages: BaseMessage[]): Promise<ChatResult> {
const aiMessages = convertMessages(messages);
const result = await callLLM({ model: this.languageModel, messages: aiMessages });
return { generations: [{ text: result.text, message: new AIMessage(result.text) }] };
}
}
借鉴价值:⭐⭐⭐⭐
OpenMAIC 的做法:
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 });
// 实时提取完整项
}
借鉴价值:⭐⭐⭐
OpenMAIC 的做法:
START → director ──(next)→ agent_generate ──→ director (循环)
│
└─(end)→ END
// Director 根据 Agent 数量决定策略
- 单 Agent:纯代码逻辑,直接派发
- 多 Agent:LLM 决策下一个谁说话
借鉴价值:⭐⭐
OpenMAIC 的特点:
借鉴价值:⭐⭐⭐
你是专业的书籍作者...| 借鉴项 | 优先级 | 原因 |
|---|---|---|
| AI SDK Adapter | 高 | 统一多模型调用,为后续扩展打基础 |
| 工具调用模式 | 高 | 让 LLM 有能力调用外部服务(搜索、数据库等) |
| Annotation 状态管理 | 中 | 更规范的类型定义和状态合并 |
| 流式 JSON 解析 | 中 | 改善大纲生成的实时性 |
| 系统提示词增强 | 中 | 提升输出质量 |
| 多 Agent 协调 | 低 | 当前场景暂无需求 |
文档生成时间: 2026-04-12