Heidi Labs
GitHub TrendingGitHub Trending 项目约 53 分钟21,032 字

OpenMAIC:一键生成多智能体互动课堂

本文目录

OpenMAIC(开放多智能体互动课堂)#

一键获得沉浸式、多智能体学习体验

English | 简体中文

在线演示 · 快速开始 · Lemonade · FunASR · 功能特性 · 使用场景 · OpenClaw

🗞️ 新闻#

2026-10-29 — v1.3.0:知识库与 Pro 工作台升级。每次上传都会保存在所有者自己的知识库中,直到被删除;上传内容按文件夹组织,并且每轮对话只解析一次;输入框可通过 @ 引用知识库,智能体可以读取、搜索和整理它。在 Pro 工作台中,请求在第一页生成之前就会展示智能体工作过程的预览,课堂标签页可在「学习」(Learn)与「编辑」(Edit)之间切换。本次升级有发布条件(先停止所有旧实例;无法回滚到 1.3.0 以下版本),因此升级前请阅读更新日志。

2026-10-18 — v1.2.1:网络研究。Kimi、DeepSeek 和 Firecrawl 作为网络搜索提供商加入;新增 webFetch 槽位,让智能体通过托管读取器(DeepSeek、Kimi 或 Firecrawl)而非内置读取器来读取网页;以上功能均需主动开启。课堂聊天可以提供建议回复,已下线模型会从内置模型目录中移除。课堂聊天现在始终运行在 Pi 上,并且需要一个支持工具调用(tool calling)的课堂模型;升级前请阅读该版本的破坏性变更(Breaking Changes)。

2026-10-16 — v1.2.0:服务端优先模式已稳定。生成在服务端运行,即使关闭标签页或服务重启也不会中断;模型在 openmaic.yml 中一次性配置(含默认值、锁定项,以及禁止用户自带密钥的选项);素材一经附加即刻解析;Web 应用与 API 共用同一套流水线。新增:课堂导出,可导出为保留每个场景的 PPTX,或导出为一个可离线播放整节课的 HTML 文件。该版本需要 PostgreSQL 和常驻服务器;Vercel 部署仍停留在 1.1.x。升级前请阅读「从 1.1.x 升级」。

2026-09-28 — v1.1.2:安全 — 提供商请求仅连接经过校验的地址,并拒绝重定向(GHSA-g87c-cm4q-cw5x)。

2026-09-27 — v1.1.1:安全 — 加固 MinerU Cloud 解析(GHSA-cpjc-vgjh-c5jp)。

2026-09-24 — v1.1.0:智能体课堂聊天(可针对任意幻灯片元素、互动模块或白板绘画提问);设置围绕课程工作流重建;支持 Token Plan 接入。

2026-09-15 — v1.0.3:安全 — 访问码令牌会过期、渲染服务网络策略、音频连接固定、Next.js 远程代码执行(RCE)补丁。

2026-09-14 — v1.0.2:安全 — 修复 SSRF 与 DNS 重绑定问题,修复课堂覆盖问题。

2026-09-06 — v1.0.1:安全性与稳定性;收紧两项默认设置。

2026-08-27 — v1.0.0:智能体工作台、持久化会话、可复用技能、会话素材、提供商中立的能力。

更早的版本

2026-08-14 — v0.3.2:视频导出加固、服务端持久化与资源注册表、@openmaic/generation、四种新语言区域(locale)、FunASR。

2026-07-21 — v0.3.1:一键导出 MP4、直接编辑幻灯片、更智能的「用 AI 编辑」、扩展文档解析。

2026-06-28 — v0.3.0:基于项目的学习(Project-Based Learning, PBL)v2、「用 AI 编辑」编辑器智能体、@openmaic/* SDK 发布至 npm、重新授权为 MIT 许可。

2026-06-02 — v0.2.2:MAIC 编辑器专业模式、可编辑大纲、离线课堂导出。

2026-04-26 — v0.2.1:支持声音克隆的 VoxCPM2 文本转语音(TTS)、按模型配置思考模式、课程完成页。

2026-04-20 — v0.2.0:深度互动模式 — 3D、模拟、游戏、思维导图、在线编程。

2026-04-14 — v0.1.1:语言推断、ACCESS_CODE、课堂 ZIP 导出/导入、Ollama。

2026-03-26 — v0.1.0:讨论 TTS、沉浸模式、键盘快捷键。

完整历史见更新日志。

📖 概述#

OpenMAIC(Open Multi-Agent Interactive Classroom,即「开放多智能体互动课堂」)是一个开源 AI 平台,可将任意主题或文档转化为内容丰富、互动性强的课堂体验。它由多智能体编排(multi-agent orchestration)驱动,能够生成幻灯片、测验、互动模拟和基于项目的学习(Project-Based Learning, PBL)活动——所有这些都由 AI 教师和 AI 同学呈现,它们能说话、在白板上绘图,并与你进行实时讨论。内置的 OpenMAIC Skill 既可与 OpenClaw 配合使用,也可用于 Codex、DeepSeek、WorkBuddy 等智能体工作台,因此你可以从飞书、Slack 或 Telegram 等即时通讯应用,或直接在 IDE 中生成课堂。

v1.0.1.-compressed.mp4

亮点#

  • 一键生成课程 — 描述一个主题或附上你的材料,AI 可在几分钟内构建完整课程
  • 多智能体课堂 — AI 教师与同学实时授课、讨论并与你互动
  • 丰富场景类型 — 幻灯片、测验、交互式 HTML 模拟和基于项目的学习(PBL)
  • 白板与 TTS — 智能体绘制图表、书写公式并出声讲解
  • 随处导出 — 保留全部场景的 .pptx、可播放整节课的单个离线 .html 文件,或用于迁移到其他部署的课堂 ZIP 包
  • 智能体工作台集成 — OpenMAIC Skill 支持 OpenClaw、Codex、DeepSeek、WorkBuddy 等,可从飞书、Slack、Telegram 等 20 多个即时通讯应用或 IDE 中生成课堂

🚀 快速开始#

前置条件#

  • Node.js >= 22.19
  • pnpm >= 10
  • PostgreSQL 16 — 课程存储在服务端。本地开发时,pnpm db:up 会为你用 Docker 启动一个实例。

1. 克隆与安装#

git clone https://github.com/THU-MAIC/OpenMAIC.git
cd OpenMAIC
pnpm install

2. 配置#

cp .env.example .env.local # API keys and server options
cp openmaic.example.yml openmaic.yml # which models the server uses

复制出的示例只需在 .env.local 中填入 OPENAI_API_KEY(或将其提供商改为你有密钥的那一家);其余内容在你需要之前都处于注释状态。openmaic.yml 声明提供商(provider,即服务器可调用的账号),并为每个槽位(slot,即一处 AI 用途:大纲、幻灯片内容、文本转语音、网络搜索等)指定一个模型。密钥保留在 .env.local 中,并以 ${VAR} 的形式引用:

providers:
  openai:
    preset: openai
    apiKey: ${OPENAI_API_KEY} # OPENAI_API_KEY=sk-... in .env.local
  anthropic:
    preset: anthropic
    apiKey: ${ANTHROPIC_API_KEY}

slots:
  llm: openai:gpt-5.5 # the default chat model
  course.outline: anthropic:claude-sonnet-4-6
  video: null # turn a capability off

你写入的槽位即服务端的默认设置;除非你锁定它们或设置 allowUserKeys: false,否则用户可以在应用的模型设置中修改它们,或接入自己的服务。服务器会在启动时校验该文件,并针对每处错误指出其字段名(若是 YAML 语法错误,则指出行号)。

想了解阅读
槽位、预设、回退、锁定、allowUserKeys、OPENMAIC_SECRET_KEY配置
所有提供商预设与模型 ID支持的模型
升级:provider 变量、server-providers.yml、DEFAULT_MODEL 与 MODEL_FALLBACK 在没有 openmaic.yml 时仍可用;MODEL_ROUTES 必须改为槽位从旧版配置迁移
用户可选哪些模型:由服务器持有密钥、且选中某个上游模型的提供商,只提供其 models 列表(*_MODELS)中的模型,外加槽位模型、默认模型和回退模型模型授权

提供商:OpenAI、Azure OpenAI、Anthropic、Amazon Bedrock、Google Gemini、DeepSeek、Qwen、Kimi、MiniMax、Grok(xAI)、OpenRouter、TokenDance、Doubao、腾讯混元/TokenHub、小米 MiMo、GLM(智谱)、Ollama、Lemonade 与 FunASR(本地),以及任何兼容 OpenAI 的 API。

提示

推荐配置:OpenMAIC 在开启全部模态时表现最佳——生成的插图、旁白、视频片段、网络搜索和网页抓取。Token 套餐可用一个密钥配置其支持的能力(见下方示例)。请选择快速的长上下文模型作为默认模型,例如 deepseek-v4.1-flash。

更多示例:Token 套餐、小米 MiMo 与 GLM、Amazon Bedrock

MiniMax Token 套餐快速示例(一个密钥即可用于对话、图像、视频、TTS 和网络搜索;TokenDance 用法相同):

providers:
  minimax:
    preset: minimax
    apiKey: ${MINIMAX_API_KEY}

slots:
  llm: minimax:MiniMax-M3
  image: minimax # a provider id alone: the plan's default model
  video: minimax
  tts: minimax
  webSearch: minimax

TokenDance 快速示例,使用快速长上下文的默认模型:

providers:
  tokendance:
    preset: tokendance
    apiKey: ${TOKENDANCE_API_KEY}

slots:
  llm: tokendance:deepseek-v4.1-flash
  image: tokendance
  video: tokendance
  tts: tokendance
  webSearch: tokendance

小米 MiMo Token 套餐与 GLM(智谱)快速示例:

providers:
  mimo:
    preset: xiaomi
    apiKey: ${MIMO_API_KEY}
    baseUrl: https://token-plan-cn.xiaomimimo.com/v1
  glm:
    preset: glm
    apiKey: ${GLM_API_KEY}
    baseUrl: https://open.bigmodel.cn/api/paas/v4 # or https://api.z.ai/api/paas/v4

slots:
  llm: mimo:mimo-v2.5-pro
  course.content: glm:glm-5.1

新加坡或欧洲的 Token 套餐集群请使用 https://token-plan-sgp.xiaomimimo.com/v1 或 https://token-plan-ams.xiaomimimo.com/v1。

Amazon Bedrock 快速示例:

providers:
  bedrock:
    preset: bedrock
    models: [us.anthropic.claude-sonnet-5, us.anthropic.claude-opus-4-8]

slots:
  llm: bedrock:us.anthropic.claude-sonnet-5

Bedrock 使用 AWS 环境凭证或 AWS SDK 凭证提供程序链,区域取自 BEDROCK_REGION(例如在 .env.local 中设置 BEDROCK_REGION=us-east-1)。如需临时凭证,请设置 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 和 AWS_SESSION_TOKEN,或使用运行时可用的 AWS 配置文件 / 角色。

3. 启动数据库#

pnpm db:up

然后在 .env.local 中取消注释本地 DATABASE_URL 那一行:

DATABASE_URL=postgres://openmaic:openmaic-dev@127.0.0.1:5432/openmaic

pnpm db:up 会在 127.0.0.1:5432 上启动一个开发用 PostgreSQL(可用 OPENMAIC_DB_PORT 指定其他端口)。它是一个独立的 Compose 项目 openmaic-dev-db,供本机上每个代码检出共用,拥有自己的容器和卷,因此绝不会触碰 docker compose up 栈所用的数据库。pnpm db:down 会停止它并保留数据。其他任何 PostgreSQL 也都可以使用。

4. 运行#

pnpm dev

打开 http://localhost:3000 开始学习!如果没有 DATABASE_URL,服务器将拒绝启动,并告知你如何提供(见「服务端持久化」)。

5. 生产构建#

pnpm build && DATABASE_URL=postgres://... pnpm start

请让服务器作为长期运行的进程持续运行(使用进程管理器或容器):课程生成在其内部运行,浏览器离开页面后仍会继续。所需配置以及从 1.1.x 升级的说明请参阅部署指南。

Docker 部署#

cp .env.example .env.local
# Edit .env.local with your API keys, then:
docker compose up --build

打开 http://localhost:3000。该栈由两个容器组成:应用与 PostgreSQL。课程、生成的媒体和运行时会话存放在名为 openmaic-postgres 和 openmaic-data 的命名卷中,它们能在 docker compose down 和重建后保留;docker compose down -v 会删除它们。若要用 openmaic.yml 配置模型,请基于 openmaic.example.yml 创建该文件,并在 docker-compose.yml 中取消其挂载注释;否则在应用运行后,在模型设置中连接一个模型服务。

该 Compose 文件面向个人安装:它以单用户模式运行(每个浏览器看到的是同一个共享资源库),并且只监听 127.0.0.1:3000。若要供其他机器访问,请先加以保护:

  • 在 .env.local 中设置一个足够长的随机 ACCESS_CODE(详情)。没有它,任何能访问该端口的人都能拥有、编辑并删除整个资源库。
  • 首次启动前,将 PERSISTENCE_POSTGRES_PASSWORD 设置为由字母和数字组成的随机值。

发布到网络地址:

OPENMAIC_PUBLISH_ADDRESS=0.0.0.0 docker compose up -d --build

OPENMAIC_PUBLISH_ADDRESS、OPENMAIC_PORT 和 PERSISTENCE_POSTGRES_PASSWORD 来自你的 shell 或 docker-compose.yml 旁的 .env 文件,而不是 .env.local。关于覆盖 Compose 默认值、轮换数据库密码以及完整的升级说明,见「托管与身份」。

重要

升级 Compose 部署?PostgreSQL 现在总是启动,应用只发布在 127.0.0.1 上,且每个访问者都是同一个所有者。如果 .env.local 设置了 PERSISTENCE_SHARED_OWNER_ID,还需设置 OWNER_SINGLE_USER=false,否则应用会拒绝启动。请先阅读「升级 Compose 部署」。

慢速网络 / 中国区构建加速#

Docker 构建支持两个可选构建参数。二者默认为空,因此上面的标准命令仍使用上游 Alpine 与 npm 仓库。

  • ALPINE_MIRROR 是 Alpine 镜像主机名,不含 https://。
  • NPM_REGISTRY 是完整的 npm 仓库 URL。

仅使用公共镜像端点。不要在这些构建参数中嵌入用户名、密码或访问令牌,因为 Docker 可能会将它们记录在镜像元数据或构建来源信息中。

使用 Docker Compose:

ALPINE_MIRROR=mirrors.tuna.tsinghua.edu.cn \
NPM_REGISTRY=https://registry.npmmirror.com \
docker compose up --build

直接构建镜像:

docker build \
  --build-arg ALPINE_MIRROR=mirrors.tuna.tsinghua.edu.cn \
  --build-arg NPM_REGISTRY=https://registry.npmmirror.com \
  -t openmaic:local .

这些参数不会加速 Docker Hub 拉取,包括 Dockerfile 前端和 node:22-alpine 基础镜像。如果这些拉取很慢,请单独配置 Docker 守护进程的仓库镜像。pnpm 存储缓存会被同一个 BuildKit 构建器在多次构建间复用,受常规缓存垃圾回收影响;该缓存仅提升性能,并非构建正确性的必要条件。

Vercel 部署(最高支持 1.1.x)#

无服务器部署最高支持 OpenMAIC 1.1.x。从 1.2.0 起,课程生成在服务端的、生命周期长于请求的进程中运行,因此 OpenMAIC 需要带 PostgreSQL 的长期运行 Node.js 进程(Docker 部署或 pnpm start);Vercel 及其他无服务器托管平台不受支持,仓库也不再提供 vercel.json。要在 Vercel 上部署 1.1.x:

  1. 在 GitHub 上 Fork 本仓库,取消勾选「仅复制 main 分支」。
  2. 在 Fork 中,将默认分支设置为 release/1.1.x(Settings → General → Default branch)。
  3. 在 Vercel 中,选择 Add New → Project 并导入该 Fork。Vercel 会构建其默认分支;请按该分支 .env.example 的说明至少配置一个 LLM 提供商密钥。

这样的部署之后可以迁移到长期运行的主机而不会丢失数据:如果原部署使用了数据库,将新主机的 DATABASE_URL 指向它所用的数据库,并在同一地址上提供服务,因为浏览器按站点保存数据;访问者浏览器中保留的课程会在每个浏览器首次打开升级后的应用时导入。各种部署类型的说明见「从 1.1.x 升级」。

服务端持久化(PostgreSQL)#

OpenMAIC 将课程保存在服务端。课程文档、文件夹、聊天历史、学习者会话和生成的媒体存放在 PostgreSQL 中(媒体可选存放在 S3),由应用自身通过 /api/persistence 提供。浏览器只保留属于该设备的内容,例如设置、播放位置和缓存;「设置 → 清除本地缓存」绝不会触碰服务端。

DATABASE_URL 是必需的。没有它,服务器会打印修复方法并以退出码 1 退出。Compose 会为你设置;开发时可用 pnpm db:up 启动数据库。

旧版本保留在浏览器中的课程,会在每个浏览器首次打开升级后的应用时自动导入一次。浏览器中的副本保持原样。

无效的设置会在启动时以一行 [boot] 原因让服务器停止,而不是让服务器对每个请求都返回 500。

课程归谁所有。每个请求都会解析到一个所有者,每个所有者都有自己的资源库。请选择一种身份模式:

模式设置资源库
单用户(Compose 默认)OWNER_SINGLE_USER=true所有能访问服务器的人共用一个资源库;用 ACCESS_CODE 或回环地址加以保护
共享团队PERSISTENCE_SHARED_OWNER_ID=<id> 与 ACCESS_CODE 一起设置访问码之后的团队共用一个资源库
匿名(两者都未设置时的默认)无每个浏览器 Cookie 对应一个资源库;第二个浏览器看到的是空库
自建账号在 instrumentation.ts 中注册的所有者认证方式每个已登录账号对应一个资源库

请在 1.2.0 首次启动之前设定模式:1.1.x 以文件形式保存的课堂会导入给当时配置的所有者。各种部署类型的说明见「从 1.1.x 升级」。

要为其他人运行 OpenMAIC,或把它嵌入自己的产品?「托管与身份」涵盖:

  • 谁可以读写已存储的数据,以及已被移除的 PERSISTENCE_DEV_TOKEN;
  • 资源收集、配额和 S3 出口(ASSET_*);
  • 每一项启动检查;
  • 所有者身份:单用户模式、注册认证方式、签名的 JWT 网关方案以及认领匿名工作;
  • 用于课程创建、资源库、上传和资源字节存储的主机扩展钩子。

可选:ACCESS_CODE(共享部署)#

在 .env.local 中用站点级密码保护部署:

ACCESS_CODE=your-secret-code

请使用随机生成器生成至少 16 个字符的长随机值:它是保护该部署的唯一密钥。之后访问者会看到密码提示,每个 API 路由也会受到保护。当它未设置时(.env.example 中的默认情况),middleware.ts 不检查任何凭证,包括 API 在内的每条路由都可访问:未配置的部署没有门禁,也不存在第二道防护点。该访问码会以签名的 HttpOnly Cookie 记住 7 天;只有在可信代理后并设置 TRUST_PROXY_HEADERS=true 时,尝试才会被限流。见「配置 → ACCESS_CODE」。

可选:Agent 工作台与运行时#

Pro 工作台是从首页进入的课程构建界面,默认关闭。请开启其构建时入口和服务端运行时;它与应用其余部分使用同一个 PostgreSQL:

NEXT_PUBLIC_PRO_WORKBENCH_ENABLED=true
OPENMAIC_AGENT_RUNTIME_ENABLED=true
DATABASE_URL=postgres://openmaic:openmaic-dev@postgres:5432/openmaic

智能体运行在 agent 槽位上,除非另行指定,否则它跟随默认对话模型,且需要一个支持工具调用的模型:

slots:
  llm: openai:gpt-5.5
  agent:
    model: openai:gpt-5.5
    api: openai-completions # or openai-responses

智能体槽位不得设置 thinking.effort。其路由、DEFAULT_MODEL 注意事项以及运行器调优见「托管与身份」。

可选:Lemonade(本地 AI 提供商)#

OpenMAIC 支持 Lemonade 作为本地的、兼容 OpenAI 的提供商,用于 LLM、图像生成、TTS 和 ASR。无需 API 密钥。

在本地运行 Lemonade,然后让 OpenMAIC 指向它:

providers:
  lemonade:
    preset: lemonade
    baseUrl: http://localhost:13305/v1
  lemonade-tts:
    preset: lemonade-tts
    baseUrl: http://localhost:13305/v1
  lemonade-asr:
    preset: lemonade-asr
    baseUrl: http://localhost:13305/v1
  lemonade-image:
    preset: lemonade-image
    baseUrl: http://localhost:13305/v1

slots:
  llm: lemonade:Gemma-4-26B-A4B-it-GGUF
  tts: lemonade-tts
  asr: lemonade-asr
  image: lemonade-image

若使用旧版变量,则对应为 LEMONADE_BASE_URL、TTS_LEMONADE_BASE_URL、ASR_LEMONADE_BASE_URL 和 IMAGE_LEMONADE_BASE_URL。

可选:FunASR(本地语音识别)#

OpenMAIC 可以通过 FunASR 的兼容 OpenAI 的服务器在本地转写语音。内置提供商支持 SenseVoiceSmall、Paraformer 和 Fun-ASR-Nano,且无需 API 密钥。

python -m pip install torch torchaudio
python -m pip install "funasr==1.4.0" fastapi uvicorn python-multipart
# Add vLLM for Fun-ASR-Nano on NVIDIA GPUs
python -m pip install vllm
funasr-server --device cuda --model fun-asr-nano

让 OpenMAIC 指向该服务器:

providers:
  funasr:
    preset: funasr-asr
    baseUrl: http://localhost:8000/v1

slots:
  asr: funasr

(旧版变量:ASR_FUNASR_BASE_URL=http://localhost:8000/v1。)

仅使用 CPU 的配置请使用 funasr-server --device cpu --model sensevoice。生产环境选项见 FunASR 部署指南。

可选:本地音视频提取#

OpenMAIC 可以在本地提取带时间戳的转写文本和预处理后的视频关键帧。请安装系统 ffmpeg 包,使 ffmpeg 和 ffprobe 都能在 PATH 中执行,然后如上所述分配 asr 槽位(例如 FunASR、Lemonade 或 OpenAI)。应用会在提取时解析可执行文件;ffmpeg 不是 npm 依赖,也不是启动或使用 OpenMAIC 的必需项。

如果可执行文件不可用,本地提取器会被跳过。已配置的 AliDocMind 提供商仍可作为云端提取路径使用。当本地 ffmpeg 提取与 AliDocMind 都不可用时,音视频素材会被标记为失败,并附上可操作的设置提示,而不是挂起或以空转写完成。

可选:MP4 视频导出(渲染服务)#

「导出视频」菜单完全在浏览器中构建一个自包含的 Hyperframes 项目。要将其转为 MP4,需要在 Node 22 上使用 Chromium + FFmpeg,因此它运行在隔离的 render-service 容器中,而不是应用中。

此功能需主动开启。使用 video-export Compose 配置文件启动它:

docker compose --profile video-export up --build

应用会通过 RENDER_SERVICE_URL(已在 docker-compose.yml 中预设)自动检测该服务,并启用一键 MP4 渲染。未启用该配置文件——或 RENDER_SERVICE_URL 未设置时——导出会降级为下载项目 ZIP 以供本地 CLI 渲染。独立安装与调优(RENDER_MAX_CONCURRENCY 等)见 render-service/README.md。升级时,请将 render-service 与应用一同升级,或先于应用升级:渲染任务与其所有者绑定,新旧版本混用会以失败关闭(fail closed)。

可选:MinerU(高级文档解析)#

MinerU 为复杂表格、公式和 OCR 提供增强解析。你可以使用 MinerU 官方 API,或自托管实例。

在 openmaic.yml 中声明它并将 document 槽位分配给它:官方 API 用 mineru-cloud,自托管实例用 mineru 并设置其 baseUrl。

providers:
  mineru:
    preset: mineru-cloud
    apiKey: ${PDF_MINERU_CLOUD_API_KEY}

slots:
  document: mineru

不使用 openmaic.yml 时,.env.local 中的旧版变量 PDF_MINERU_CLOUD_API_KEY 或 PDF_MINERU_BASE_URL 仍然有效。

可选:VoxCPM2(自托管 TTS 与声音克隆)#

VoxCPM2 是 OpenBMB 推出的、支持声音克隆的开源 TTS 模型。OpenMAIC 内置适配器;在你自己的硬件上运行 VoxCPM,OpenMAIC 即可与它通信。

  1. 运行 VoxCPM 后端。共有三种部署方式,它们都位于同一个 OpenMAIC 适配器之后。你在 openmaic.yml 中通过 options.backend 选择(第 2 步)。
后端端点适用场景
vLLM-Omni/v1/audio/speech兼容 OpenAI 的语音端点,适合 GPU 服务器
Python API/tts/upload通过 FastAPI 运行的官方 VoxCPM Python 运行时
Nano-vLLM/generate轻量级 Nano-vLLM FastAPI 部署

后端安装见 VoxCPM 仓库。

  1. 让 OpenMAIC 指向它。VoxCPM2 运行在你自己的网络中,因此由部署方在 openmaic.yml 中配置(无需 API 密钥);工作区无法在「设置 → 模型服务」中添加它:
providers:
  voxcpm:
    preset: voxcpm-tts
    baseUrl: http://localhost:8000/v1
    options:
      backend: vllm-omni # vllm-omni (default) | python-api | nano-vllm

slots:
  tts: voxcpm

声音注册仅在 vllm-omni 后端上有效;python-api 和 nano-vllm 会在每次请求时发送声音提示词。

不使用 openmaic.yml 时,旧版 TTS_VOXCPM_BASE_URL=http://localhost:8000/v1 可设置端点,但无法选择后端。

  1. 管理声音。将 VoxCPM2 分配到 tts 槽位后,打开「设置 → 模型服务 → 文本转语音 → VoxCPM2」(仅当 tts 解析为 voxcpm-tts 提供商时才会出现声音管理器)。共有三种声音模式:
  • 自动声音(默认):OpenMAIC 在合成时根据每个智能体的人格生成声音提示词。无需设置。
  • 提示词声音:用自然语言描述声音,例如「温暖的女性教师声音,平静而鼓励,中等音高」。
  • 克隆声音:上传一段简短的参考音频,或在浏览器中录制一段。该片段存储在此浏览器中(IndexedDB),并在每次合成时发送到你的 VoxCPM 后端。

✨ 功能特性#

Agent 工作台与 Pro 模式(v1.0.0)#

工作台为 OpenMAIC 增加了一个对话式课程构建智能体。其持久化会话可在工作进程重启后恢复,在运行中接受后续指令,并向聊天界面流式传输可回放的事件历史。

从首页的 Pro 控件进入。工作区将可折叠的临时文件夹/对话侧栏、聊天窗格,以及以标签页形式保留已打开课程的课堂窗格组合在一起。工作区控件可返回经典模式;无论从哪个入口进入,都受公开的工作台开关以及已配置的服务端运行时控制。

智能体通过明确、经过校验的工具来工作,而不是编辑不透明的数据块:

领域能力
规划与组织规划多课节课程体系;创建课程与文件夹;重命名和移动课程
构建与编辑读取/搜索舞台 DSL;原子化修改单个场景;生成、复制、插入、删除和重排页面;编辑旁白与幻灯片组结构
使用素材上传文件;提取文档、音频和视频;搜索提取出的文本;抓取可信网页 URL;复用素材中的媒体
创建媒体通过配置的服务端提供商生成图像和视频;生成旁白音频
导入与检查导入保留布局的 .pptx 幻灯片;在可用时渲染场景预览以进行可视化检查
配置课堂列出可用声音、设置智能体阵容,并在配置了可插拔注册适配器时克隆/注册声音

二十四个内置技能覆盖课程规划、深度研究、互动式、讲授式、工作坊式、职业式及其他教学风格,以及幻灯片/舞台制作、PPTX 导入、编辑和样式复用。用户编写的技能按所有者分别存储,可通过同一运行时创建、读取和修补。

服务端工作台还提供按所有者划分的文件夹路由,以及按查看者划分的舞台元数据附属文件(sidecar),用于记录所有权、发布状态和生成完成状态。舞台 ID 充当读取未删除课程的凭证,但舞台变更仍仅限其所有者操作。素材上传协议会先保存受支持的源文件字节,再通过带租约隔离(lease-fenced)的文档或媒体提取,记录派生出的文本与图像;媒体提取可选择 AliDocMind,或可选的本地 ffmpeg/ffprobe 提供商。

在底层,智能体会话由数据库支撑,具备租约、心跳、崩溃恢复、取消和后续引导能力;由数据库维护的修订计数器使每个舞台和每个场景的新鲜度保持单调递增,因此工作台只会重新获取发生变化的场景。服务端路由以提供商中立的方式解析 LLM、媒体、ASR/TTS 和搜索配置:凭证永远不会到达浏览器;统一的 <CAP>_<PREFIX>_ENABLED=false 开关可强制关闭任何已提供的能力;启动校验会就错误的模型配置发出警告;无法解析的模型路由会明确报错,而不是猜测厂商。

可插拔存储#

OpenMAIC 将课程文档、学习者运行时记录和资源存储在服务端的 PostgreSQL 中。@openmaic/storage 包为这些基础对象定义了可替换的存储——由 PostgreSQL 支持的文档、学习者运行时、资源、持久的智能体会话、会话素材和用户技能,以及供嵌入方使用的浏览器端实现;HTTP 客户端将浏览器连接到内嵌的持久化端点,而服务端资源层可将字节数据保存在 PostgreSQL 或 S3 中。设备级 KV 值(设置、播放位置)保留在浏览器中。

深度互动模式(新!)#

被动听讲?❌ 动手探索!✅

正如爱因斯坦所说:「玩耍是研究的最高形式。」

标准模式侧重于快速生成课堂内容,而深度互动模式更进一步——创造可互动、可探索、可动手的学习体验。学生不只是观看知识,而是调整实验、观察模拟,并主动探索事物的运作方式。

五类互动界面#

🌐 3D 可视化

三维可视化呈现,让抽象结构更直观。

⚙️ 模拟

过程模拟与实验环境,用于观察动态变化与结果。

🎮 游戏

知识型小游戏,通过互动挑战强化理解与记忆。

🧭 思维导图

结构化的知识组织,帮助学习者建立整体概念框架。

💻 在线编程

浏览器内编码与即时执行,通过编写、测试和迭代来学习。

AI 教师引导#

AI 教师可以主动操作 UI 来引导学生——高亮关键区域、设置条件、提供提示,并在恰当的时刻引导注意力。

可在任何设备上使用#

所有生成的互动 UI 均完全响应式——桌面端、平板或手机。

桌面端 · 移动端 · iPad

想要更完整、更专业的 UI 生成体验?#

如果你在寻找功能更丰富、互动性更强、并针对高质量教育 UI 制作做过深度优化的版本,请访问 MAIC-UI。

课程生成#

描述你想学的内容,或附上参考资料。PDF、Word、PowerPoint、电子表格、文本、图像、音频和视频输入都可进入素材流水线;已配置的提取器会将受支持的来源转化为可供生成的内容。OpenMAIC 经典的两阶段流水线会处理其余部分:

阶段发生什么
大纲AI 分析你的输入并生成结构化的课程大纲
场景每个大纲条目变成一个丰富的场景——幻灯片、测验、互动模块或 PBL 活动

课堂组件#

🎓 幻灯片

AI 教师通过语音旁白、聚光灯效果和激光笔动画进行授课,就像真实课堂一样。

🧪 测验

互动测验(单选 / 多选、简答),由 AI 实时评分并反馈。

🔬 互动模拟

基于 HTML 的互动实验,用于可视化、动手式学习——物理模拟器、流程图等。

🏗️ 基于项目的学习(PBL)

选择一个角色,与 AI 智能体在带里程碑和交付物的结构化项目中协作。

多智能体互动#

  • 课堂讨论 —— 智能体主动发起讨论;你可以随时加入,或被点名
  • 圆桌辩论 —— 多个具有不同角色的智能体讨论同一话题,并配白板图示
  • 问答模式 —— 自由提问;AI 教师用幻灯片、示意图或白板绘图作答
  • 白板 —— AI 智能体在共享白板上实时绘图——逐步解方程、勾勒流程图,或以可视化方式阐释概念

智能体工作台集成#

OpenMAIC 技能包(skills/openmaic/)采用标准 SKILL.md 格式,可被多种智能体工作台加载——除 OpenClaw 外,还包括 Codex、DeepSeek、WorkBuddy 等。它是一份引导式标准作业程序(SOP),涵盖在线演示、本地安装、课堂生成,以及基于 @openmaic/* SDK 的二次开发。

OpenClaw 是一个个人 AI 助手,可连接你已经在用的即时通讯平台(飞书、Slack、Discord、Telegram、WhatsApp 等)。借助这一集成,你可以直接在聊天应用中生成和查看互动课堂,完全不用碰终端。

只需告诉你的智能体助手你想学什么——其余事情它全包:

  • 托管模式 — 从 open.maic.chat 获取访问码,保存到配置中,即可立即生成课堂——无需本地安装
  • 自托管模式 — 克隆、安装依赖、配置 API 密钥并启动服务器——技能会引导你完成每一步
  • 跟踪进度 — 轮询异步生成任务,并在就绪时把链接发送给你
  • 二次开发 — 引导你基于 OpenMAIC 构建自己的应用:使用 @openmaic/* SDK(见技能内的扩展文档)

每一步都会先请求你的确认。没有黑箱自动化。

已在 ClawHub 上提供——一条命令即可安装:

clawhub install openmaic

或者,在 Codex、DeepSeek 或 WorkBuddy 等其他智能体工作台中,将仓库中的 skills/openmaic/ 文件夹(或其压缩包)导入工作台即可使用:

阶段技能做什么
克隆检测已有的代码检出,或在克隆/安装前先询问
启动在 pnpm dev、pnpm build && pnpm start 或 Docker 之间选择
提供商密钥推荐一条提供商路径;由你自己编辑 .env.local
生成提交异步生成任务并轮询直至完成

在 ~/.openclaw/openclaw.json 中的可选配置:

{
  "skills": {
    "entries": {
      "openmaic": {
        "config": {
          // Hosted mode: paste your access code from open.maic.chat
          "accessCode": "sk-xxx",
          // Self-hosted mode: local repo path and URL
          "repoDir": "/path/to/OpenMAIC",
          "url": "http://localhost:3000"
        }
      }
    }
  }
}

导出#

格式说明
PowerPoint (.pptx)可编辑幻灯片,包含图像、图表和 LaTeX 公式。互动、测验和 PBL 场景可作为占位幻灯片保留,并带有「在线打开」按钮和二维码
资源包(Resource Pack)上述 PPTX,加上每个互动场景作为独立网页
离线 HTML单个文件,无需网络即可播放课堂:带字幕的旁白、聚光灯与激光笔、幻灯片视频、测验和互动场景;可选择是否带旁白
课堂 ZIP完整课堂导出(课程结构 + 媒体),用于备份或分享

关于可选项、超过 400 MB 的课堂以何种 ZIP 形式保存,以及在手机上打开导出文件,请参阅「导出课堂」。

导入课堂 ZIP 时,会先将其内嵌的音频、图像、视频和封面存入服务端资源池,再保存课程,这样其他浏览器无需依赖导入方浏览器的缓存即可解析这些资源。ZIP 也是在部署之间迁移课程的一种方式:从一个部署导出,再在另一个部署导入。

离线 / 内网课堂:当你导出课堂(.maic.zip)或资源包时,OpenMAIC 会将互动场景引用的外部资源(KaTeX、Three.js 含 three/addons、Tailwind CDN、Google Fonts、图像)以内联 data: URI 的形式写入导出的 HTML。导出的课程导入到隔离网络/内网实例后可完全离线播放——播放时不会访问任何公共 CDN。导出时无法获取的资源(例如受 CORS 限制的图像主机)会被报告并保留为 URL。在此功能之前导出的课堂仍引用 CDN,必须重新导出才能获得离线支持。

更多功能#

  • 文本转语音 — 多个语音提供商,支持自定义声音
  • 语音识别 — 使用麦克风与 AI 教师对话
  • 网络搜索 — 智能体在课堂上搜索网络以获取最新信息
  • 提供商控制 — 服务端能力发现、模型解析、强制关闭开关和报错式路由,让部署状态清晰明确
  • 课程新鲜度 — 由数据库触发的按场景修订计数器、新鲜度事件和定向场景获取,使工作台视图保持同步
  • i18n — 界面支持 12 个语言区域、11 种语言:简体中文、繁体中文、英语、日语、韩语、俄语、阿拉伯语、葡萄牙语(巴西)、西班牙语(墨西哥)、法语、越南语和德语
  • 深色模式 — 深夜学习也不刺眼

💡 使用场景#

  • 「从零开始,30 分钟教会我 Python」
  • 「阿瓦隆(Avalon)桌游怎么玩」
  • 「分析智谱和 MiniMax 的股价」
  • 「拆解 DeepSeek 最新论文」

🤝 贡献#

我们欢迎社区的贡献!无论是缺陷报告、功能想法,还是拉取请求——每一份贡献都有帮助。

项目结构#

OpenMAIC/
├── app/                                  # Next.js App Router
│   ├── api/                              # Generation, media, persistence, and agent APIs
│   │   ├── agent/                        # Durable session, event, material, and skill control plane
│   │   ├── stages/                       # Owner-scoped course reads, writes, manifests, and scene fetches
│   │   ├── generate/                     # Images, video, TTS and voice registration
│   │   ├── generate-classroom/           # Async classroom job submission + polling
│   │   ├── chat/                         # Multi-agent discussion (SSE streaming)
│   │   ├── pbl/                          # Project-Based Learning endpoints
│   │   ├── persistence/                  # Embedded persistence service (Runtime/Document Store HTTP contracts)
│   │   ├── export-video/                 # MP4 video export (backs onto render-service)
│   │   └── ...                           # generation-runs, materials, quiz-grade, parse-pdf, transcription, etc.
│   ├── classroom/[id]/                   # Classroom playback page
│   └── page.tsx                          # Home page (generation input)
│
├── lib/                                  # Core business logic
│   ├── generation/                       # Two-stage lesson generation pipeline
│   ├── orchestration/                    # Agent registry, shared summarizers and types
│   ├── playback/                         # Playback state machine (idle → playing → live)
│   ├── action/                           # Action execution engine (speech, whiteboard, effects)
│   ├── ai/                               # LLM provider abstraction
│   ├── api/                              # Stage API facade (slide/canvas/scene manipulation)
│   ├── store/                            # Zustand state stores
│   ├── types/                            # Centralized TypeScript type definitions
│   ├── audio/                            # TTS & ASR providers
│   ├── media/                            # Image & video generation providers
│   ├── persistence/                      # Browser/server persistence wiring and PostgreSQL provider
│   ├── server/agent-runtime/             # Durable runner, skills, materials, and course-building tools
│   ├── export/                           # PPTX & HTML export
│   ├── hooks/                            # React custom hooks (55+)
│   ├── i18n/                             # Internationalization (zh-CN, zh-TW, en-US, ja-JP, ko-KR, ru-RU, ar-SA, pt-BR, es-MX, fr-FR, vi-VN, de-DE)
│   └── ...                               # prosemirror, storage, pdf, web-search, utils
│
├── components/                           # React UI components
│   ├── slide-renderer/                   # Canvas-based slide editor & renderer
│   │   ├── Editor/Canvas/                # Interactive editing canvas
│   │   └── components/element/           # Element renderers (text, image, shape, table, chart …)
│   ├── scene-renderers/                  # Quiz, Interactive, PBL scene renderers
│   ├── generation/                       # Lesson generation toolbar & progress
│   ├── workbench/                        # Pro workbench conversation and course-reference UI
│   ├── chat/                             # Chat area & session management
│   ├── settings/                         # Settings panel (providers, TTS, ASR, media …)
│   ├── whiteboard/                       # SVG-based whiteboard drawing
│   ├── agent/                            # Agent avatar, config, info bar
│   ├── ui/                               # Base UI primitives (shadcn/ui + Radix)
│   └── ...                               # audio, roundtable, stage, ai-elements
│
├── packages/                             # Workspace packages
│   ├── @openmaic/dsl/                    # Versioned course/slide data contract and validators
│   ├── @openmaic/renderer/               # React renderer for the slide DSL
│   ├── @openmaic/editor/                 # Composable slide editing core and React surface
│   ├── @openmaic/importer/               # PPTX → OpenMAIC slide importer
│   ├── @openmaic/generation/             # Generation contracts, pipeline, and prompt assets
│   ├── @openmaic/storage/                # Browser, HTTP, PostgreSQL, and S3 persistence primitives
│   ├── pptxgenjs/                        # Customized PowerPoint generation
│   └── mathml2omml/                      # MathML → Office Math conversion
│
├── render-service/                       # MP4 video export render service (Chromium + FFmpeg, standalone container)
│
├── skills/                               # OpenClaw / ClawHub skills
│   └── openmaic/                         # Guided OpenMAIC setup & generation SOP
│       ├── SKILL.md                      # Thin router with confirmation rules
│       └── references/                   # On-demand SOP sections (generation, deployment, extending, …)
│
├── configs/                              # Shared constants (shapes, fonts, hotkeys, themes …)
└── public/                               # Static assets (logos, avatars)

关键架构#

  • 生成流水线(@openmaic/generation)— 两阶段:大纲生成 → 场景内容生成
  • 智能体运行时(lib/server/agent-runtime/)— 由 PostgreSQL 支撑的会话,带租约执行、恢复/引导语义、技能、素材和经过校验的课程工具
  • 持久化层(@openmaic/storage)— 可替换的文档、运行时、KV、资源、智能体会话、素材和用户技能存储
  • 多智能体编排(lib/chat/pi/)— 服务端 Pi 导演循环,通过 call_agent 将每轮课堂交给各智能体
  • 播放引擎(lib/playback/)— 驱动课堂播放与实时互动的状态机
  • 动作引擎(lib/action/)— 执行 21 种动作类型(语音、白板绘制/文本/形状/图表、聚光灯、激光笔……)
  • 存储层(@openmaic/storage)— 运行时/文档/资源存储抽象,带 Postgres 参考实现;其 HTTP 契约让你可接入任意外部存储服务

如何贡献#

  1. Fork 仓库
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交改动(git commit -m 'Add amazing feature')
  4. 推送到分支(git push origin feature/amazing-feature)
  5. 发起拉取请求(Pull Request)

💼 合作#

本项目采用 MIT 许可证,因此允许免费商业使用。合作或协作事宜请联系:thu_maic@mail.tsinghua.edu.cn

📝 引用#

如果你在研究中觉得 OpenMAIC 有用,欢迎引用:

@Article{JCST-2509-16000,
  title = {From MOOC to MAIC: Reimagine Online Teaching and Learning through LLM-driven Agents},
  journal = {Journal of Computer Science and Technology},
  volume = {},
  number = {},
  pages = {},
  year = {2026},
  issn = {1000-9000(Print) /1860-4749(Online)},
  doi = {10.1007/s11390-025-6000-0},
  url = {https://jcst.ict.ac.cn/en/article/doi/10.1007/s11390-025-6000-0},
  author = {Ji-Fan Yu and Daniel Zhang-Li and Zhe-Yuan Zhang and Yu-Cheng Wang and Hao-Xuan Li and Joy Jia Yin Lim and Zhan-Xin Hao and Shang-Qing Tu and Lu Zhang and Xu-Sheng Dai and Jian-Xiao Jiang and Shen Yang and Fei Qin and Ze-Kun Li and Xin Cong and Bin Xu and Lei Hou and Man-Li Li and Juan-Zi Li and Hui-Qin Liu and Yu Zhang and Zhi-Yuan Liu and Mao-Song Sun}
}

⭐ Star 历史#

📄 许可证#

本项目采用 MIT 许可证授权。

第三方组件#

该仓库打包了一些不受根目录 MIT 许可证覆盖、并保留自身条款的工作区包:

  • packages/mathml2omml — LGPL-3.0-or-later
  • packages/pptxgenjs — MIT(第三方)

整体分发该仓库时,上述每个捆绑包各自的条款适用于该包的文件。