Skip to content
/ ATIE Public

AI教学洞察引擎是一个基于多模态数据与实时计算的课堂质量分析与个性化教学辅助系统。系统采用"感知-分析-决策-辅助"的闭环架构,通过计算机视觉、实时流处理、大数据分析和大语言模型技术,实现从数据采集到智能决策的全流程自动化

Notifications You must be signed in to change notification settings

ember-L/ATIE

Repository files navigation

🎓 AI教学洞察引擎 (AI Teaching Insight Engine)

基于计算机视觉和大数据分析的智能教学辅助系统

License Python Vue Docker Kubernetes

快速开始功能特性架构设计文档贡献指南


📖 项目简介

AI教学洞察引擎是一个创新的智能教学辅助平台,通过实时计算机视觉分析大数据处理人工智能技术,为教师提供课堂洞察,为学生提供个性化学习建议。

🌟 核心价值

  • 📹 实时课堂监控 - 自动分析学生专注度、情绪和行为,无需人工干预
  • ⚡ 智能预警系统 - 及时发现课堂问题,帮助教师快速响应
  • 🤖 AI助教支持 - 基于通义千问的智能对话,提供教学建议
  • 📊 数据驱动决策 - 深度分析历史数据,生成教学效果报告
  • 🎯 个性化学习 - 为每个学生定制专属学习路径

🎯 适用场景

  • 🏫 K12教育 - 中小学课堂教学质量提升
  • 🎓 高等教育 - 大学课堂互动分析
  • 💼 企业培训 - 培训效果评估和优化
  • 🌐 在线教育 - 远程教学质量监控

✨ 核心功能

1. 🎥 实时课堂分析

利用先进的计算机视觉技术,实时捕捉和分析课堂动态:

  • 👤 人脸检测与追踪 - 基于Google MediaPipe,精度>95%,支持多人同时追踪
  • 😊 情绪识别 - 识别7种基本情绪(快乐、悲伤、愤怒、惊讶、恐惧、厌恶、中性)
  • 🎯 专注度分析 - 0-100分量化评分,综合情绪、姿态、视线方向
  • 🙋 行为识别 - 自动识别抬头看黑板、低头做笔记、举手提问、打瞌睡等行为
  • 📈 实时指标 - 平均专注度、情绪分布、互动频率等实时统计

2. 🚨 智能预警系统

基于复杂事件处理(CEP)的多维度预警机制:

  • ⚠️ 专注度预警 - 检测整体或个体专注度异常下降
  • 😕 困惑情绪预警 - 识别学生理解困难的知识点
  • 💤 疲劳预警 - 检测学生疲劳状态,建议调整教学节奏
  • 🤐 互动不足预警 - 提醒教师增加课堂互动
  • 📱 实时推送 - 通过WebSocket即时通知教师

3. 🤖 AI智能助教

基于通义千问大语言模型的智能对话系统:

  • 💬 自然对话 - 支持多轮对话,理解教师意图
  • 📊 数据洞察 - 分析课堂数据,生成教学建议
  • 📝 报告生成 - 自动生成教学效果分析报告
  • 🎓 知识推荐 - 推荐教学资源和改进方案
  • 🔒 数据脱敏 - 保护学生隐私,符合数据安全规范

4. 📈 深度数据分析

基于Apache Spark的批处理分析引擎:

  • 👨‍🎓 学生画像构建 - 分析学习风格、薄弱知识点、参与度
  • 📚 知识点难度分析 - 识别难点知识,优化教学内容
  • 🎯 教学效果评估 - 多维度评估教学质量
  • 📊 可视化报告 - 丰富的图表展示,一目了然

5. 🛤️ 个性化学习路径

为每个学生量身定制的学习方案:

  • 🎯 薄弱点识别 - 基于课堂表现识别知识薄弱环节
  • 📖 资源推荐 - 推荐针对性学习资源
  • 📅 学习计划 - 生成个性化学习时间表
  • 📈 进度追踪 - 实时跟踪学习进展

🏗️ 系统架构

技术栈总览

┌─────────────────────────────────────────────────────────────────┐
│                         前端层 (Frontend)                        │
│  Vue 3 + TypeScript + Element Plus + ECharts + WebSocket       │
└────────────────────────────┬────────────────────────────────────┘
                             │
┌────────────────────────────▼────────────────────────────────────┐
│                      API网关层 (API Gateway)                     │
│     JWT认证 + 请求限流 + 路由代理 + CORS + 健康检查             │
└────────────────────────────┬────────────────────────────────────┘
                             │
┌────────────────────────────▼────────────────────────────────────┐
│                      微服务层 (Microservices)                    │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐          │
│  │  User    │ │  Course  │ │   LLM    │ │    CV    │          │
│  │ Service  │ │ Service  │ │ Service  │ │ Service  │          │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘          │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐                       │
│  │WebSocket │ │ Learning │ │  Health  │                       │
│  │ Service  │ │   Path   │ │  Check   │                       │
│  └──────────┘ └──────────┘ └──────────┘                       │
└────────────────────────────┬────────────────────────────────────┘
                             │
┌────────────────────────────▼────────────────────────────────────┐
│                      消息队列层 (Message Queue)                  │
│              Kafka Cluster (3 Brokers + Zookeeper)             │
└──────────────┬─────────────────────────────────┬────────────────┘
               │                                 │
┌──────────────▼──────────────┐   ┌─────────────▼────────────────┐
│   实时处理 (Stream)          │   │   批处理 (Batch)              │
│   Apache Flink              │   │   Apache Spark               │
│   - 实时指标计算             │   │   - 教学效果分析              │
│   - CEP预警引擎             │   │   - 知识点难度分析            │
│   - 状态管理                │   │   - 学生画像构建              │
└──────────────┬──────────────┘   └─────────────┬────────────────┘
               │                                 │
┌──────────────▼─────────────────────────────────▼────────────────┐
│                      数据存储层 (Data Storage)                   │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐          │
│  │PostgreSQL│ │ClickHouse│ │  Redis   │ │  MinIO   │          │
│  │ 关系数据  │ │ 时序数据  │ │  缓存    │ │ 对象存储  │          │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘          │
└─────────────────────────────────────────────────────────────────┘
               │
┌──────────────▼──────────────────────────────────────────────────┐
│                   监控与日志层 (Monitoring & Logging)            │
│  Prometheus + Grafana + AlertManager + ELK Stack               │
└─────────────────────────────────────────────────────────────────┘

核心组件说明

前端应用 (Frontend)

  • 框架: Vue 3 + Composition API
  • UI库: Element Plus
  • 图表: ECharts 5
  • 状态管理: Pinia
  • 实时通信: WebSocket
  • 端口: 8080

后端微服务 (Backend Services)

服务 端口 职责 技术栈
API Gateway 5000 统一入口、认证、限流 Flask + Redis
User Service 5001 用户认证与授权 Flask + PostgreSQL + JWT
Course Service 5002 课程和教室管理 Flask + PostgreSQL
LLM Service 5003 AI助教对话 Flask + QWEN API
Learning Path 5004 学习路径生成 Flask + PostgreSQL
WebSocket 5005 实时推送 Flask-SocketIO + Redis
CV Service 5300 计算机视觉处理 Flask + MediaPipe + OpenCV

数据存储 (Data Storage)

  • PostgreSQL (5432) - 用户、课程、教室等结构化数据
  • ClickHouse (8123/9000) - 课堂事件、指标等时序数据,3节点集群
  • Redis (6379) - 会话、缓存、限流计数器
  • MinIO (9001/9002) - 视频、图片等对象存储

消息队列 (Message Queue)

  • Kafka (9092/9093/9094) - 3个broker集群,高可用
  • Zookeeper (2181) - Kafka协调服务

流处理与批处理

  • Flink (8081) - 实时流处理,<100ms延迟
  • Spark - 批处理分析,定时任务调度

监控与日志

  • Prometheus (9090) - 指标收集
  • Grafana (3001) - 可视化监控
  • AlertManager (9099) - 告警管理
  • Elasticsearch (9200) - 日志存储
  • Logstash (5044) - 日志处理
  • Kibana (5601) - 日志查询

🚀 快速开始

前置要求

必需软件

  • Docker 20.10+ 和 Docker Compose 2.0+
  • Python 3.11+
  • Node.js 18+ 和 npm 9+
  • Git

可选软件(用于完整开发)

  • Java 11+ 和 Maven 3.8+ (Flink/Spark开发)
  • kubectl (Kubernetes部署)
  • Helm 3.0+ (Kubernetes包管理)

硬件建议

  • CPU: 8核心以上
  • 内存: 16GB以上
  • 磁盘: 50GB可用空间
  • 摄像头: 用于CV服务测试(可选)

方式一:快速体验 CV 服务 ⭐ 推荐

这是最简单的启动方式,只需一条命令即可体验核心的计算机视觉功能。

# 1. 克隆项目
git clone <repository-url>
cd ai-teaching-insight-engine

# 2. 一键启动
./start-cv-only.sh

# 3. 访问测试页面
# 浏览器打开: http://localhost:5300/static/index.html

测试步骤

  1. 在网页界面输入配置:

    • 教室ID: classroom_001
    • 摄像头URL: 0 (使用本地摄像头) 或视频文件路径
    • 目标帧率: 10
    • 处理间隔: 每2帧处理一次
    • 检测精度: 平衡模式
  2. 点击"启动视频流"

  3. 观察实时检测结果:

    • 视频预览中的人脸检测框
    • 学生追踪列表
    • 情绪和专注度数据
    • FPS统计

方式二:启动完整系统

启动所有服务,体验完整功能。

# 1. 配置环境变量
cp .env.example .env
# 编辑 .env 文件,设置必要的配置(如QWEN_API_KEY)

# 2. 启动所有服务
docker-compose up -d

# 3. 等待服务启动(约2-3分钟)
docker-compose ps

# 4. 访问前端应用
# 浏览器打开: http://localhost:8080

服务访问地址

方式三:开发模式启动

适合开发调试,只启动基础设施,应用服务本地运行。

# 1. 启动基础设施(PostgreSQL, Redis, Kafka, ClickHouse)
docker-compose -f docker-compose.dev.yml up -d

# 2. 安装Python依赖
cd backend/user-service && pip install -r requirements.txt
cd ../course-service && pip install -r requirements.txt
# ... 其他服务类似

# 3. 启动后端服务(每个服务在单独终端)
cd backend/api-gateway && python app.py
cd backend/user-service && python app.py
cd backend/course-service && python app.py
cd backend/llm-service && python app.py
cd cv-service && python app.py

# 4. 启动前端
cd frontend
npm install
npm run dev

验证安装

# 检查所有服务状态
./test-services.sh

# 或手动检查
curl http://localhost:5000/health  # API Gateway
curl http://localhost:5001/health  # User Service
curl http://localhost:5002/health  # Course Service
curl http://localhost:5300/health  # CV Service

🔧 完整项目调试指南

第一步:环境准备

1.1 检查系统环境

# 检查Docker
docker --version
docker-compose --version

# 检查Python
python --version  # 应该是 3.11+

# 检查Node.js
node --version    # 应该是 18+
npm --version     # 应该是 9+

# 检查可用端口
lsof -i :5432  # PostgreSQL
lsof -i :6379  # Redis
lsof -i :9092  # Kafka
lsof -i :8080  # Frontend
lsof -i :5300  # CV Service

1.2 克隆项目并配置

# 克隆项目
git clone <repository-url>
cd ai-teaching-insight-engine

# 创建环境变量文件
cp .env.example .env

# 编辑配置(重要!)
vim .env
# 必须配置:
# - QWEN_API_KEY=你的通义千问API密钥
# - JWT_SECRET=强密码(生产环境)
# - 数据库密码(生产环境)

第二步:启动基础设施

2.1 启动数据库和消息队列

# 使用开发配置启动基础设施
docker-compose -f docker-compose.dev.yml up -d

# 查看启动日志
docker-compose -f docker-compose.dev.yml logs -f

# 等待所有服务就绪(约30秒)

2.2 验证基础设施

# 检查容器状态
docker-compose -f docker-compose.dev.yml ps

# 应该看到以下服务都是 Up 状态:
# - postgres
# - redis
# - zookeeper
# - kafka
# - clickhouse

# 测试PostgreSQL连接
docker exec -it <postgres_container> psql -U admin -d teaching_insight -c "SELECT 1"

# 测试Redis连接
docker exec -it <redis_container> redis-cli ping

# 测试Kafka
docker exec -it <kafka_container> kafka-topics --list --bootstrap-server localhost:9092

# 测试ClickHouse
curl http://localhost:8123/ping

2.3 初始化数据库

# ClickHouse会自动执行 clickhouse/init-db.sql
# 验证表是否创建
docker exec -it <clickhouse_container> clickhouse-client --user admin --password admin123 --query "SHOW TABLES FROM teaching_insight"

# 应该看到:
# - classroom_events
# - classroom_metrics

第三步:启动后端服务

3.1 安装Python依赖

# 为每个服务安装依赖
cd backend/api-gateway
pip install -r requirements.txt

cd ../user-service
pip install -r requirements.txt

cd ../course-service
pip install -r requirements.txt

cd ../llm-service
pip install -r requirements.txt

cd ../learning-path-service
pip install -r requirements.txt

cd ../websocket-service
pip install -r requirements.txt

cd ../../cv-service
pip install -r requirements.txt

3.2 启动服务(推荐使用tmux或多个终端)

终端1 - User Service

cd backend/user-service
export FLASK_ENV=development
export DATABASE_URL=postgresql://admin:admin123@localhost:5432/teaching_insight
export REDIS_URL=redis://localhost:6379/0
export JWT_SECRET_KEY=your-secret-key
python app.py
# 应该看到: Running on http://0.0.0.0:5001

终端2 - Course Service

cd backend/course-service
export FLASK_ENV=development
export DATABASE_URL=postgresql://admin:admin123@localhost:5432/teaching_insight
export REDIS_URL=redis://localhost:6379/0
python app.py
# 应该看到: Running on http://0.0.0.0:5002

终端3 - LLM Service

cd backend/llm-service
export FLASK_ENV=development
export DATABASE_URL=postgresql://admin:admin123@localhost:5432/teaching_insight
export REDIS_URL=redis://localhost:6379/0
export QWEN_API_KEY=你的API密钥
python app.py
# 应该看到: Running on http://0.0.0.0:5003

终端4 - Learning Path Service

cd backend/learning-path-service
export FLASK_ENV=development
export DATABASE_URL=postgresql://admin:admin123@localhost:5432/teaching_insight
export REDIS_URL=redis://localhost:6379/0
python app.py
# 应该看到: Running on http://0.0.0.0:5004

终端5 - WebSocket Service

cd backend/websocket-service
export FLASK_ENV=development
export REDIS_URL=redis://localhost:6379/0
python app.py
# 应该看到: Running on http://0.0.0.0:5005

终端6 - CV Service

cd cv-service
export FLASK_ENV=development
export KAFKA_BOOTSTRAP_SERVERS=localhost:9092
export SERVICE_PORT=5300
python app.py
# 应该看到: Running on http://0.0.0.0:5300

终端7 - API Gateway

cd backend/api-gateway
export FLASK_ENV=development
export REDIS_HOST=localhost
export REDIS_PORT=6379
export JWT_SECRET=your-secret-key
export USER_SERVICE_URL=http://localhost:5001
export COURSE_SERVICE_URL=http://localhost:5002
export LLM_SERVICE_URL=http://localhost:5003
export CV_SERVICE_URL=http://localhost:5300
python app.py
# 应该看到: Running on http://0.0.0.0:5000

3.3 验证后端服务

# 测试所有服务的健康检查
curl http://localhost:5000/health | jq  # API Gateway
curl http://localhost:5001/health | jq  # User Service
curl http://localhost:5002/health | jq  # Course Service
curl http://localhost:5003/health | jq  # LLM Service
curl http://localhost:5004/health | jq  # Learning Path
curl http://localhost:5005/health | jq  # WebSocket
curl http://localhost:5300/health | jq  # CV Service

# 或使用测试脚本
./test-services.sh

第四步:启动前端

4.1 安装前端依赖

cd frontend
npm install

4.2 配置前端环境

# 创建开发环境配置
cat > .env.development << EOF
VITE_API_BASE_URL=http://localhost:5000/api
VITE_WS_URL=ws://localhost:5005
EOF

4.3 启动前端开发服务器

终端8 - Frontend

cd frontend
npm run dev
# 应该看到: Local: http://localhost:8080

4.4 访问前端应用

打开浏览器访问: http://localhost:8080

第五步:测试核心功能

5.1 测试用户注册和登录

# 注册教师账号
curl -X POST http://localhost:5000/api/users/register \
  -H "Content-Type: application/json" \
  -d '{
    "username": "teacher1",
    "password": "password123",
    "role": "TEACHER",
    "real_name": "张老师",
    "email": "teacher1@example.com"
  }'

# 登录获取JWT令牌
curl -X POST http://localhost:5000/api/users/login \
  -H "Content-Type: application/json" \
  -d '{
    "username": "teacher1",
    "password": "password123"
  }'

# 保存返回的access_token,后续请求需要使用

5.2 测试CV服务

方式A:使用Web界面(推荐)

  1. 访问: http://localhost:5300/static/index.html
  2. 填写配置:
    • 教室ID: classroom_001
    • 摄像头URL: 0 (本地摄像头) 或视频文件路径
    • 目标帧率: 10
    • 处理间隔: 每2帧处理一次
  3. 点击"启动视频流"
  4. 观察实时检测结果

方式B:使用API

# 启动视频流
curl -X POST http://localhost:5300/api/cv/stream/start \
  -H "Content-Type: application/json" \
  -d '{
    "classroom_id": "classroom_001",
    "camera_url": "0",
    "target_fps": 10,
    "process_every_n_frames": 2
  }'

# 保存返回的stream_id

# 查看流状态
curl http://localhost:5300/api/cv/stream/stats/<stream_id> | jq

# 查看学生状态
curl http://localhost:5300/api/cv/stream/states/<stream_id> | jq

# 停止视频流
curl -X POST http://localhost:5300/api/cv/stream/stop \
  -H "Content-Type: application/json" \
  -d '{"stream_id": "<stream_id>"}'

5.3 测试Kafka消息流

# 监听课堂事件
docker exec -it <kafka_container> kafka-console-consumer \
  --bootstrap-server localhost:9092 \
  --topic classroom-events \
  --from-beginning

# 启动CV服务后,应该能看到实时事件消息

5.4 测试ClickHouse数据存储

# 查询课堂事件
docker exec -it <clickhouse_container> clickhouse-client \
  --user admin --password admin123 \
  --query "SELECT * FROM teaching_insight.classroom_events LIMIT 10"

# 查询课堂指标
docker exec -it <clickhouse_container> clickhouse-client \
  --user admin --password admin123 \
  --query "SELECT * FROM teaching_insight.classroom_metrics LIMIT 10"

第六步:调试常见问题

6.1 服务无法启动

问题:端口被占用

# 查找占用端口的进程
lsof -i :5432  # 或其他端口

# 杀死进程
kill -9 <PID>

问题:Docker容器启动失败

# 查看容器日志
docker-compose -f docker-compose.dev.yml logs <service_name>

# 重启容器
docker-compose -f docker-compose.dev.yml restart <service_name>

# 完全重建
docker-compose -f docker-compose.dev.yml down
docker-compose -f docker-compose.dev.yml up -d --force-recreate

6.2 Kafka连接问题

问题:Kafka启动失败

# Kafka需要Zookeeper先启动
# 使用按序启动脚本
./start-infrastructure.sh

# 或手动按顺序启动
docker-compose -f docker-compose.dev.yml up -d zookeeper
sleep 10
docker-compose -f docker-compose.dev.yml up -d kafka

问题:无法连接Kafka

# 检查Kafka是否就绪
docker exec -it <kafka_container> kafka-broker-api-versions \
  --bootstrap-server localhost:9092

# 检查topic是否存在
docker exec -it <kafka_container> kafka-topics \
  --list --bootstrap-server localhost:9092

6.3 CV服务问题

问题:摄像头无法打开

# 检查摄像头权限(macOS)
# 系统偏好设置 > 安全性与隐私 > 摄像头

# 尝试不同的摄像头ID
# 在Web界面尝试: 0, 1, 2

# 使用视频文件测试
# 摄像头URL输入: /path/to/video.mp4

问题:检测精度不够

cd cv-service
./set_accuracy_mode.sh
# 选择 1 (高精度模式)

问题:性能太慢

# 在Web界面调整:
# - 处理间隔: 每3帧或每5帧
# - 目标帧率: 5-8 FPS
# - 检测精度: 高召回模式

6.4 数据库问题

问题:PostgreSQL连接失败

# 检查容器状态
docker-compose -f docker-compose.dev.yml ps postgres

# 检查日志
docker-compose -f docker-compose.dev.yml logs postgres

# 测试连接
docker exec -it <postgres_container> psql -U admin -d teaching_insight

问题:ClickHouse查询慢

# 检查表大小
docker exec -it <clickhouse_container> clickhouse-client \
  --user admin --password admin123 \
  --query "SELECT table, formatReadableSize(sum(bytes)) as size 
           FROM system.parts 
           WHERE database = 'teaching_insight' 
           GROUP BY table"

# 优化查询(添加时间范围)
# WHERE timestamp >= now() - INTERVAL 1 DAY

6.5 前端问题

问题:前端无法连接后端

# 检查API Gateway是否运行
curl http://localhost:5000/health

# 检查CORS配置
# 在 backend/api-gateway/app.py 中确认 CORS_ORIGINS 包含前端地址

# 检查浏览器控制台
# F12 > Console > 查看错误信息

问题:WebSocket连接失败

# 检查WebSocket服务
curl http://localhost:5005/health

# 检查Redis连接
docker exec -it <redis_container> redis-cli ping

第七步:性能监控

7.1 查看服务日志

# 实时查看所有日志
tail -f logs/*.log

# 查看特定服务日志
tail -f logs/cv-service.log
tail -f logs/api-gateway.log

# 搜索错误
grep -i error logs/*.log
grep -i warning logs/*.log

7.2 监控资源使用

# Docker容器资源使用
docker stats

# 系统资源使用(macOS)
top -l 1 | grep "CPU usage"
vm_stat

# 磁盘使用
df -h

7.3 性能测试

# API压力测试(需要安装 apache-bench)
ab -n 1000 -c 10 http://localhost:5000/health

# CV服务性能测试
cd cv-service
python test_performance_optimization.py

第八步:停止和清理

8.1 停止服务

# 停止所有Python进程
pkill -f "python app.py"

# 停止前端
pkill -f "npm run dev"

# 停止Docker容器
docker-compose -f docker-compose.dev.yml down

# 或使用停止脚本
./stop-dev.sh

8.2 清理数据

# 清理Docker数据卷(会删除所有数据!)
docker-compose -f docker-compose.dev.yml down -v

# 清理日志
rm -rf logs/*.log

# 清理Python缓存
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find . -type d -name ".pytest_cache" -exec rm -rf {} + 2>/dev/null || true

📁 项目结构

ai-teaching-insight-engine/
├── 📱 frontend/                    # Vue 3 前端应用
│   ├── src/
│   │   ├── api/                   # API接口封装
│   │   ├── components/            # Vue组件
│   │   ├── router/                # 路由配置
│   │   ├── stores/                # Pinia状态管理
│   │   ├── types/                 # TypeScript类型
│   │   ├── utils/                 # 工具函数
│   │   └── views/                 # 页面组件
│   ├── package.json
│   └── vite.config.ts
│
├── 🔧 backend/                     # Python Flask 微服务
│   ├── api-gateway/               # API网关 (5000)
│   │   ├── app.py
│   │   ├── config.py
│   │   └── requirements.txt
│   ├── user-service/              # 用户服务 (5001)
│   │   ├── app.py
│   │   ├── models/
│   │   ├── routes/
│   │   └── utils/
│   ├── course-service/            # 课程服务 (5002)
│   ├── llm-service/               # LLM服务 (5003)
│   ├── learning-path-service/     # 学习路径 (5004)
│   ├── websocket-service/         # WebSocket (5005)
│   └── monitoring_utils.py        # 监控工具
│
├── 📹 cv-service/                  # 计算机视觉服务 (5300)
│   ├── app.py                     # Flask应用
│   ├── video_capture.py           # 视频采集
│   ├── face_detector.py           # 人脸检测
│   ├── emotion_recognizer.py      # 情绪识别
│   ├── attention_analyzer.py      # 专注度分析
│   ├── tracker.py                 # 学生追踪
│   ├── stream_manager.py          # 流管理
│   ├── event_producer.py          # Kafka生产者
│   ├── static/                    # 测试页面
│   └── tests/                     # 测试用例
│
├── 🌊 flink-jobs/                  # Flink 流处理作业 (Java)
│   ├── src/main/java/
│   │   └── com/teaching/insight/flink/
│   │       ├── ClassroomStreamingJob.java
│   │       ├── config/
│   │       ├── deserializer/
│   │       └── model/
│   └── pom.xml
│
├── ⚡ spark-jobs/                  # Spark 批处理作业 (Java)
│   ├── src/main/java/
│   │   └── com/teaching/insight/spark/
│   │       ├── SparkJobApplication.java
│   │       ├── config/
│   │       ├── datasource/
│   │       ├── job/
│   │       │   ├── TeachingEffectivenessAnalysisJob.java
│   │       │   ├── KnowledgePointDifficultyAnalysisJob.java
│   │       │   └── StudentProfileBuildingJob.java
│   │       └── scheduler/
│   └── pom.xml
│
├── 🗄️ clickhouse/                  # ClickHouse 配置
│   ├── config.xml
│   ├── users.xml
│   └── init-db.sql                # 数据库初始化脚本
│
├── ☸️ kubernetes/                  # Kubernetes 部署配置
│   ├── deploy.sh                  # 部署脚本
│   ├── *-deployment.yaml          # 各服务部署配置
│   ├── configmaps.yaml
│   ├── secrets.yaml
│   └── ingress.yaml
│
├── 📊 monitoring/                  # 监控配置
│   ├── prometheus/
│   │   ├── prometheus.yml
│   │   └── alerts.yml
│   ├── grafana/
│   │   └── dashboards/
│   ├── alertmanager/
│   │   └── alertmanager.yml
│   └── logstash/
│       └── logstash.conf
│
├── 🧪 tests/                       # 集成测试
│   └── integration/
│
├── 📜 scripts/                     # 工具脚本
│   ├── setup-dev.sh
│   └── validate-docker-setup.sh
│
├── 📚 docs/                        # 文档
│
├── 🐳 docker-compose.yml           # 完整系统Docker配置
├── 🐳 docker-compose.dev.yml       # 开发环境简化配置
├── 📋 Makefile                     # 构建和部署命令
├── 🚀 start-cv-only.sh             # 快速启动CV服务
├── 🛑 stop-dev.sh                  # 停止所有服务
├── ✅ test-services.sh             # 测试服务状态
├── .env.example                   # 环境变量示例
├── .gitignore
└── 📖 README.md                    # 本文档

🧪 测试

运行测试

# 后端服务测试
cd backend/user-service
pytest tests/ -v

# CV服务测试
cd cv-service
pytest tests/ -v

# 前端测试
cd frontend
npm run test

# Flink作业测试
cd flink-jobs
mvn test

# Spark作业测试
cd spark-jobs
mvn test

属性测试

项目使用属性测试(Property-Based Testing)验证系统正确性:

# CV服务属性测试
cd cv-service
pytest tests/test_video_capture_properties.py -v

# 后端服务属性测试
cd backend
pytest test_*_properties.py -v

# Flink作业属性测试
cd flink-jobs
mvn test -Dtest=*PropertyTest

集成测试

# 运行所有集成测试
cd tests/integration
pytest -v

# 运行特定测试
pytest test_e2e_data_flow.py -v
pytest test_ai_assistant_flow.py -v

📊 性能指标

CV服务性能

  • 处理帧率: ≥10 FPS(经属性测试验证)
  • 人脸检测精度: >95%
  • 情绪识别准确率: >85%
  • 专注度分析延迟: <50ms

流处理性能

  • 事件处理延迟: <100ms(经属性测试验证)
  • 吞吐量: >10,000 events/sec
  • Checkpoint时间: <60s

系统容量

  • 并发课堂数: 100+(通过HPA扩展)
  • 并发用户数: 10,000+
  • 数据保留: 课堂事件6个月,指标1年

📖 文档导航

快速入门文档

故障排除

CV服务文档

后端服务文档

数据处理文档

部署文档

贡献文档

🔐 安全性

认证与授权

  • JWT令牌: 所有API请求需要JWT认证
  • 角色权限: 基于角色的访问控制(RBAC)
  • 密码加密: 使用bcrypt加密存储

数据安全

  • 数据脱敏: LLM服务自动脱敏敏感信息
  • 访问日志: 记录所有数据访问操作
  • 加密传输: HTTPS/WSS加密通信

隐私保护

  • 最小化采集: 只采集必要的课堂数据
  • 数据保留: 自动清理过期数据(TTL策略)
  • 匿名化: 支持数据匿名化处理

🚀 生产部署

Kubernetes部署

# 1. 配置kubectl
kubectl config use-context <your-cluster>

# 2. 创建命名空间
kubectl create namespace teaching-insight

# 3. 配置secrets(重要!)
# 编辑 kubernetes/secrets.yaml,替换所有密码和密钥
vim kubernetes/secrets.yaml

# 4. 执行部署
cd kubernetes
./deploy.sh

# 5. 验证部署
kubectl get pods -n teaching-insight
kubectl get services -n teaching-insight
kubectl get hpa -n teaching-insight

详细部署文档请参考: kubernetes/README.md

Docker Swarm部署

# 1. 初始化Swarm
docker swarm init

# 2. 部署Stack
docker stack deploy -c docker-compose.yml teaching-insight

# 3. 查看服务
docker stack services teaching-insight

# 4. 扩展服务
docker service scale teaching-insight_cv-service=5

监控和告警

生产环境自动部署完整的监控体系:

🔄 CI/CD

GitHub Actions

项目包含完整的CI/CD流程:

# .github/workflows/ci.yml
- 代码检查(Lint)
- 单元测试
- 集成测试
- Docker镜像构建
- 自动部署到测试环境

手动部署流程

# 1. 构建所有Docker镜像
make docker-build

# 2. 推送到镜像仓库
docker tag ai-teaching-insight/api-gateway:latest your-registry/api-gateway:latest
docker push your-registry/api-gateway:latest
# ... 其他镜像类似

# 3. 更新Kubernetes配置
kubectl set image deployment/api-gateway \
  api-gateway=your-registry/api-gateway:latest \
  -n teaching-insight

# 4. 验证部署
kubectl rollout status deployment/api-gateway -n teaching-insight

🤝 贡献指南

我们欢迎所有形式的贡献!

如何贡献

  1. Fork项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 提交Pull Request

代码规范

  • Python: 遵循PEP 8,使用black格式化
  • TypeScript: 使用ESLint配置
  • Java: 遵循Google Java Style Guide
  • 提交信息: 使用语义化提交(feat/fix/docs/style/refactor/test/chore)

测试要求

所有代码提交必须包含测试:

  • 单元测试覆盖率 ≥ 80%
  • 属性测试覆盖核心功能
  • 集成测试覆盖关键流程

详细贡献指南请参考: CONTRIBUTING.md

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件

👥 团队

  • 项目负责人: [Your Name]
  • 技术架构: [Architect Name]
  • 前端开发: [Frontend Team]
  • 后端开发: [Backend Team]
  • 算法工程: [AI Team]

🙏 致谢

感谢以下开源项目:

📞 联系我们

🗺️ 路线图

v1.0 (当前版本)

  • ✅ 实时课堂监控
  • ✅ 智能预警系统
  • ✅ AI助教对话
  • ✅ 学生画像构建

v1.1 (计划中)

  • 🔄 多语言支持
  • 🔄 移动端应用
  • 🔄 离线模式
  • 🔄 更多AI模型集成

v2.0 (未来)

  • 📋 虚拟现实课堂
  • 📋 自适应学习系统
  • 📋 区块链证书
  • 📋 联邦学习支持

⭐ 如果这个项目对你有帮助,请给我们一个Star!⭐

Made with ❤️ by AI Teaching Insight Team

About

AI教学洞察引擎是一个基于多模态数据与实时计算的课堂质量分析与个性化教学辅助系统。系统采用"感知-分析-决策-辅助"的闭环架构,通过计算机视觉、实时流处理、大数据分析和大语言模型技术,实现从数据采集到智能决策的全流程自动化

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published