feat: add polished README (EN/ZH), Docker support, and project assets
- Add README.md (English) and README-zh.md (Chinese) with banner, GIF demos, feature showcase, use cases, and quick start guide - Add Dockerfile (multi-stage build), docker-compose.yml, .dockerignore - Add .env.example with all supported environment variables - Add MIT LICENSE file - Move all README assets into assets/ directory - Update i18n: new slogan and input placeholder text - Add Vercel one-click deploy button and instructions Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@@ -0,0 +1,35 @@
|
||||
# dependencies
|
||||
node_modules
|
||||
.pnpm-store
|
||||
|
||||
# build output
|
||||
.next
|
||||
out
|
||||
build
|
||||
dist
|
||||
|
||||
# git
|
||||
.git
|
||||
.gitignore
|
||||
|
||||
# IDE
|
||||
.idea
|
||||
.vscode
|
||||
|
||||
# env & secrets
|
||||
.env*
|
||||
!.env.example
|
||||
server-providers*.yml
|
||||
|
||||
# misc
|
||||
assets
|
||||
*.md
|
||||
*.pdf
|
||||
*.pem
|
||||
.DS_Store
|
||||
.vercel
|
||||
coverage
|
||||
logs
|
||||
data
|
||||
docs
|
||||
.claude
|
||||
@@ -0,0 +1,51 @@
|
||||
# ---- Stage 1: Base ----
|
||||
FROM node:22-alpine AS base
|
||||
|
||||
RUN apk add --no-cache libc6-compat
|
||||
RUN corepack enable && corepack prepare pnpm@10.28.0 --activate
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# ---- Stage 2: Dependencies ----
|
||||
FROM base AS deps
|
||||
|
||||
# Native build tools for sharp, @napi-rs/canvas
|
||||
RUN apk add --no-cache python3 build-base g++ cairo-dev pango-dev jpeg-dev giflib-dev librsvg-dev
|
||||
|
||||
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
||||
COPY packages/ ./packages/
|
||||
|
||||
RUN pnpm install --frozen-lockfile
|
||||
|
||||
# ---- Stage 3: Builder ----
|
||||
FROM base AS builder
|
||||
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY --from=deps /app/packages ./packages
|
||||
COPY . .
|
||||
|
||||
RUN pnpm build
|
||||
|
||||
# ---- Stage 4: Runner ----
|
||||
FROM node:22-alpine AS runner
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV HOSTNAME=0.0.0.0
|
||||
ENV PORT=3000
|
||||
|
||||
RUN apk add --no-cache libc6-compat cairo pango jpeg giflib librsvg
|
||||
|
||||
RUN addgroup --system --gid 1001 nodejs && \
|
||||
adduser --system --uid 1001 nextjs
|
||||
|
||||
COPY --from=builder /app/public ./public
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
||||
|
||||
USER nextjs
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
CMD ["node", "server.js"]
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 THU-MAIC
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,285 @@
|
||||
<!-- <p align="center">
|
||||
<img src="assets/logo-horizontal.png" alt="OpenMAIC" width="420"/>
|
||||
</p> -->
|
||||
|
||||
<p align="center">
|
||||
<img src="assets/banner.png" alt="OpenMAIC Banner" width="680"/>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
一键生成沉浸式多智能体互动课堂。
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square" alt="License: MIT"/></a>
|
||||
<a href="https://open.maic.chat/"><img src="https://img.shields.io/badge/Demo-Live-brightgreen?style=flat-square" alt="Live Demo"/></a>
|
||||
<a href="https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FTHU-MAIC%2FOpenMAIC&envDescription=Configure%20at%20least%20one%20LLM%20provider%20API%20key%20(e.g.%20OPENAI_API_KEY%2C%20ANTHROPIC_API_KEY).%20All%20providers%20are%20optional.&envLink=https%3A%2F%2Fgithub.com%2FTHU-MAIC%2FOpenMAIC%2Fblob%2Fmain%2F.env.example&project-name=openmaic&framework=nextjs"><img src="https://vercel.com/button" alt="Deploy with Vercel" height="20"/></a>
|
||||
<a href="https://github.com/THU-MAIC/OpenMAIC/stargazers"><img src="https://img.shields.io/github/stars/THU-MAIC/OpenMAIC?style=flat-square" alt="Stars"/></a>
|
||||
<br/>
|
||||
<img src="https://img.shields.io/badge/Next.js-16-black?style=flat-square&logo=next.js" alt="Next.js"/>
|
||||
<img src="https://img.shields.io/badge/React-19-61DAFB?style=flat-square&logo=react&logoColor=white" alt="React"/>
|
||||
<img src="https://img.shields.io/badge/TypeScript-5-3178C6?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript"/>
|
||||
<img src="https://img.shields.io/badge/LangGraph-1.1-purple?style=flat-square" alt="LangGraph"/>
|
||||
<img src="https://img.shields.io/badge/Tailwind_CSS-4-06B6D4?style=flat-square&logo=tailwindcss&logoColor=white" alt="Tailwind CSS"/>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="./README.md">English</a> | <a href="./README-zh.md">简体中文</a>
|
||||
<br/>
|
||||
<a href="https://open.maic.chat/">在线体验</a> · <a href="#-快速开始">快速开始</a> · <a href="#-功能特性">功能特性</a> · <a href="#-使用场景">使用场景</a>
|
||||
</p>
|
||||
|
||||
## 📖 项目简介
|
||||
|
||||
**OpenMAIC**(Open Multi-Agent Interactive Classroom)是一个开源的 AI 互动课堂平台,能够将任何主题或文档转化为丰富的互动学习体验。基于多智能体协作引擎,它可以自动生成演示幻灯片、测验、交互式模拟实验和项目制学习活动——由 AI 教师和 AI 同学进行语音讲解、白板绘图,并与你展开实时讨论。
|
||||
|
||||
<!-- PLACEHOLDER: 产品概览 GIF -->
|
||||
<!-- <img src="assets/overview.gif" width="100%"/> -->
|
||||
|
||||
### 核心亮点
|
||||
|
||||
- **一键生成课堂** — 描述一个主题或附上学习材料,AI 几分钟内构建完整课堂
|
||||
- **多智能体课堂** — AI 老师和智能体同学实时授课、讨论、互动
|
||||
- **丰富的场景类型** — 幻灯片、测验、HTML 交互式模拟、项目制学习(PBL)
|
||||
- **白板 & 语音** — 智能体实时绘制图表、书写公式、语音讲解
|
||||
- **灵活导出** — 下载可编辑的 `.pptx` 幻灯片或交互式 `.html` 网页
|
||||
|
||||
---
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 环境要求
|
||||
|
||||
- **Node.js** >= 18
|
||||
- **pnpm** >= 10
|
||||
|
||||
### 1. 克隆 & 安装
|
||||
|
||||
```bash
|
||||
git clone https://github.com/THU-MAIC/OpenMAIC.git
|
||||
cd OpenMAIC
|
||||
pnpm install
|
||||
```
|
||||
|
||||
### 2. 配置
|
||||
|
||||
```bash
|
||||
cp .env.example .env.local
|
||||
```
|
||||
|
||||
至少填写一个 LLM 服务商的 API Key:
|
||||
|
||||
```env
|
||||
OPENAI_API_KEY=sk-...
|
||||
ANTHROPIC_API_KEY=sk-ant-...
|
||||
GOOGLE_GENERATIVE_AI_API_KEY=...
|
||||
```
|
||||
|
||||
也可以通过 `server-providers.yml` 配置服务商:
|
||||
|
||||
```yaml
|
||||
providers:
|
||||
- id: openai
|
||||
apiKey: sk-...
|
||||
- id: anthropic
|
||||
apiKey: sk-ant-...
|
||||
```
|
||||
|
||||
支持的服务商:**OpenAI**、**Anthropic**、**Google Gemini**、**DeepSeek** 以及任何兼容 OpenAI API 的服务。
|
||||
|
||||
> **推荐模型:** **Gemini 3 Flash** — 效果与速度的最佳平衡。追求最高质量可选 **Gemini 3.1 Pro**(速度较慢)。
|
||||
|
||||
### 3. 启动
|
||||
|
||||
```bash
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
打开 **http://localhost:3000** 开始学习!
|
||||
|
||||
### 4. 生产环境构建
|
||||
|
||||
```bash
|
||||
pnpm build && pnpm start
|
||||
```
|
||||
|
||||
### Vercel 部署
|
||||
|
||||
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FTHU-MAIC%2FOpenMAIC&envDescription=Configure%20at%20least%20one%20LLM%20provider%20API%20key%20(e.g.%20OPENAI_API_KEY%2C%20ANTHROPIC_API_KEY).%20All%20providers%20are%20optional.&envLink=https%3A%2F%2Fgithub.com%2FTHU-MAIC%2FOpenMAIC%2Fblob%2Fmain%2F.env.example&project-name=openmaic&framework=nextjs)
|
||||
|
||||
或者手动部署:
|
||||
|
||||
1. Fork 本仓库
|
||||
2. 导入到 [Vercel](https://vercel.com/new)
|
||||
3. 配置环境变量(至少一个 LLM API Key)
|
||||
4. 部署
|
||||
|
||||
### Docker 部署
|
||||
|
||||
```bash
|
||||
cp .env.example .env.local
|
||||
# 编辑 .env.local 填入你的 API Key,然后:
|
||||
docker compose up --build
|
||||
```
|
||||
|
||||
如需使用 MinerU 文档解析服务,取消 `docker-compose.yml` 中 `mineru` 服务的注释即可。
|
||||
|
||||
### 可选:MinerU(增强文档解析)
|
||||
|
||||
如需更好地解析复杂表格和公式:
|
||||
|
||||
```bash
|
||||
docker pull opendatalab/mineru:latest
|
||||
docker run -d --name mineru -p 8080:8080 opendatalab/mineru:latest
|
||||
```
|
||||
|
||||
在 `.env.local` 中设置 `MINERU_API_URL=http://localhost:8080`。
|
||||
|
||||
---
|
||||
|
||||
## ✨ 功能特性
|
||||
|
||||
### 课堂生成
|
||||
|
||||
描述你想学习的内容,或附上参考材料。OpenMAIC 的两阶段流水线自动完成剩余工作:
|
||||
|
||||
| 阶段 | 说明 |
|
||||
|------|------|
|
||||
| **大纲生成** | AI 分析你的输入,生成结构化的课堂大纲 |
|
||||
| **场景生成** | 每个大纲条目生成为丰富的场景——幻灯片、测验、交互模块或 PBL 活动 |
|
||||
|
||||
<!-- PLACEHOLDER: 生成流水线 GIF -->
|
||||
<!-- <img src="assets/generation-pipeline.gif" width="100%"/> -->
|
||||
|
||||
### 课堂组件
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
**🎓 幻灯片(Slides)**
|
||||
|
||||
AI 老师配合聚光灯和激光笔动作进行语音讲解——如同真实课堂。
|
||||
|
||||
<img src="assets/slides.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
**🧪 测验(Quiz)**
|
||||
|
||||
交互式测验(单选 / 多选 / 简答),支持 AI 实时判分和反馈。
|
||||
|
||||
<img src="assets/quiz.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
**🔬 交互式模拟(Interactive)**
|
||||
|
||||
基于 HTML 的交互实验,用于可视化、动手学习——物理模拟器、流程图等。
|
||||
|
||||
<img src="assets/interactive.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
**🏗️ 项目制学习(PBL)**
|
||||
|
||||
选择一个角色,与 AI 智能体协作完成结构化项目,包含里程碑和交付物。
|
||||
|
||||
<img src="assets/pbl.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 多智能体互动
|
||||
|
||||
- **课堂讨论** — 智能体主动发起讨论话题,你可以随时加入或被点名互动
|
||||
- **圆桌辩论** — 多个不同人设的智能体围绕话题展开讨论,配合白板讲解
|
||||
- **自由问答** — 随时提问,AI 老师通过幻灯片、图表或白板进行解答
|
||||
- **白板** — AI 智能体在共享白板上实时绘图——逐步推导方程、绘制流程图、直观讲解概念
|
||||
|
||||
<img src="assets/discussion.gif" width="100%"/>
|
||||
<img src="assets/whiteboard.gif" width="100%"/>
|
||||
|
||||
### 导出
|
||||
|
||||
| 格式 | 说明 |
|
||||
|------|------|
|
||||
| **PowerPoint (.pptx)** | 可编辑的幻灯片,包含图片、图表和 LaTeX 公式 |
|
||||
| **交互式 HTML** | 自包含的网页,包含交互式模拟实验 |
|
||||
|
||||
### 更多功能
|
||||
|
||||
- **语音合成(TTS)** — 多种语音服务商,支持自定义音色
|
||||
- **语音识别** — 通过麦克风与 AI 老师对话
|
||||
- **网络搜索** — 智能体在课堂中搜索网络获取最新信息
|
||||
- **国际化** — 界面支持中文和英文
|
||||
- **暗色模式** — 深夜学习更护眼
|
||||
|
||||
---
|
||||
|
||||
## 💡 使用场景
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
> *"零基础文科生,30 分钟学会 Python"*
|
||||
|
||||
<img src="assets/python.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
> *"如何上手阿瓦隆桌游"*
|
||||
|
||||
<img src="assets/avalon.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
> *"分析一下智谱和 MiniMax 的股价"*
|
||||
|
||||
<img src="assets/zhipu-minimax.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
> *"DeepSeek 最新论文解析"*
|
||||
|
||||
<img src="assets/deepseek.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
---
|
||||
|
||||
## 🤝 参与贡献
|
||||
|
||||
我们欢迎社区的贡献!无论是 Bug 报告、功能建议还是 Pull Request,都非常感谢。
|
||||
|
||||
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
|
||||
|
||||
---
|
||||
|
||||
## 📬 联系我们
|
||||
|
||||
如有任何问题、反馈或合作意向,欢迎通过 [Issues](https://github.com/THU-MAIC/OpenMAIC/issues) 联系我们。
|
||||
|
||||
---
|
||||
|
||||
## 📄 许可证
|
||||
|
||||
本项目基于 [MIT License](LICENSE) 开源。
|
||||
@@ -1,64 +1,285 @@
|
||||
# OpenMAIC
|
||||
<!-- <p align="center">
|
||||
<img src="assets/logo-horizontal.png" alt="OpenMAIC" width="420"/>
|
||||
</p> -->
|
||||
|
||||
AI-powered interactive classroom platform. Generate engaging, multi-agent lesson presentations from a simple topic — complete with slides, dialogues, quizzes, and multimedia.
|
||||
<p align="center">
|
||||
<img src="assets/banner.png" alt="OpenMAIC Banner" width="680"/>
|
||||
</p>
|
||||
|
||||
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FTHU-MAIC%2FOpenMAIC&envDescription=Configure%20at%20least%20one%20LLM%20provider%20API%20key%20(e.g.%20OPENAI_API_KEY%2C%20ANTHROPIC_API_KEY).%20All%20providers%20are%20optional.&envLink=https%3A%2F%2Fgithub.com%2FTHU-MAIC%2FOpenMAIC%2Fblob%2Fmain%2F.env.example&project-name=openmaic&framework=nextjs)
|
||||
<p align="center">
|
||||
Get an immersive, multi-agent learning experience in just one click
|
||||
</p>
|
||||
|
||||
## Features
|
||||
<p align="center">
|
||||
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square" alt="License: MIT"/></a>
|
||||
<a href="https://open.maic.chat/"><img src="https://img.shields.io/badge/Demo-Live-brightgreen?style=flat-square" alt="Live Demo"/></a>
|
||||
<a href="https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FTHU-MAIC%2FOpenMAIC&envDescription=Configure%20at%20least%20one%20LLM%20provider%20API%20key%20(e.g.%20OPENAI_API_KEY%2C%20ANTHROPIC_API_KEY).%20All%20providers%20are%20optional.&envLink=https%3A%2F%2Fgithub.com%2FTHU-MAIC%2FOpenMAIC%2Fblob%2Fmain%2F.env.example&project-name=openmaic&framework=nextjs"><img src="https://vercel.com/button" alt="Deploy with Vercel" height="20"/></a>
|
||||
<a href="https://github.com/THU-MAIC/OpenMAIC/stargazers"><img src="https://img.shields.io/github/stars/THU-MAIC/OpenMAIC?style=flat-square" alt="Stars"/></a>
|
||||
<br/>
|
||||
<img src="https://img.shields.io/badge/Next.js-16-black?style=flat-square&logo=next.js" alt="Next.js"/>
|
||||
<img src="https://img.shields.io/badge/React-19-61DAFB?style=flat-square&logo=react&logoColor=white" alt="React"/>
|
||||
<img src="https://img.shields.io/badge/TypeScript-5-3178C6?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript"/>
|
||||
<img src="https://img.shields.io/badge/LangGraph-1.1-purple?style=flat-square" alt="LangGraph"/>
|
||||
<img src="https://img.shields.io/badge/Tailwind_CSS-4-06B6D4?style=flat-square&logo=tailwindcss&logoColor=white" alt="Tailwind CSS"/>
|
||||
</p>
|
||||
|
||||
- **AI Lesson Generation** — Describe a topic and get a full interactive classroom experience
|
||||
- **Multi-Agent Dialogue** — AI teacher and student agents engage in natural classroom conversation
|
||||
- **Rich Multimedia** — Auto-generated slides, images, TTS audio, and video
|
||||
- **Multi-Provider Support** — OpenAI, Anthropic, Google, DeepSeek, Qwen, and more
|
||||
- **Internationalization** — Chinese and English UI
|
||||
- **Local-First Data** — All user data stored in browser (IndexedDB)
|
||||
<p align="center">
|
||||
<a href="./README.md">English</a> | <a href="./README-zh.md">简体中文</a>
|
||||
<br/>
|
||||
<a href="https://open.maic.chat/">Live Demo</a> · <a href="#-quick-start">Quick Start</a> · <a href="#-features">Features</a> · <a href="#-use-cases">Use Cases</a>
|
||||
</p>
|
||||
|
||||
## Getting Started
|
||||
## 📖 Overview
|
||||
|
||||
**OpenMAIC** (Open Multi-Agent Interactive Classroom) is an open-source AI platform that turns any topic or document into a rich, interactive classroom experience. Powered by multi-agent orchestration, it generates slides, quizzes, interactive simulations, and project-based learning activities — all delivered by AI teachers and AI classmates who can speak, draw on a whiteboard, and engage in real-time discussions with you.
|
||||
|
||||
<!-- PLACEHOLDER: product overview GIF -->
|
||||
<!-- <img src="assets/overview.gif" width="100%"/> -->
|
||||
|
||||
### Highlights
|
||||
|
||||
- **One-click lesson generation** — Describe a topic or attach your materials; the AI builds a full lesson in minutes
|
||||
- **Multi-agent classroom** — AI teachers and peers lecture, discuss, and interact with you in real time
|
||||
- **Rich scene types** — Slides, quizzes, interactive HTML simulations, and project-based learning (PBL)
|
||||
- **Whiteboard & TTS** — Agents draw diagrams, write formulas, and explain out loud
|
||||
- **Export anywhere** — Download editable `.pptx` slides or interactive `.html` pages
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Node.js 18+
|
||||
- pnpm
|
||||
- **Node.js** >= 18
|
||||
- **pnpm** >= 10
|
||||
|
||||
### Install & Run
|
||||
### 1. Clone & Install
|
||||
|
||||
```bash
|
||||
git clone https://github.com/THU-MAIC/OpenMAIC.git
|
||||
cd OpenMAIC
|
||||
pnpm install
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
Open [http://localhost:3000](http://localhost:3000).
|
||||
|
||||
### Configuration
|
||||
|
||||
Copy `.env.example` to `.env.local` and add your API keys:
|
||||
### 2. Configure
|
||||
|
||||
```bash
|
||||
cp .env.example .env.local
|
||||
```
|
||||
|
||||
At minimum, configure one LLM provider (e.g. `OPENAI_API_KEY`). See [`.env.example`](.env.example) for all available options.
|
||||
Fill in at least one LLM provider key:
|
||||
|
||||
Alternatively, create a `server-providers.yml` file for more advanced provider configuration.
|
||||
```env
|
||||
OPENAI_API_KEY=sk-...
|
||||
ANTHROPIC_API_KEY=sk-ant-...
|
||||
GOOGLE_GENERATIVE_AI_API_KEY=...
|
||||
```
|
||||
|
||||
## Deploy
|
||||
You can also configure providers via `server-providers.yml`:
|
||||
|
||||
### Vercel (Recommended)
|
||||
```yaml
|
||||
providers:
|
||||
- id: openai
|
||||
apiKey: sk-...
|
||||
- id: anthropic
|
||||
apiKey: sk-ant-...
|
||||
```
|
||||
|
||||
Click the button above, or:
|
||||
Supported providers: **OpenAI**, **Anthropic**, **Google Gemini**, **DeepSeek**, and any OpenAI-compatible API.
|
||||
|
||||
> **Recommended model:** **Gemini 3 Flash** — best balance of quality and speed. For highest quality (at slower speed), try **Gemini 3.1 Pro**.
|
||||
|
||||
### 3. Run
|
||||
|
||||
```bash
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
Open **http://localhost:3000** and start learning!
|
||||
|
||||
### 4. Build for Production
|
||||
|
||||
```bash
|
||||
pnpm build && pnpm start
|
||||
```
|
||||
|
||||
### Vercel Deployment
|
||||
|
||||
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FTHU-MAIC%2FOpenMAIC&envDescription=Configure%20at%20least%20one%20LLM%20provider%20API%20key%20(e.g.%20OPENAI_API_KEY%2C%20ANTHROPIC_API_KEY).%20All%20providers%20are%20optional.&envLink=https%3A%2F%2Fgithub.com%2FTHU-MAIC%2FOpenMAIC%2Fblob%2Fmain%2F.env.example&project-name=openmaic&framework=nextjs)
|
||||
|
||||
Or manually:
|
||||
|
||||
1. Fork this repository
|
||||
2. Import into [Vercel](https://vercel.com/new)
|
||||
3. Set environment variables (at minimum one LLM API key)
|
||||
4. Deploy
|
||||
|
||||
### Docker
|
||||
### Docker Deployment
|
||||
|
||||
```bash
|
||||
docker build -t openmaic .
|
||||
docker run -p 3000:3000 --env-file .env.local openmaic
|
||||
cp .env.example .env.local
|
||||
# Edit .env.local with your API keys, then:
|
||||
docker compose up --build
|
||||
```
|
||||
|
||||
## License
|
||||
To use the optional MinerU document parser, uncomment the `mineru` service in `docker-compose.yml`.
|
||||
|
||||
MIT
|
||||
### Optional: MinerU (Advanced Document Parsing)
|
||||
|
||||
For enhanced parsing of complex tables and formulas:
|
||||
|
||||
```bash
|
||||
docker pull opendatalab/mineru:latest
|
||||
docker run -d --name mineru -p 8080:8080 opendatalab/mineru:latest
|
||||
```
|
||||
|
||||
Set `MINERU_API_URL=http://localhost:8080` in `.env.local`.
|
||||
|
||||
---
|
||||
|
||||
## ✨ Features
|
||||
|
||||
### Lesson Generation
|
||||
|
||||
Describe what you want to learn or attach reference materials. OpenMAIC's two-stage pipeline handles the rest:
|
||||
|
||||
| Stage | What Happens |
|
||||
|-------|-------------|
|
||||
| **Outline** | AI analyzes your input and generates a structured lesson outline |
|
||||
| **Scenes** | Each outline item becomes a rich scene — slides, quizzes, interactive modules, or PBL activities |
|
||||
|
||||
<!-- PLACEHOLDER: generation pipeline GIF -->
|
||||
<!-- <img src="assets/generation-pipeline.gif" width="100%"/> -->
|
||||
|
||||
### Classroom Components
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
**🎓 Slides**
|
||||
|
||||
AI teachers deliver lectures with voice narration, spotlight effects, and laser pointer animations — just like a real classroom.
|
||||
|
||||
<img src="assets/slides.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
**🧪 Quiz**
|
||||
|
||||
Interactive quizzes (single / multiple choice, short answer) with real-time AI grading and feedback.
|
||||
|
||||
<img src="assets/quiz.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
**🔬 Interactive Simulation**
|
||||
|
||||
HTML-based interactive experiments for visual, hands-on learning — physics simulators, flowcharts, and more.
|
||||
|
||||
<img src="assets/interactive.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
**🏗️ Project-Based Learning (PBL)**
|
||||
|
||||
Choose a role and collaborate with AI agents on structured projects with milestones and deliverables.
|
||||
|
||||
<img src="assets/pbl.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### Multi-Agent Interaction
|
||||
|
||||
- **Classroom Discussion** — Agents proactively initiate discussions; you can jump in anytime or get called on
|
||||
- **Roundtable Debate** — Multiple agents with different personas discuss a topic, with whiteboard illustrations
|
||||
- **Q&A Mode** — Ask questions freely; the AI teacher responds with slides, diagrams, or whiteboard drawings
|
||||
- **Whiteboard** — AI agents draw on a shared whiteboard in real time — solving equations step by step, sketching flowcharts, or illustrating concepts visually.
|
||||
|
||||
<img src="assets/discussion.gif" width="100%"/>
|
||||
<img src="assets/whiteboard.gif" width="100%"/>
|
||||
|
||||
### Export
|
||||
|
||||
| Format | Description |
|
||||
|--------|-------------|
|
||||
| **PowerPoint (.pptx)** | Fully editable slides with images, charts, and LaTeX formulas |
|
||||
| **Interactive HTML** | Self-contained web pages with interactive simulations |
|
||||
|
||||
### And More
|
||||
|
||||
- **Text-to-Speech** — Multiple voice providers with customizable voices
|
||||
- **Speech Recognition** — Talk to your AI teacher using your microphone
|
||||
- **Web Search** — Agents search the web for up-to-date information during class
|
||||
- **i18n** — Interface supports Chinese and English
|
||||
- **Dark Mode** — Easy on the eyes for late-night study sessions
|
||||
|
||||
---
|
||||
|
||||
## 💡 Use Cases
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
> *"Teach me Python from scratch in 30 min"*
|
||||
|
||||
<img src="assets/python.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
> *"How to play the board game Avalon"*
|
||||
|
||||
<img src="assets/avalon.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
> *"Analyze the stock prices of Zhipu and MiniMax"*
|
||||
|
||||
<img src="assets/zhipu-minimax.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
> *"Break down the latest DeepSeek paper"*
|
||||
|
||||
<img src="assets/deepseek.gif" width="100%"/>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
---
|
||||
|
||||
## 🤝 Contributing
|
||||
|
||||
We welcome contributions from the community! Whether it's bug reports, feature ideas, or pull requests — every bit helps.
|
||||
|
||||
1. Fork the repository
|
||||
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
|
||||
3. Commit your changes (`git commit -m 'Add amazing feature'`)
|
||||
4. Push to the branch (`git push origin feature/amazing-feature`)
|
||||
5. Open a Pull Request
|
||||
|
||||
---
|
||||
|
||||
## 📬 Contact
|
||||
|
||||
If you have any questions, feedback, or would like to get in touch, feel free to reach out via [Issues](https://github.com/THU-MAIC/OpenMAIC/issues).
|
||||
|
||||
---
|
||||
|
||||
## 📄 License
|
||||
|
||||
This project is licensed under the [MIT License](LICENSE).
|
||||
|
||||
|
After Width: | Height: | Size: 11 MiB |
|
After Width: | Height: | Size: 456 KiB |
|
After Width: | Height: | Size: 9.2 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 14 MiB |
|
After Width: | Height: | Size: 2.2 MiB |
|
After Width: | Height: | Size: 759 KiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 7.1 MiB |
@@ -0,0 +1,24 @@
|
||||
services:
|
||||
openmaic:
|
||||
build: .
|
||||
ports:
|
||||
- "3000:3000"
|
||||
env_file:
|
||||
- .env.local
|
||||
volumes:
|
||||
# Optional: mount server-providers.yml for provider config
|
||||
# - ./server-providers.yml:/app/server-providers.yml:ro
|
||||
- openmaic-data:/app/data
|
||||
restart: unless-stopped
|
||||
|
||||
# Optional: MinerU for advanced document parsing (tables, formulas, OCR)
|
||||
# Uncomment to enable:
|
||||
#
|
||||
# mineru:
|
||||
# image: opendatalab/mineru:latest
|
||||
# ports:
|
||||
# - "8080:8080"
|
||||
# restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
openmaic-data:
|
||||
@@ -22,7 +22,7 @@ export const commonZhCN = {
|
||||
loading: '加载中...',
|
||||
},
|
||||
home: {
|
||||
slogan: 'AI 驱动的交互式课堂,让学习更高效',
|
||||
slogan: 'Generative Learning in Multi-Agent Interactive Classroom',
|
||||
greeting: '嗨,',
|
||||
},
|
||||
toolbar: {
|
||||
@@ -97,7 +97,7 @@ export const commonEnUS = {
|
||||
loading: 'Loading...',
|
||||
},
|
||||
home: {
|
||||
slogan: 'AI-powered interactive classrooms for more effective learning',
|
||||
slogan: 'Generative Learning in Multi-Agent Interactive Classroom',
|
||||
greeting: 'Hi, ',
|
||||
},
|
||||
toolbar: {
|
||||
|
||||
@@ -53,7 +53,7 @@ export const generationZhCN = {
|
||||
noPdfSelected: '请先选择PDF文件',
|
||||
generateFailed: '生成课堂失败,请重试',
|
||||
requirementLabel: '课程需求',
|
||||
requirementPlaceholder: '请描述您希望生成的课程内容,例如:\n• 课程主题和核心内容\n• 期望的课程时长和风格\n• 任何特殊要求或偏好',
|
||||
requirementPlaceholder: '输入你想学的任何内容,例如:\n「从零学 Python,30 分钟写出第一个程序」\n「用白板给我讲解傅里叶变换」\n「阿瓦隆桌游怎么玩」',
|
||||
requirementRequired: '请输入课程需求',
|
||||
fileTooLarge: '文件过大,请选择小于50MB的PDF文件',
|
||||
contentTruncated: '由于文件内容过多,已截取前50000个字符用于生成课程',
|
||||
@@ -245,7 +245,7 @@ export const generationEnUS = {
|
||||
noPdfSelected: 'Please select a PDF file first',
|
||||
generateFailed: 'Failed to generate classroom, please try again',
|
||||
requirementLabel: 'Course Requirements',
|
||||
requirementPlaceholder: 'Describe the course you want to generate, for example:\n• Course topic and core content\n• Expected duration and teaching style\n• Any special requirements or preferences',
|
||||
requirementPlaceholder: 'Tell me anything you want to learn, e.g.\n"Teach me Python from scratch in 30 minutes"\n"Explain Fourier Transform on the whiteboard"\n"How to play the board game Avalon"',
|
||||
requirementRequired: 'Please enter course requirements',
|
||||
fileTooLarge: 'File too large. Please select a PDF file smaller than 50MB',
|
||||
contentTruncated: 'Due to the large file content, only the first 50,000 characters will be used for course generation',
|
||||
|
||||