AI课堂 OpenMAIC:从课程生成到课程运行时
从 OpenMAIC 的演进看一门 AI 课程如何成为可生成、运行和继续修改的对象。

OpenMAIC 这个 AI 学习方向的明星项目,我关注很久了,也早就想找个合适的机会写一写。上周,OpenMAIC 发布了 v1.0.0。我决定趁这个机会,来聊聊这个项目。
不做测评。我觉得,效果是现阶段最不需要担心的事情。模型能力和相关技术还在快速迭代,生成效果只会越来越好。即使现在还有一些瑕疵,后续迭代也会很快把它们补上。
这篇文章,我更想沿着 OpenMAIC 从首次公开到 v1.0.0 的演进路线,看看它对 AI 课堂的设计思路。
一、OpenMAIC 怎样一步步设计 AI 课堂

1. 起点:先把一门课定义成可以运行的对象
OpenMAIC 先用一组明确的对象定义一门课。
课程这个概念在代码中被表示为顶层对象 Stage。一个 Stage 由多个教学情境(Scene)组成;每个 Scene 又包含场景内容(SceneContent)、教学动作(Action)、白板与交互组件等共享环境,以及进入课堂的多个 Agent。
场景内容分为讲解页面、测验、互动活动和项目式学习四类。场景内容描述这一段课程提供什么活动,教学动作规定活动怎样发生。讲述、聚焦、讨论和修改白板都被写成可以生成、保存和执行的动作,Agent 通过这些动作作用于共同环境。
课程生成也遵循这套对象结构。系统先根据要求和材料规划整门课的场景大纲(Scene Outline),再生成各个教学情境的内容与动作。大纲保存教学目标、预计时长,以及测验难度、互动活动设计和项目式学习的目标技能;生成局部场景时,模型还会看到它在全课中的位置和此前的讲述。
这套两阶段生成与课程的对象结构一致:先确定一组彼此衔接的教学情境,再完成每个情境内部的活动。
课程生成完成以后,支持以实时调度模式(autonomous)或预生成回放模式(playback)运行。

实时调度时,课堂调度者(Director)决定下一回合由教师、助教或 AI 同学、学习者本人继续,还是结束当前讨论。轮到行动的 Agent 生成文本和候选教学动作,这些动作随后改变页面、白板或讨论状态。若调度结果指向学习者(USER),系统便等待学习者输入。
预生成回放模式(playback)不经过调度者的实时安排,直接读取课程中保存的动作序列(Scene.actions[]),按游标逐一执行。
两条路径共用同一套教学动作协议。无论动作来自实时 Agent,还是提前生成的课程脚本,最终都通过 Action 改变页面、白板、讨论或其他课堂状态。多个 Agent 的角色配置和行动方式也被写进了课程结构与运行流程。
2. 从讲解页面到可操作的互动环境
最初设计的 Action 已经包含讲述、聚焦、激光笔、播放视频、讨论和多种白板操作。2026 年 4 月的 v0.2.0 又将 Action 从 15 种增加到 20 种,让 AI 教师可以绘制和修改代码,也可以在交互组件中高亮、批注和揭示内容。
这些新增动作让 Agent 可以操作模拟器、游戏、3D 对象和代码环境,改变其中的状态,并让学习者观察操作产生的反馈。
交互形式因此变得更丰富,背后的设计变化则是 Agent 与课程对象的关系。它不再只讲解一个已经准备好的页面,也可以操作课程提供的环境。
3. v0.2.2:课程从生成结果变成可编辑文档
v0.2.2 加入可编辑大纲与 MAIC Editor。用户可以在完整生成前增删、修改和重排教学情境,也可以在生成后修改文字、图片与页面顺序。课程模式字段 StageMode 也增加了 edit。
进入 v0.3.0 以后,用户可以直接在画布上选择、拖拽和调整对象,AI 辅助编辑(Edit with AI)也可以通过经过校验的结构化补丁修改同一份课程文档。课程由一次生成的结果,变成可以长期保存和反复修订的文档。
OpenMAIC 随后把 Stage、Scene、Action 和内容结构提取为独立的课程描述语言(DSL)包 @openmaic/dsl。生成、编辑、渲染、导入和存储开始使用同一份课程文档契约,历史文档也可以经过校验和迁移继续使用。
课程中的图片、音频和其他媒体也逐步改用稳定的资源标识(Asset ID)引用,不再绑定某个生成供应商或临时文件地址。课程可以持续修改,它引用的资源也需要拥有自己的生命周期。
4. PBL v2:围绕学习者任务重组项目
v0.3.0 重写了项目式学习模块。早期 PBL 让学习者选择一个开发角色,沿着任务看板推进项目;遇到问题时向答疑 Agent 求助,再由判定 Agent 判断任务是否完成。
PBL v2 把组织重心移到学习者任务上。一项可验收的项目成果被拆成多个里程碑和微任务。里程碑表示完成成果所需的阶段,不能用教材章节代替;每个微任务都需要可以判断是否完成的标准。
面向学习者的 AI 队友随之减少,后台职责则被进一步拆分:Planner 设计任务,Instructor 提供支架,Evaluator 判断证据,Simulator 维持项目情境,而每个微任务都由学习者完成。
Instructor 可以解释背景、追问思路和提供提示,不能代替学习者完成任务,也不能在缺少提交与理解证据时宣布任务完成。
学习者留下回答、提交、错误和求助等过程证据后,学习水平引擎(Proficiency Engine)据此调整 Instructor 的帮助强度。项目目标、任务归属和完成标准保持不变。
5. v0.3.1—v0.3.2:课程文档与学习运行时分离
PBL v2 已经开始记录学习者的提交、评价和会话,但最初仍把这些运行数据和项目设计放在同一棵对象树中。v0.3.1 到 v0.3.2 将课程文档与学习运行时逐步分开:
| 课程文档 | 学习运行时 |
|---|---|
| 保存 Stage、Scene、Action 和课程设计 | 保存会话与学习者产生的记录 |
| 可以生成、编辑、导入和迁移 | 按发生顺序追加、完成和归档 |
| 描述课程现在是什么 | 保存某个学习者经历过什么 |
在代码中,课程文档由课程文档存储接口(DocumentStore)保存,学习过程中产生的记录由学习运行时存储接口(RuntimeStore)保存。后者包括 PBL 提交与评价、课堂聊天、测验作答和回放进度,并按发生顺序追加。课程后来即使被修改,已经发生的学习记录仍然保留。
课程文档与学习经历由此进入两条时间线:一条由生成、编辑和修订推动,另一条由学习者的回答、操作、提交和任务完成推动。
6. v1.0.0:从可编辑文档到 Agent 持续创作
到了 v1.0.0,OpenMAIC 加入课程创作工作台(Agent Workbench)。创作 Agent 可以读取材料、调用工具,直接创建或修改课程文档。
产品由此形成两条课程创作路径。一次生成模式(Classic Mode)适合需求明确的课程;持续创作工作台(Pro Workbench)则支持 Agent 围绕材料和课程文档进行多轮创作。
工作台没有另建一套课程格式。创作 Agent 调用工具,修改的仍是此前形成的课程文档;编辑器、资源体系和文档存储也继续围绕同一套对象结构工作。前几个版本建立的课程模型和编辑能力,到这里成为 Agent 参与课程创作的基础。
材料也不再只是生成时使用一次的输入。工作台为材料保留稳定标识,使 Agent 可以在持续的创作会话中反复查找和使用。创作过程本身也被保存下来,较长的任务可以取消或恢复,不必每次重新开始。
课堂 Agent 在教学情境中发言和操作,创作 Agent 则在课堂之外读取材料、调用工具并修改课程文档。OpenMAIC 的多 Agent 设计由此覆盖了课程创作与课程运行两个阶段。
二、OpenMAIC v1.0 的核心设计:让课程成为 AI 可以操作的对象
1. 从生成课程到操作课程
这里说的“操作”,和根据要求生成一份新内容不同。它意味着 AI 可以找到课程中的具体对象,在已有结构上采取行动,并让行动结果继续留在系统中。
OpenMAIC 为课程定义了对象、动作和状态。课堂 Agent 通过教学动作改变正在发生的课堂,创作 Agent 通过工具修改未来要运行的课程。前者作用于课程运行,后者作用于课程文档,两者操作的是同一门课程的不同状态。
因此,Agent Workbench 并不是把一个聊天框放到课程编辑器旁边。此前建立的课程结构、编辑能力、资源体系和存储边界,让 Agent 能够进入课程内部,持续完成局部修改。
2. AI 的操作能力与学习者的行动边界
AI 获得课程操作能力以后,另一个问题随之出现:哪些行动可以交给 Agent,哪些仍然属于学习者。
OpenMAIC 可以生成讲解、安排活动、操作环境、提供提示和评价提交,但学习者的回答、尝试、错误和任务成果仍要在课程运行中形成。系统可以改变帮助方式,不能预先制造这些学习证据。
这也是 OpenMAIC 多 Agent 设计中更重要的一层。它不只是让多个角色出现在课程里,而是为不同主体划分行动接口、权限和责任。
尽管从代码层面看不出来这些设计已经带来更好的教学效果,但这些代码清楚地表明,当 AI 开始进入课程,真正需要设计的不只是生成质量,还有 AI 可以操作什么、行动怎样留下结果,以及哪些事情必须由学习者亲自完成。
三、OpenMAIC 2.0 会是什么样?
我认为,向着 2.0 版本继续演进,OpenMAIC 可能会在设计和实现上发生下面这些转变。
1. 从课程文档到持续运行的课程系统
0.3.x 把课程建立成一份结构化文档:
Course = Stage + Scene + Action
围绕一门课程,现在已经出现课程文档、材料、媒体资源、创作会话、学习者会话、工具执行、运行事件和修订历史。后续,这些对象有可能被纳入同一门课程更系统的生命周期管理中。课程的定义也可能随之变成:
Course = Document + Materials + Assets + Runtimes + Revisions + Publications
在这样的结构里,课程就不再只是一份等待打开的 Stage/Scene 文档,而会成为一个拥有身份、状态、历史和持续生命周期的运行实体。
2. 两套运行时背后的统一内核
v1.0.0 已经形成两个彼此独立的运行时:
- 学习运行时(Learner Runtime)保存对话、作答、项目进度和回放记录。
- 创作 Agent 运行时(Authoring Agent Runtime)保存会话、事件、工具结果、取消与恢复状态。
两者处理的对象不同,却都需要表达会话、事件、参与者、状态和生命周期。沿着这种相似性继续发展,OpenMAIC 2.0 可能会抽出一套统一的运行时内核(Runtime Kernel):
RuntimeSession
RuntimeEvent
RuntimeActor
RuntimeJob
RuntimeCheckpoint
创作会话、学习会话、PBL 会话、渲染会话和 Agent 会话,可能成为同一套运行时内核之上的不同运行时配置(Runtime Profile)。
不同运行时可以共享会话、事件和生命周期管理等基础能力,同时保留各自的数据结构与运行规则。
3. 从课程描述语言到课程中间表示
我留意到,OpenMAIC 的视频导出已经出现了一条明确的处理路径:
Course → VideoTimeline IR → Render Pipeline → MP4
这条路径已经显露出课程编译器的雏形。如果继续扩展,2.0 的课程处理过程可能会变成:
Source Course → Validate → Normalize → Compile → Target Runtime
同一份课程中间表示(Course IR)可以进入不同的输出目标:
- 互动课堂
- 静态网页
- 视频
- PPTX
- SCORM / LMS 课程包
- 由 Agent 实时交付的课程
在这样的结构中,课程便不再等于某一种最终课件。它更像一份源文件,可以被编译成不同的交付形式,进入不同的运行环境。
4. 从保存到发布
当课程开始拥有多个版本、运行实例和学习记录,产品中的主要动作也会随之变化。v1.0 更接近“编辑并保存一门课程”,到了 2.0,课程可能会进入一条更完整的发布流程:
草稿 → 审阅 → 校验 → 发布 → 运行 → 观察 → 改进
课程版本、预览、回滚、发布历史、运行环境和兼容性检查,也会围绕这条流程逐步出现。
课程一旦被发布和运行,系统还需要知道哪一版课程被正式发布、每次学习会话使用的是哪一版。这样,后续编辑不会改变已经开始的课程,也能够还原学习者当时经历的内容。
5. 从软件包体系到无头平台(Headless Platform)
v1.0.0 已经把课程描述、生成、渲染、编辑和存储等能力拆成独立的软件包。如果这条拆分路线继续发展,OpenMAIC 将不再只由那个 Next.js Web 应用定义。
2.0 的架构定义会变成:
OpenMAIC = 平台
Web 应用 = 参考实现
相关开发者可以直接安装和组合这些软件包:
npm install @openmaic/*
再基于它们构建自己的 LMS、学习应用、培训系统或 Agent 产品。
6. 从工具与技能到扩展系统
v1.0.0 已经让工具(Tool)和技能(Skill)脱离一次性的 Agent 调用,开始拥有保存、加载和管理能力。沿着这条路线继续发展,它们很可能会被纳入一套正式的扩展系统(Extension System)。
最近我还注意到,OpenMAIC 团队正在开发 dsh-openmaic,尝试以插件形式把 OpenMAIC 的工具、技能和课程能力接入 DeepSeek Harness。
这项工作还不是 OpenMAIC 内部的扩展系统,却给这条推演增加了一个具体信号:工具、技能、渲染器和课程生成能力,正在从应用内部实现变成可以独立声明、加载和组合的能力。
沿着 DeepSeek Harness 的插件化思路继续推演,OpenMAIC 2.0 很可能会出现正式的扩展模型:
Extension
├── Skill
├── Tool
├── Provider
├── Renderer
├── Importer
└── Runtime Capability
每个扩展通过扩展清单(Manifest)声明名称、版本、权限、工具、技能和运行要求。
安装一个扩展,也不再只是增加一段提示词,而可能是在 OpenMAIC 中加入新的课程对象、内容来源、操作方式或运行环境。插件由此从代码层面的扩展方式,变成可以直接安装和调用的课程能力。
以上这些判断,只是我基于 OpenMAIC v1.0.0 的设计与实现所做的个人分析。
沿着这些判断继续往前看,2.0 的 OpenMAIC,其中心可能会由 Web 应用逐渐转向课程运行时(Course Runtime)。它也可能不再只是一款 AI 课堂应用,而是进一步成为一套 AI 课程的运行与开发平台。
