基于大模型的个性化练习题即时生成与推荐系统
项目概述
项目背景
本系统针对计算机组成原理课程,利用大模型(DeepSeek API)实现练习题的自动生成与个性化推荐。系统结合学生答题行为构建学习画像,通过贝叶斯知识追踪(BKT)算法动态更新学生知识掌握度,实现"生成-评估-推荐-反馈"的闭环学习系统。
核心功能
- 知识点结构化管理与可视化
- 基于大模型的多题型自动出题(选择题、填空题)
- 学生知识掌握度动态追踪(BKT算法)
- 个性化题目推荐算法
- 教师端学情分析与题目审核
- 学生端练习、错题本、学习统计
一、系统架构设计
1.1 总体架构
系统采用前后端分离的三层架构:
┌─────────────────────────────────────────────────────────┐
│ 表现层(前端) │
│ Vue3 + Element Plus + ECharts │
│ 用户交互界面 / 数据可视化 / 路由管理 │
└─────────────────────────────────────────────────────────┘
↕ HTTP/REST API
┌─────────────────────────────────────────────────────────┐
│ 业务逻辑层(后端) │
│ Django + Django REST Framework │
│ ┌──────────────┬──────────────┬──────────────┐ │
│ │ 知识点管理 │ 智能出题 │ 推荐算法 │ │
│ │ 模块 │ 模块 │ 模块 │ │
│ └──────────────┴──────────────┴──────────────┘ │
│ ┌──────────────┬──────────────┬──────────────┐ │
│ │ 用户认证 │ 答题评估 │ 学情分析 │ │
│ │ 模块 │ 模块 │ 模块 │ │
│ └──────────────┴──────────────┴──────────────┘ │
└─────────────────────────────────────────────────────────┘
↕ ORM
┌─────────────────────────────────────────────────────────┐
│ 数据层(数据库) │
│ SQLite 数据库 │
│ 用户表 | 知识点表 | 题目表 | 答题记录表 | 掌握度表 │
└─────────────────────────────────────────────────────────┘
↕ API调用
┌─────────────────────────────────────────────────────────┐
│ 外部服务(AI模型) │
│ DeepSeek API (OpenAI兼容) │
│ 智能题目生成服务 │
└─────────────────────────────────────────────────────────┘
1.2 核心模块说明
1.2.1 知识点管理模块
- 知识点的增删改查操作
- 支持树形层级结构(章节-知识点)
- 难度标签管理(简单/中等/困难)
- 知识点关联题目统计
1.2.2 智能出题模块
- 调用DeepSeek API生成题目
- 支持选择题和填空题两种题型
- 题目质量控制(去重、格式校验)
- 本地模板兜底机制
1.2.3 学生模型模块
- 贝叶斯知识追踪(BKT)算法
- 动态更新知识掌握度
- 答题历史记录
- 学习趋势分析
1.2.4 推荐算法模块
- 基于掌握度的推荐策略
- 薄弱知识点优先推荐
- 个性化练习题推送
二、技术栈详解
2.1 后端技术栈
2.1.1 Django 5.0.7
- Python Web框架,提供完整的MVC架构
- 内置ORM系统,简化数据库操作
- 强大的中间件机制,支持跨域、安全策略等
- 自动化的管理后台
2.1.2 Django REST Framework
- 构建RESTful API的工具包
- 提供序列化器(Serializer)进行数据转换
- 内置分页、过滤、认证等功能
- 支持ViewSet快速构建CRUD接口
2.1.3 SQLite 数据库
- 轻量级嵌入式数据库
- 无需独立服务器进程
- 适合中小型应用和开发测试
- 支持标准SQL语法
2.1.4 DeepSeek API
- 基于大语言模型的AI服务
- 兼容OpenAI API接口规范
- 支持结构化JSON输出
- 用于智能生成练习题
2.2 前端技术栈
2.2.1 Vue 3.5.12
- 渐进式JavaScript框架
- Composition API提供更灵活的代码组织
- 响应式数据绑定
- 组件化开发模式
2.2.2 Vite 5.4.10
- 新一代前端构建工具
- 基于ES Module的快速冷启动
- 热模块替换(HMR)
- 生产环境优化打包
2.2.3 Element Plus 2.8.7
- 基于Vue 3的UI组件库
- 提供丰富的表单、表格、对话框等组件
- 响应式布局支持
- 主题定制能力
2.2.4 ECharts 5.5.1
- 强大的数据可视化库
- 支持多种图表类型(折线图、柱状图、饼图等)
- 交互式图表展示
- 用于学情分析和统计展示
2.2.5 Axios 1.7.7
- 基于Promise的HTTP客户端
- 支持请求/响应拦截器
- 自动转换JSON数据
- 用于前后端数据交互
2.2.6 Pinia 2.2.6
- Vue 3官方推荐的状态管理库
- 轻量级、类型安全
- 支持模块化状态管理
- 用于管理用户登录状态、全局配置等
2.3 辅助工具
2.3.1 CORS跨域处理
- 后端使用django-cors-headers中间件
- 允许前端跨域访问API
- 配置允许的源、方法、头部
2.3.2 内容安全策略(CSP)
- 使用django-csp中间件
- 防止XSS攻击
- 控制资源加载来源
三、数据库设计
3.1 数据库选型
本系统使用SQLite作为数据库,原因如下:
- 轻量级,无需独立服务器
- 适合中小型应用
- 便于开发和部署
- 支持完整的关系型数据库特性
3.2 数据表设计
3.2.1 角色表(Role)
| 字段名 | 类型 | 长度 | 非空 | 唯一 | 默认值 | 说明 |
|---|---|---|---|---|---|---|
| id | BigAutoField | - | 是 | 是 | 自增 | 主键 |
| role_name | CharField | 255 | 否 | 否 | ‘’ | 角色名称(如:学生、教师、管理员) |
| description | TextField | - | 否 | 否 | ‘’ | 角色描述 |
| created_at | DateTimeField | - | 否 | 否 | 当前时间 | 创建时间 |
功能说明:存储系统角色信息,用于权限控制和功能区分。
3.2.2 用户信息表(Profile)
| 字段名 | 类型 | 长度 | 非空 | 唯一 | 默认值 | 说明 |
|---|---|---|---|---|---|---|
| id | BigAutoField | - | 是 | 是 | 自增 | 主键 |
| username | CharField | 255 | 否 | 是 | ‘’ | 用户名(登录账号) |
| password | CharField | 255 | 否 | 否 | ‘’ | 密码(加密存储) |
| name | CharField | 255 | 否 | 否 | ‘’ | 真实姓名 |
| gender | CharField | 255 | 否 | 否 | ‘’ | 性别 |
| avatar | ImageField | - | 否 | 否 | avatars/default.png | 头像路径 |
| phone | CharField | 255 | 否 | 否 | ‘’ | 手机号 |
| CharField | 255 | 否 | 否 | ‘’ | 邮箱 | |
| role | ForeignKey | - | 否 | 否 | 2 | 角色外键(关联Role表) |
| dept | CharField | 255 | 否 | 否 | ‘’ | 所属部门 |
| notes | TextField | - | 否 | 否 | ‘’ | 备注信息 |
功能说明:存储用户基本信息,支持学生、教师、管理员三种角色。密码使用Django内置的make_password进行加密。
3.2.3 知识点表(Knowledge)
| 字段名 | 类型 | 长度 | 非空 | 唯一 | 默认值 | 说明 |
|---|---|---|---|---|---|---|
| id | BigAutoField | - | 是 | 是 | 自增 | 主键 |
| name | CharField | 255 | 否 | 否 | ‘’ | 知识点名称 |
| parent_id | ForeignKey | - | 否 | 否 | NULL | 父级知识点(自关联,支持树形结构) |
| difficulty | CharField | 255 | 否 | 否 | ‘’ | 难度等级(简单/中等/困难) |
| description | TextField | - | 否 | 否 | ‘’ | 知识点描述 |
| created_at | DateTimeField | - | 否 | 否 | 当前时间 | 创建时间 |
功能说明:存储计算机组成原理课程的知识点,支持层级结构(如:章节-知识点)。parent_id为NULL表示顶级知识点。
3.2.4 题目表(Question)
| 字段名 | 类型 | 长度 | 非空 | 唯一 | 默认值 | 说明 |
|---|---|---|---|---|---|---|
| id | BigAutoField | - | 是 | 是 | 自增 | 主键 |
| type | CharField | 255 | 否 | 否 | ‘’ | 题目类型(选择题/填空题) |
| content | TextField | - | 否 | 否 | ‘’ | 题目内容(题干) |
| options | JSONField | - | 否 | 否 | NULL | 选项(选择题为数组,填空题为NULL) |
| answer | CharField | 255 | 否 | 否 | ‘’ | 正确答案 |
| explanation | TextField | - | 否 | 否 | ‘’ | 答案解析 |
| knowledge_id | ForeignKey | - | 否 | 否 | NULL | 关联知识点外键 |
| difficulty | CharField | 255 | 否 | 否 | ‘’ | 难度等级 |
| generated_at | DateTimeField | - | 否 | 否 | 当前时间 | 生成时间 |
| review_status | CharField | 32 | 否 | 否 | ‘approved’ | 审核状态(pending/approved/rejected) |
| gen_source | CharField | 32 | 否 | 否 | ‘seed’ | 题目来源(ai/template/seed) |
功能说明:存储练习题信息。options字段使用JSON格式存储选择题选项(如:[[“A”,“选项A”],[“B”,“选项B”]])。review_status用于教师审核AI生成的题目。
3.2.5 答题记录表(Record)
| 字段名 | 类型 | 长度 | 非空 | 唯一 | 默认值 | 说明 |
|---|---|---|---|---|---|---|
| id | BigAutoField | - | 是 | 是 | 自增 | 主键 |
| student_id | ForeignKey | - | 否 | 否 | NULL | 学生外键(关联Profile表) |
| question_id | ForeignKey | - | 否 | 否 | NULL | 题目外键(关联Question表) |
| is_correct | CharField | 255 | 否 | 否 | ‘’ | 是否正确(是/否) |
| create_time | DateTimeField | - | 否 | 否 | 当前时间 | 答题时间 |
功能说明:记录学生的每次答题行为,用于统计分析和掌握度更新。
3.2.6 掌握度表(Mastery)
| 字段名 | 类型 | 长度 | 非空 | 唯一 | 默认值 | 说明 |
|---|---|---|---|---|---|---|
| id | BigAutoField | - | 是 | 是 | 自增 | 主键 |
| student_id | ForeignKey | - | 否 | 否 | NULL | 学生外键(关联Profile表) |
| knowledge_id | ForeignKey | - | 否 | 否 | NULL | 知识点外键(关联Knowledge表) |
| mastery_score | DecimalField | 10,2 | 否 | 否 | 0.00 | 掌握度分数(0-100) |
| updated_at | DateTimeField | - | 否 | 否 | 当前时间 | 更新时间 |
功能说明:存储学生对每个知识点的掌握程度,通过BKT算法动态更新。mastery_score范围为0-100,分数越高表示掌握越好。
3.2.7 系统反馈表(Feedback)
| 字段名 | 类型 | 长度 | 非空 | 唯一 | 默认值 | 说明 |
|---|---|---|---|---|---|---|
| id | BigAutoField | - | 是 | 是 | 自增 | 主键 |
| user | ForeignKey | - | 否 | 否 | NULL | 用户外键(关联Profile表) |
| subject | CharField | 255 | 否 | 否 | ‘’ | 反馈主题 |
| message | TextField | - | 否 | 否 | ‘’ | 反馈内容 |
| resolved | CharField | 255 | 否 | 否 | ‘’ | 是否已解决(是/否) |
| image | ImageField | - | 否 | 否 | NULL | 配图路径 |
| video | FileField | - | 否 | 否 | NULL | 视频路径 |
| created_at | DateTimeField | - | 否 | 否 | 当前时间 | 反馈时间 |
功能说明:用户可以提交系统使用反馈,支持文字、图片、视频等多种形式。
3.3 数据表关系图(ER图)
┌─────────────┐
│ Role │
│ (角色表) │
└──────┬──────┘
│ 1
│
│ N
┌──────┴──────────────────────────────────────────┐
│ Profile (用户信息表) │
│ id, username, password, name, role, ... │
└──────┬──────────────────────────┬────────────────┘
│ 1 │ 1
│ │
│ N │ N
┌──────┴──────┐ ┌────────┴────────┐
│ Record │ │ Mastery │
│ (答题记录表) │ │ (掌握度表) │
└──────┬──────┘ └────────┬────────┘
│ N │ N
│ │
│ 1 │ 1
┌──────┴──────────────────────────┴────────┐
│ Knowledge (知识点表) │
│ id, name, parent_id, difficulty, ... │
└──────┬──────────────────────────┬────────┘
│ 1 (自关联) │ 1
│ │
│ N │ N
└──────────────┐ ┌───────┘
│ │
┌─────┴───┴─────┐
│ Question │
│ (题目表) │
└───────────────┘
┌─────────────┐
│ Feedback │
│ (反馈表) │
└──────┬──────┘
│ N
│
│ 1
┌──────┴──────┐
│ Profile │
└─────────────┘
关系说明:
- Role与Profile:一对多(一个角色可以有多个用户)
- Profile与Record:一对多(一个学生有多条答题记录)
- Profile与Mastery:一对多(一个学生对多个知识点有掌握度)
- Knowledge与Question:一对多(一个知识点对应多道题目)
- Knowledge自关联:支持树形层级结构
- Question与Record:一对多(一道题目可被多次作答)
- Knowledge与Mastery:一对多(一个知识点对应多个学生的掌握度)
- Profile与Feedback:一对多(一个用户可提交多条反馈)
四、后端目录结构说明
4.1 整体目录结构
Backend/
├── Backend/ Django项目配置目录
│ ├── __init__.py
│ ├── settings.py 项目配置文件(数据库、中间件、应用等)
│ ├── urls.py 项目主路由配置
│ ├── wsgi.py WSGI部署配置
│ └── asgi.py ASGI部署配置
├── App/ 主应用目录
│ ├── migrations/ 数据库迁移文件
│ │ ├── 0001_initial.py 初始化迁移
│ │ └── 0002_question_review_source.py 题目审核字段迁移
│ ├── models.py 数据模型定义
│ ├── views.py 视图函数(API接口)
│ ├── serializers.py 序列化器(数据转换)
│ ├── urls.py 应用路由配置
│ ├── deepseek_client.py DeepSeek API客户端
│ ├── practice_service.py 练习题业务逻辑(生成、推荐、BKT)
│ ├── admin.py Django管理后台配置
│ ├── apps.py 应用配置
│ └── tests.py 单元测试
├── media/ 媒体文件存储
│ ├── avatars/ 用户头像
│ └── feedback/ 反馈附件(图片、视频)
├── db.sqlite3 SQLite数据库文件
├── manage.py Django管理脚本
├── .env 环境变量配置(API密钥等)
├── .env.example 环境变量示例
└── .gitignore Git忽略文件配置
4.2 核心文件详解
4.2.1 settings.py(项目配置)
主要配置项:
- 数据库配置
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
}
- 安装的应用
- django.contrib.admin:管理后台
- rest_framework:REST API框架
- corsheaders:跨域支持
- drf_yasg:API文档生成
- App:主应用
- 中间件配置
- CorsMiddleware:处理跨域请求
- CSPMiddleware:内容安全策略
- 禁用CSRF(前后端分离)
- DeepSeek API配置
DEEPSEEK_API_KEY = os.environ.get("DEEPSEEK_API_KEY", "")
DEEPSEEK_API_BASE = "https://api.deepseek.com/v1"
DEEPSEEK_MODEL = "deepseek-chat"
DEEPSEEK_TIMEOUT = 90
- BKT算法参数
USE_BKT_MASTERY = True 启用贝叶斯知识追踪
BKT_GUESS = 0.25 猜测率
BKT_SLIP = 0.1 失误率
BKT_P0 = 0.5 初始掌握概率
- 媒体文件配置
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
4.2.2 models.py(数据模型)
定义了7个核心数据模型:
- Role:角色模型
- Profile:用户信息模型
- Knowledge:知识点模型(支持自关联树形结构)
- Question:题目模型(JSONField存储选项)
- Record:答题记录模型
- Mastery:掌握度模型(DecimalField精确存储分数)
- Feedback:系统反馈模型
关键设计:
- 使用ForeignKey建立表关联
- on_delete=models.SET_NULL保证数据安全
- related_name方便反向查询
- verbose_name提供中文字段名
4.2.3 views.py(视图层)
主要功能模块:
- 用户认证接口
- CheckUsernameView:检查用户名是否存在
- RegisterView:用户注册(密码加密)
- LoginView:用户登录(密码验证)
- SettingPasswordView:修改密码
- CRUD接口(ViewSet)
- RoleViewSet:角色管理
- ProfileViewSet:用户管理
- KnowledgeViewSet:知识点管理
- QuestionViewSet:题目管理
- RecordViewSet:答题记录管理
- MasteryViewSet:掌握度管理
- FeedbackViewSet:反馈管理
- 搜索接口(GenericAPIView)
- 支持模糊搜索和分页
- 使用Q对象构建复杂查询条件
- 练习题核心接口
- PracticeGenerateView:生成练习题(调用DeepSeek API)
- PracticeSubmitView:提交答案(更新掌握度)
- PracticeRecommendView:推荐知识点(基于掌握度)
- PracticeStudentStatsView:学生统计数据
- PracticeWrongBookView:错题本
- PracticeKnowledgeQuestionsView:知识点题目列表
- PracticeTeacherSummaryView:教师端概览
- PracticeTeacherAnalyticsView:教师端学情分析
分页配置:
class CustomPageNumberPagination(PageNumberPagination):
page_size = 5 默认每页5条
page_size_query_param = 'page_size' 允许客户端指定
max_page_size = 100 最大每页100条
4.2.4 deepseek_client.py(AI客户端)
核心功能:
- API调用函数
def _chat_completion(messages: list, temperature: float = 0.7) -> str
- 使用urllib.request发送HTTP请求
- 支持超时控制(默认90秒)
- 错误处理和日志记录
- JSON提取函数
def extract_json_object(text: str) -> dict
- 从模型返回的文本中提取JSON对象
- 支持Markdown代码块格式
- 正则表达式匹配
- 题目生成函数
def generate_question_json(
knowledge_name: str,
knowledge_description: str,
difficulty: str,
qtype: str
) -> dict
- 构造Prompt模板
- 调用DeepSeek API
- 返回结构化题目数据
- 题目校验函数
def normalize_parsed_question(data: dict, qtype: str) -> tuple
- 验证题目格式
- 选择题必须有4个选项(A/B/C/D)
- 填空题options必须为null
- 答案格式标准化
Prompt设计:
- System角色:定义AI为计算机组成原理助教
- User角色:提供知识点、难度、题型要求
- 要求输出合法JSON格式
- 提供示例格式引导
4.2.5 practice_service.py(业务逻辑层)
核心功能模块:
- 题目生成逻辑
def generate_practice_question(knowledge_id, difficulty, qtype)
生成策略:
- 优先使用DeepSeek API生成(需配置API密钥)
- API失败时根据配置决定是否回退到本地模板
- 未配置API密钥时直接使用本地模板
本地模板机制:
- MC_TEMPLATES:选择题模板库(10个知识点模板)
- FILL_TEMPLATES:填空题模板库(5个知识点模板)
- 根据知识点名称关键词匹配模板
- 支持难度标签(简单/中等/困难)
题目去重:
def _text_similarity(a: str, b: str) -> float
- 使用SequenceMatcher计算文本相似度
- 相似度>0.92视为重复
- 防止生成重复题目
- 答案检查逻辑
def check_answer(question, user_answer)
检查规则:
- 选择题:忽略大小写和空格,比较字母
- 填空题:去除空格后精确匹配
- 使用正则表达式标准化输入
- 掌握度更新(BKT算法)
def update_mastery_bkt(student: Profile, knowledge: Knowledge, is_correct: bool)
贝叶斯知识追踪(BKT)原理:
BKT是一种认知诊断模型,用于追踪学生对知识点的掌握状态。
核心参数:
- P(L):学生已掌握知识点的概率
- P(L0):初始掌握概率(默认0.5)
- G:猜测率(默认0.25,即不会也有25%概率答对)
- S:失误率(默认0.1,即会了也有10%概率答错)
- T:学习率(本系统未显式使用)
更新公式:
当学生答对时:
P(L|correct) = P(L) × (1-S) / [P(L) × (1-S) + (1-P(L)) × G]
当学生答错时:
P(L|wrong) = P(L) × S / [P(L) × S + (1-P(L)) × (1-G)]
实现流程:
- 获取当前掌握度分数(0-100),转换为概率P(L)
- 根据答题结果(正确/错误)应用贝叶斯公式更新P(L)
- 将新概率转换回0-100分数
- 保存到Mastery表
优势:
- 考虑了猜测和失误因素
- 动态调整掌握度
- 比简单的滑动平均更科学
- 推荐算法
def recommend_knowledge(student_id, limit=12)
推荐策略:
| 掌握度分数 | 推荐频次 | 优先级 | 推荐标签 |
|---|---|---|---|
| < 40分 | 高频推荐 | high | 高频巩固 |
| 40-60分 | 中频推荐 | medium | 高频巩固 |
| 60-80分 | 适量推荐 | medium | 适量练习 |
| > 80分 | 低频推荐 | low | 降低推荐 |
推荐流程:
- 获取学生所有知识点的掌握度
- 未练习过的知识点默认50分
- 按掌握度升序排序(薄弱知识点优先)
- 返回前N个知识点
个性化特点:
- 针对每个学生的掌握情况
- 动态调整推荐内容
- 优先补强薄弱环节
- 学生统计分析
def student_practice_stats(student_id)
统计维度:
- 总答题数、正确数、错误数、正确率
- 按知识点统计:掌握度、答题次数、错题率
- 14天答题趋势(每日统计)
- 薄弱知识点数量(掌握度<40)
返回数据结构:
{
"student_id": 学生ID,
"total_records": 总答题数,
"accuracy": 正确率,
"by_knowledge": [知识点掌握度列表],
"trend_daily": [每日答题趋势],
"weak_knowledge_count": 薄弱知识点数,
"mastery_mode": "BKT" 掌握度算法
}
- 教师端学情分析
def teacher_analytics_bundle()
分析维度:
- 全局统计
- 待审核题目数
- 已拒绝题目数
- 题目总数
- AI生成题目数
- 学生总数
- 答题趋势分析
- 14天每日答题统计
- 每日正确数、错误数
- 学生排行
- 按平均掌握度排序
- 显示答题数、正确率
- 识别学习困难学生
- 知识点分析
- 各知识点平均掌握度
- 知识点错题率排行
- 识别难点知识点
应用场景:
- 教师了解整体学情
- 识别教学难点
- 针对性辅导
- 错题本功能
def wrong_book_page(student_id: int, page: int, page_size: int)
功能特点:
- 自动收集学生答错的题目
- 按时间倒序排列(最新错题在前)
- 支持分页查询
- 显示题目内容、类型、关联知识点
数据结构:
{
"count": 错题总数,
"results": [
{
"record_id": 记录ID,
"create_time": 答题时间,
"question_id": 题目ID,
"content": 题目内容,
"type": 题目类型,
"knowledge_name": 知识点名称
}
]
}
五、前端目录结构说明
5.1 整体目录结构
Web/
├── public/ 静态资源
│ ├── favicon.png 网站图标
│ └── menus/ 菜单配置文件
│ ├── admin-menu.json 管理员菜单
│ ├── teacher-menu.json 教师菜单
│ └── student-menu.json 学生菜单
├── src/ 源代码目录
│ ├── assets/ 资源文件
│ │ ├── img/ 图片资源
│ │ ├── iconfont/ 图标字体
│ │ ├── js/ JavaScript工具
│ │ └── style/ 样式文件
│ ├── components/ 公共组件
│ │ ├── auth/ 权限组件
│ │ ├── editor/ 富文本编辑器
│ │ ├── table/ 表格组件
│ │ ├── pagination/ 分页组件
│ │ └── ... 其他组件
│ ├── views/ 页面视图
│ │ ├── front/ 前台页面
│ │ │ ├── login/ 登录页面
│ │ │ ├── register/ 注册页面
│ │ │ └── main/ 学生主页
│ │ ├── back/ 后台管理
│ │ │ ├── admin/ 管理员页面
│ │ │ ├── teacher/ 教师页面
│ │ │ └── student/ 学生后台
│ │ ├── system/ 系统页面
│ │ └── chart/ 图表页面
│ ├── router/ 路由配置
│ ├── store/ 状态管理(Pinia)
│ ├── api.js API接口配置
│ ├── App.vue 根组件
│ └── main.ts 入口文件
├── index.html HTML模板
├── package.json 项目依赖
├── vite.config.ts Vite配置
├── tsconfig.json TypeScript配置
├── .env.development 开发环境变量
├── .env.production 生产环境变量
└── .gitignore Git忽略配置
5.2 核心目录详解
5.2.1 views/front(前台页面)
登录注册模块:
- login/login.vue:用户登录界面
- register/register.vue:用户注册界面
- 支持粒子背景特效(particles.vue3)
- 表单验证(Element Plus)
学生主页模块(main/):
- main.vue:学生主界面(导航、侧边栏)
- main_student_stats/:学习统计页面
- main_wrong_book/:错题本页面
- feedback/:系统反馈页面
5.2.2 views/back(后台管理)
管理员模块(admin/):
- profile/:用户管理
- role/:角色管理
- knowledge/:知识点管理
- question/:题目管理
- record/:答题记录管理
- mastery/:掌握度管理
教师模块(teacher/):
- knowledge/:知识点管理
- question/:题目管理与审核
- record/:学生答题记录查看
- mastery/:学生掌握度管理
- analytics/:学情分析
学生后台模块(student/):
- record/:个人答题记录
- mastery/:个人掌握度查看
5.2.3 components(公共组件)
表格组件(table/):
- 基于Element Plus Table封装
- 支持分页、排序、筛选
- 自动适配响应式布局
编辑器组件(editor/):
- 基于@wangeditor/editor
- 支持富文本编辑
- 用于题目内容编辑
权限组件(auth/):
- auth.vue:单个权限控制
- authAll.vue:多权限控制
- 根据用户角色显示/隐藏功能
分页组件(pagination/):
- 统一的分页样式
- 支持页码跳转
- 每页条数选择
5.3 核心文件详解
5.3.1 api.js(API接口配置)
接口基础配置:
const BASE_URL = import.meta.env.VITE_API_BASE_URL
axios.defaults.baseURL = BASE_URL
主要接口分类:
- 用户认证接口
- POST /api/check_username/:检查用户名
- POST /api/register/:用户注册
- POST /api/login/:用户登录
- POST /api/setting_password/:修改密码
- CRUD接口(以知识点为例)
- GET /api/knowledge/:获取知识点列表
- POST /api/knowledge/:创建知识点
- GET /api/knowledge/{id}/:获取单个知识点
- PUT /api/knowledge/{id}/:更新知识点
- DELETE /api/knowledge/{id}/:删除知识点
- POST /api/knowledge_search/:搜索知识点
- 练习题接口
- POST /api/practice/generate/:生成练习题
- POST /api/practice/submit/:提交答案
- GET /api/practice/recommend/:获取推荐知识点
- GET /api/practice/student_stats/:学生统计
- GET /api/practice/wrong_book/:错题本
- GET /api/practice/knowledge_questions/:知识点题目列表
- GET /api/practice/teacher_summary/:教师概览
- GET /api/practice/teacher_analytics/:教师学情分析
5.3.2 路由配置(router/)
路由结构:
{
path: '/',
redirect: '/login'
},
{
path: '/login',
component: Login
},
{
path: '/register',
component: Register
},
{
path: '/main',
component: Main,
children: [
// 学生端路由
{ path: 'stats', component: StudentStats },
{ path: 'wrong-book', component: WrongBook },
{ path: 'feedback', component: Feedback }
]
},
{
path: '/back',
component: BackLayout,
children: [
// 管理员路由
{ path: 'admin/profile', component: ProfileManage },
{ path: 'admin/knowledge', component: KnowledgeManage },
// 教师路由
{ path: 'teacher/analytics', component: TeacherAnalytics },
{ path: 'teacher/question', component: QuestionReview },
// 学生后台路由
{ path: 'student/record', component: StudentRecord }
]
}
路由守卫:
- 检查用户登录状态
- 根据角色控制页面访问权限
- 未登录重定向到登录页
5.3.3 状态管理(store/)
使用Pinia管理全局状态:
- 用户状态
{
userInfo: {
id: 用户ID,
username: 用户名,
name: 姓名,
role: 角色信息,
avatar: 头像
},
isLogin: 是否登录
}
- 系统配置
{
theme: 主题配置,
language: 语言设置,
menuCollapse: 菜单折叠状态
}
持久化:
- 使用pinia-plugin-persist
- 自动保存到localStorage
- 刷新页面状态不丢失
六、系统界面与功能详解
6.1 登录注册模块
6.1.1 登录界面

界面功能:
- 用户名/密码登录
- 表单验证(必填项、格式校验)
- 记住密码功能
- 粒子背景动画效果
- 响应式布局适配
技术实现:
- Element Plus表单组件
- particles.vue3粒子特效
- Axios发送登录请求
- 登录成功后保存用户信息到Pinia
- 根据角色跳转到对应页面
登录流程:
用户输入账号密码
↓
前端表单验证
↓
发送POST请求到/api/login/
↓
后端验证用户名和密码(check_password)
↓
验证成功:返回用户信息
↓
前端保存用户信息到store
↓
根据角色跳转:
- 学生 → /main
- 教师 → /back/teacher
- 管理员 → /back/admin
6.1.2 注册界面
界面功能:
- 用户名唯一性检查
- 密码强度验证
- 确认密码一致性检查
- 角色选择(学生/教师)
- 实时表单验证
注册流程:
用户填写注册信息
↓
实时检查用户名是否已存在
↓
验证密码强度和一致性
↓
发送POST请求到/api/register/
↓
后端密码加密(make_password)
↓
创建用户记录
↓
注册成功,跳转到登录页
6.2 学生端功能模块
6.2.1 练习题生成界面

界面功能:
-
知识点选择
- 树形结构展示知识点
- 支持搜索和筛选
- 显示知识点难度标签
-
练习参数设置
- 难度选择:简单/中等/困难
- 题型选择:选择题/填空题
- 题目数量设置
-
题目生成
- 点击"生成题目"按钮
- 调用DeepSeek API生成
- 显示生成来源(AI/模板)
- 实时显示生成进度
-
在线答题
- 选择题:单选按钮
- 填空题:文本输入框
- 提交答案按钮
- 实时反馈正确/错误
-
答案解析
- 显示正确答案
- 详细解析说明
- 相关知识点链接
技术实现:
// 生成题目
async generateQuestion() {
const params = {
knowledge_id: this.selectedKnowledge,
difficulty: this.difficulty,
type: this.questionType
}
const res = await axios.post('/api/practice/generate/', params)
this.currentQuestion = res.data.question
this.generationSource = res.data.source
}
// 提交答案
async submitAnswer() {
const params = {
student_id: this.userInfo.id,
question_id: this.currentQuestion.id,
user_answer: this.userAnswer
}
const res = await axios.post('/api/practice/submit/', params)
this.showResult(res.data)
}
生成流程:
学生选择知识点和难度
↓
前端发送生成请求
↓
后端调用practice_service.generate_practice_question()
↓
检查是否配置DeepSeek API密钥
↓
有密钥:调用deepseek_client.generate_question_json()
├─ 构造Prompt
├─ 调用API
├─ 解析JSON
├─ 题目去重检查
└─ 保存到数据库(状态:pending)
↓
无密钥:使用本地模板
├─ 匹配知识点关键词
├─ 选择对应模板
└─ 保存到数据库(状态:approved)
↓
返回题目给前端展示
6.2.2 错题本界面

界面功能:
-
错题列表展示
- 表格形式显示错题
- 显示题目内容、类型、知识点
- 答题时间记录
- 支持分页浏览
-
错题筛选
- 按知识点筛选
- 按题型筛选
- 按时间范围筛选
-
错题重做
- 点击题目可重新作答
- 查看历史答案
- 查看正确答案和解析
-
错题统计
- 错题总数
- 按知识点统计错题数
- 错题率趋势图
数据获取:
async loadWrongBook() {
const params = {
student_id: this.userInfo.id,
page: this.currentPage,
page_size: this.pageSize
}
const res = await axios.get('/api/practice/wrong_book/', { params })
this.wrongQuestions = res.data.results
this.total = res.data.count
}
应用价值:
- 帮助学生针对性复习
- 识别薄弱环节
- 提高学习效率
6.2.3 学习统计界面
在这里插入图片描述
界面功能:
-
总体统计卡片
- 总答题数
- 正确率
- 错题数
- 薄弱知识点数
-
答题趋势图(ECharts折线图)
- 横轴:日期(最近14天)
- 纵轴:答题数量
- 双线:正确数、错误数
- 交互:悬停显示详细数据
-
知识点掌握度表格
- 知识点名称
- 掌握度分数(0-100)
- 答题次数
- 错题率
- 最后更新时间
- 颜色标识:
- 红色:掌握度<40(薄弱)
- 橙色:40-60(一般)
- 绿色:60-80(良好)
- 蓝色:>80(优秀)
-
知识点掌握度雷达图
- 多维度展示各知识点掌握情况
- 直观识别薄弱环节
技术实现:
// ECharts配置
const chartOption = {
title: { text: '答题趋势' },
xAxis: {
type: 'category',
data: this.trendData.map(d => d.date)
},
yAxis: { type: 'value' },
series: [
{
name: '正确数',
type: 'line',
data: this.trendData.map(d => d.correct),
itemStyle: { color: '#67C23A' }
},
{
name: '错误数',
type: 'line',
data: this.trendData.map(d => d.wrong),
itemStyle: { color: '#F56C6C' }
}
]
}
数据来源:
- 调用/api/practice/student_stats/接口
- 后端从Record表和Mastery表聚合数据
- 实时计算统计指标
6.2.4 个人中心界面

界面功能:
-
个人信息展示
- 头像显示
- 用户名、姓名
- 角色、部门
- 联系方式
-
信息修改
- 修改姓名、性别
- 上传头像
- 修改联系方式
- 修改密码
-
学习概览
- 累计答题数
- 平均掌握度
- 学习天数
- 学习排名
头像上传:
- 支持图片裁剪(vue-cropper)
- 自动压缩
- 上传到media/avatars/目录
6.2.5 系统反馈界面

界面功能:
-
反馈提交
- 反馈主题输入
- 反馈内容(富文本编辑器)
- 上传截图/视频
- 提交按钮
-
历史反馈查看
- 反馈列表
- 处理状态(已解决/未解决)
- 反馈时间
- 管理员回复
技术实现:
- 使用@wangeditor/editor富文本编辑器
- 文件上传到media/feedback/目录
- 支持图片预览
6.3 教师端功能模块
6.3.1 知识点管理界面

界面功能:
-
知识点树形展示
- 层级结构显示
- 展开/折叠节点
- 拖拽调整层级
-
知识点操作
- 添加根知识点
- 添加子知识点
- 编辑知识点信息
- 删除知识点(级联删除)
-
知识点信息
- 名称
- 难度等级
- 描述说明
- 关联题目数
- 学生平均掌握度
-
批量操作
- 批量导入(Excel/CSV)
- 批量导出
- 批量设置难度
技术实现:
// 树形数据构建
buildTree(data) {
const map = {}
const tree = []
data.forEach(item => {
map[item.id] = { ...item, children: [] }
})
data.forEach(item => {
if (item.parent_id) {
map[item.parent_id].children.push(map[item.id])
} else {
tree.push(map[item.id])
}
})
return tree
}
6.3.2 题目管理与审核界面

界面功能:
-
题目列表
- 表格展示所有题目
- 显示题目内容、类型、难度
- 显示生成来源(AI/模板/手动)
- 显示审核状态
-
题目筛选
- 按知识点筛选
- 按题型筛选
- 按难度筛选
- 按审核状态筛选
- 按生成来源筛选
-
题目审核(针对AI生成题目)
- 查看题目详情
- 在线编辑题目
- 审核操作:
- 通过(approved)
- 拒绝(rejected)
- 修改后通过
- 审核意见填写
-
题目编辑
- 修改题干
- 修改选项
- 修改答案
- 修改解析
- 调整难度
- 更换知识点
-
手动添加题目
- 选择题型
- 填写题目信息
- 设置难度
- 关联知识点
审核流程:
AI生成题目(状态:pending)
↓
教师查看待审核列表
↓
点击题目查看详情
↓
评估题目质量
↓
选择操作:
├─ 通过 → 状态改为approved,学生可见
├─ 修改 → 编辑后状态改为approved
└─ 拒绝 → 状态改为rejected,不可见
↓
保存审核结果

审核界面特点:
- 左侧:待审核题目列表
- 右侧:题目详情和编辑区
- 底部:审核按钮(通过/拒绝/修改)
- 显示题目来源和生成时间
6.3.3 学情分析界面

界面功能:
-
全局统计卡片
- 学生总数
- 题目总数
- 总答题数
- 平均正确率
- 待审核题目数
-
答题趋势图(折线图)
- 最近14天答题趋势
- 每日答题总数
- 每日正确数/错误数
- 趋势分析
-
学生排行榜
- 按平均掌握度排序
- 显示学生姓名、答题数、正确率
- 识别学习困难学生(掌握度<40)
- 支持导出Excel
-
知识点难度分析
- 各知识点平均掌握度
- 知识点错题率排行
- 柱状图展示
- 识别教学难点
-
知识点掌握度热力图
- 横轴:学生
- 纵轴:知识点
- 颜色深浅:掌握度高低
- 快速识别薄弱环节
技术实现:
// 获取学情分析数据
async loadAnalytics() {
const res = await axios.get('/api/practice/teacher_analytics/')
this.globalStats = {
studentCount: res.data.student_count,
questionTotal: res.data.question_total,
recordsTotal: res.data.records_total,
accuracy: res.data.records_accuracy
}
this.trendData = res.data.trend_daily
this.studentRanking = res.data.students
this.knowledgeAnalysis = res.data.knowledge_avg_mastery
this.renderCharts()
}
// 渲染图表
renderCharts() {
// 趋势图
this.trendChart = echarts.init(this.$refs.trendChart)
this.trendChart.setOption({
xAxis: { data: this.trendData.map(d => d.date) },
series: [{
name: '答题数',
type: 'line',
data: this.trendData.map(d => d.total)
}]
})
// 知识点难度柱状图
this.knowledgeChart = echarts.init(this.$refs.knowledgeChart)
this.knowledgeChart.setOption({
xAxis: {
type: 'category',
data: this.knowledgeAnalysis.map(k => k.knowledge_name)
},
yAxis: { type: 'value' },
series: [{
type: 'bar',
data: this.knowledgeAnalysis.map(k => k.avg_mastery)
}]
})
}
应用价值:
- 全面了解班级学情
- 识别教学难点和重点
- 针对性调整教学策略
- 及时发现学习困难学生
6.3.4 学生掌握度管理界面

界面功能:
-
学生列表
- 显示所有学生
- 平均掌握度
- 答题总数
- 正确率
-
掌握度详情
- 点击学生查看详细掌握度
- 按知识点展示
- 掌握度分数
- 答题次数
- 错题率
-
掌握度调整
- 手动调整学生掌握度
- 重置掌握度
- 批量调整
-
数据导出
- 导出学生掌握度报告
- Excel格式
- 包含详细统计
6.3.5 学生答题记录管理界面

界面功能:
-
记录列表
- 显示所有答题记录
- 学生姓名
- 题目内容
- 是否正确
- 答题时间
-
记录筛选
- 按学生筛选
- 按知识点筛选
- 按正确性筛选
- 按时间范围筛选
-
记录详情
- 查看题目完整内容
- 学生答案
- 正确答案
- 答题用时
-
数据分析
- 统计图表
- 导出报表
6.4 管理员端功能模块
6.4.1 用户管理界面

界面功能:
-
用户列表
- 表格展示所有用户
- 用户名、姓名、角色
- 联系方式
- 注册时间
-
用户操作
- 添加用户
- 编辑用户信息
- 删除用户
- 重置密码
- 分配角色
-
用户筛选
- 按角色筛选
- 按部门筛选
- 搜索用户
-
批量操作
- 批量导入用户
- 批量分配角色
- 批量删除
6.4.2 知识点管理界面

界面功能:
- 与教师端知识点管理类似
- 额外权限:删除任意知识点
- 批量操作权限
- 系统级知识点配置
6.4.3 题目管理界面

界面功能:
- 查看所有题目(包括所有状态)
- 强制通过/拒绝题目
- 批量删除题目
- 题目质量统计
- 导入导出题库
6.4.4 学生掌握度管理界面

界面功能:
- 查看所有学生掌握度
- 系统级掌握度调整
- 掌握度算法参数配置
- 批量重置掌握度
6.4.5 学生答题记录管理界面

界面功能:
- 查看所有答题记录
- 数据清理功能
- 异常记录处理
- 数据统计分析
6.4.6 知识点推荐界面

界面功能:
-
推荐算法配置
- 设置推荐阈值
- 调整推荐权重
- 配置推荐策略
-
推荐效果分析
- 推荐准确率统计
- 学生接受度分析
- 推荐效果评估
-
推荐规则管理
- 添加自定义推荐规则
- 编辑推荐规则
- 启用/禁用规则
6.4.7 反馈管理界面

界面功能:
-
反馈列表
- 显示所有用户反馈
- 反馈状态(已解决/未解决)
- 反馈时间
- 用户信息
-
反馈处理
- 查看反馈详情
- 回复反馈
- 标记为已解决
- 删除反馈
-
反馈统计
- 反馈数量统计
- 反馈类型分布
- 处理效率分析
七、核心技术原理详解
7.1 贝叶斯知识追踪(BKT)算法
7.1.1 算法背景
贝叶斯知识追踪(Bayesian Knowledge Tracing, BKT)是一种认知诊断模型,由Corbett和Anderson于1995年提出,广泛应用于智能教学系统中。
7.1.2 核心思想
BKT将学生对某个知识点的掌握状态建模为一个隐藏的二值变量:
- L = 1:学生已掌握该知识点
- L = 0:学生未掌握该知识点
通过观察学生的答题表现(正确/错误),使用贝叶斯定理动态更新掌握概率P(L)。
7.1.3 模型参数
| 参数 | 符号 | 含义 | 本系统默认值 |
|---|---|---|---|
| 初始掌握概率 | P(L₀) | 学生初始已掌握的概率 | 0.5 |
| 猜测率 | G | 未掌握但答对的概率 | 0.25 |
| 失误率 | S | 已掌握但答错的概率 | 0.1 |
| 学习率 | T | 从未掌握到掌握的转移概率 | 未显式使用 |
7.1.4 更新公式
当学生答对时:
P(L|correct) = P(L) × (1-S) / [P(L) × (1-S) + (1-P(L)) × G]
推导过程:
- P(correct|L=1) = 1-S(掌握了但可能失误)
- P(correct|L=0) = G(未掌握但可能猜对)
- 应用贝叶斯定理:
P(L|correct) = P(correct|L) × P(L) / P(correct)
当学生答错时:
P(L|wrong) = P(L) × S / [P(L) × S + (1-P(L)) × (1-G)]
推导过程:
- P(wrong|L=1) = S(掌握了但失误)
- P(wrong|L=0) = 1-G(未掌握且没猜对)
- 应用贝叶斯定理
7.1.5 代码实现
def update_mastery_bkt(student: Profile, knowledge: Knowledge, is_correct: bool):
G = 0.25 猜测率
S = 0.1 失误率
获取当前掌握概率
mastery = Mastery.objects.get_or_create(
student_id=student,
knowledge_id=knowledge,
defaults={"mastery_score": Decimal("50.00")}
)[0]
p = float(mastery.mastery_score) / 100.0 转换为概率
p = max(0.01, min(0.99, p)) 避免极端值
贝叶斯更新
if is_correct:
num = p * (1.0 - S)
den = num + (1.0 - p) * G
else:
num = p * S
den = num + (1.0 - p) * (1.0 - G)
p_new = (num / den) if den > 0 else p
转换回0-100分数
score = Decimal(str(round(p_new * 100, 2)))
mastery.mastery_score = max(Decimal("0"), min(Decimal("100"), score))
mastery.save()
7.1.6 算法优势
-
考虑猜测和失误
- 不是简单的对错统计
- 更符合真实学习情况
-
动态调整
- 每次答题都更新掌握度
- 反映学习进度
-
概率建模
- 提供不确定性量化
- 支持个性化推荐
-
理论基础扎实
- 基于贝叶斯定理
- 广泛应用于教育领域
7.2 大模型题目生成技术
7.2.1 DeepSeek API集成
API特点:
- 兼容OpenAI接口规范
- 支持结构化JSON输出
- 中文理解能力强
- 适合教育领域应用
调用流程:
构造Prompt → 发送HTTP请求 → 解析响应 → 提取JSON → 验证格式 → 保存题目
7.2.2 Prompt工程
System Prompt设计:
你是高校「计算机组成原理」课程助教,只输出合法JSON,
不要输出任何JSON以外的说明文字。
JSON必须可被Python json.loads解析,字符串使用双引号。
User Prompt结构:
请生成一道「计算机组成原理」练习题。
知识点名称:{knowledge_name}
知识点说明:{knowledge_description}
难度:{difficulty}
题型必须是:{qtype}
要求:
1. 题目严谨,符合国内教材常见表述
2. 选择题必须恰好4个选项,键名为A/B/C/D
3. 填空题用下划线______标出空白
4. 字段type必须为「选择题」或「填空题」之一
5. options:选择题为长度4的数组;填空题必须为null
6. answer:选择题为单个字母A/B/C/D;填空题为答案文本
选择题示例:
{"type":"选择题","content":"题干","options":[["A","..."],["B","..."],["C","..."],["D","..."]],"answer":"A","explanation":"简短解析"}
填空题示例:
{"type":"填空题","content":"题干含______占位","options":null,"answer":"标准答案","explanation":"简短解析"}
Prompt设计原则:
- 明确角色定位:定义AI为课程助教
- 严格格式要求:要求输出合法JSON
- 提供示例:给出标准格式示例
- 约束条件:明确题型、选项数量等要求
- 领域知识:强调符合教材表述
7.2.3 题目质量控制
1. 格式验证
def normalize_parsed_question(data: dict, qtype: str):
验证必填字段
if not data.get("content"):
raise ValueError("题干content为空")
if not data.get("answer"):
raise ValueError("答案answer为空")
选择题验证
if qtype == "选择题":
opts = data.get("options")
if not isinstance(opts, list) or len(opts) != 4:
raise ValueError("选择题必须有4个选项")
验证答案为A/B/C/D
ans = str(data.get("answer")).strip().upper()
if ans not in ("A", "B", "C", "D"):
raise ValueError("选择题答案必须是A/B/C/D")
填空题验证
if qtype == "填空题":
if data.get("options") not in (None, [], ""):
raise ValueError("填空题options应为null")
2. 去重检查
def _text_similarity(a: str, b: str) -> float:
去除空格
x = re.sub(r"\s+", "", (a or "")[:900])
y = re.sub(r"\s+", "", (b or "")[:900])
计算相似度
return SequenceMatcher(None, x, y).ratio()
检查与已有题目的相似度
for q in Question.objects.filter(knowledge_id=k).order_by("-id")[:80]:
if _text_similarity(content, q.content) > 0.92:
raise RuntimeError("生成题目与题库已有题目重复度过高")
3. 人工审核机制
- AI生成题目初始状态为pending
- 教师审核后才能改为approved
- 学生只能看到approved状态的题目
- 支持教师修改题目内容
7.2.4 本地模板兜底
设计目的:
- 未配置API密钥时仍可使用
- API调用失败时的备选方案
- 保证系统基本可用性
模板结构:
MC_TEMPLATES = [
(
["关键词1", "关键词2"], 知识点匹配关键词
[
(题干, 选项列表, 答案, 解析),
可以有多个题目
]
),
更多知识点模板
]
匹配逻辑:
- 根据知识点名称匹配关键词
- 找到对应模板组
- 随机选择一道题目
- 根据难度添加标签
7.3 个性化推荐算法
7.3.1 推荐策略
基于掌握度的推荐:
| 掌握度区间 | 推荐策略 | 推荐频次 | 目标 |
|---|---|---|---|
| 0-40分 | 高频推荐 | 每次必推 | 快速提升薄弱环节 |
| 40-60分 | 中频推荐 | 优先推荐 | 巩固基础知识 |
| 60-80分 | 适量推荐 | 适度推荐 | 保持熟练度 |
| 80-100分 | 低频推荐 | 偶尔推荐 | 防止遗忘 |
推荐排序:
def recommend_knowledge(student_id, limit=12):
获取所有知识点掌握度
scores = {m.knowledge_id_id: m.mastery_score
for m in Mastery.objects.filter(student_id=student)}
rows = []
for kn in Knowledge.objects.all():
sc = scores.get(kn.id, Decimal("50.00")) 未练习默认50分
rows.append({
"knowledge": kn,
"mastery_score": float(sc),
"priority": "high" if sc < 40 else ("medium" if sc < 70 else "low")
})
按掌握度升序排序(薄弱优先)
rows.sort(key=lambda x: x["mastery_score"])
return rows[:limit]
7.3.2 推荐算法优化方向
当前实现:
- 基于单一维度(掌握度)
- 简单排序推荐
可优化方向:
-
多因素融合
- 掌握度
- 最近练习时间
- 错题率
- 知识点重要性
-
协同过滤
- 相似学生的学习路径
- 知识点关联推荐
-
强化学习
- 根据推荐效果动态调整
- 个性化推荐策略
7.4 前后端分离架构
7.4.1 架构优势
-
开发效率
- 前后端并行开发
- 职责分离清晰
- 便于团队协作
-
可维护性
- 代码解耦
- 独立部署
- 易于升级
-
用户体验
- 单页应用(SPA)
- 无刷新交互
- 响应速度快
-
可扩展性
- 前端可替换(Web/移动端)
- 后端API可复用
- 支持微服务架构
7.4.2 通信机制
RESTful API设计:
| 方法 | 路径 | 功能 | 请求体 | 响应 |
|---|---|---|---|---|
| GET | /api/knowledge/ | 获取知识点列表 | - | 知识点数组 |
| POST | /api/knowledge/ | 创建知识点 | 知识点信息 | 创建的知识点 |
| GET | /api/knowledge/{id}/ | 获取单个知识点 | - | 知识点详情 |
| PUT | /api/knowledge/{id}/ | 更新知识点 | 知识点信息 | 更新后的知识点 |
| DELETE | /api/knowledge/{id}/ | 删除知识点 | - | 成功/失败 |
请求响应格式:
请求示例:
POST /api/practice/generate/
{
"knowledge_id": 5,
"difficulty": "中等",
"type": "选择题"
}
响应示例:
{
"message": "ok",
"source": "deepseek",
"question": {
"id": 123,
"type": "选择题",
"content": "题目内容",
"options": [["A","选项A"],["B","选项B"],["C","选项C"],["D","选项D"]],
"answer": "A",
"explanation": "解析内容",
"difficulty": "中等"
},
"note": "题目由DeepSeek API实时生成。"
}
7.4.3 跨域处理
CORS配置(后端settings.py):
INSTALLED_APPS = [
'corsheaders',
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
]
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
Axios配置(前端api.js):
axios.defaults.baseURL = 'http://localhost:8000'
axios.defaults.withCredentials = true
7.5 数据可视化技术
7.5.1 ECharts图表库
使用的图表类型:
- 折线图(答题趋势)
{
type: 'line',
data: [10, 15, 13, 17, 20, 18, 22],
smooth: true, // 平滑曲线
areaStyle: {} // 区域填充
}
- 柱状图(知识点掌握度)
{
type: 'bar',
data: [65, 78, 45, 89, 72],
itemStyle: {
color: function(params) {
// 根据数值设置颜色
const value = params.value
if (value < 40) return '#F56C6C'
if (value < 60) return '#E6A23C'
if (value < 80) return '#67C23A'
return '#409EFF'
}
}
}
- 雷达图(多维度掌握度)
{
type: 'radar',
data: [{
value: [65, 78, 45, 89, 72, 68],
name: '学生掌握度'
}],
radar: {
indicator: [
{ name: '冯诺依曼', max: 100 },
{ name: 'Cache', max: 100 },
{ name: '指令系统', max: 100 },
{ name: '流水线', max: 100 },
{ name: '总线', max: 100 },
{ name: '存储层次', max: 100 }
]
}
}
- 饼图(题型分布)
{
type: 'pie',
data: [
{ value: 335, name: '选择题' },
{ value: 234, name: '填空题' }
],
radius: ['40%', '70%'] // 环形图
}
7.5.2 响应式图表
自适应容器大小:
mounted() {
this.chart = echarts.init(this.$refs.chartContainer)
this.chart.setOption(this.chartOption)
// 监听窗口大小变化
window.addEventListener('resize', this.handleResize)
}
methods: {
handleResize() {
this.chart.resize()
}
}
beforeUnmount() {
window.removeEventListener('resize', this.handleResize)
this.chart.dispose()
}
八、系统部署与运行
8.1 环境要求
后端环境:
- Python 3.8+
- Django 5.0.7
- SQLite(内置)
前端环境:
- Node.js 16.0+
- npm 7.0+
8.2 后端部署步骤
1. 安装依赖
cd Backend
pip install -r requirements.txt
主要依赖:
- Django==5.0.7
- djangorestframework
- django-cors-headers
- drf-yasg
- Pillow(图片处理)
2. 配置环境变量
创建.env文件:
DeepSeek API配置
DEEPSEEK_API_KEY=your_api_key_here
DEEPSEEK_API_BASE=https://api.deepseek.com/v1
DEEPSEEK_MODEL=deepseek-chat
DEEPSEEK_TIMEOUT=90
BKT算法参数
USE_BKT_MASTERY=true
BKT_GUESS=0.25
BKT_SLIP=0.1
BKT_P0=0.5
模板兜底
DEEPSEEK_ALLOW_TEMPLATE_FALLBACK=false
3. 数据库迁移
python manage.py makemigrations
python manage.py migrate
4. 创建超级用户
python manage.py createsuperuser
5. 启动服务
python manage.py runserver 0.0.0.0:8000
8.3 前端部署步骤
1. 安装依赖
cd Web
npm install
2. 配置环境变量
.env.development(开发环境):
VITE_API_BASE_URL=http://localhost:8000
.env.production(生产环境):
VITE_API_BASE_URL=http://your-server-ip:8000
3. 启动开发服务器
npm run dev
访问:http://localhost:5173
4. 生产环境打包
npm run build
生成的文件在dist/目录,可部署到Nginx等Web服务器。
8.4 一键启动脚本
Windows批处理脚本(run.bat):
@echo off
echo 正在启动后端服务...
start cmd /k "cd Backend && python manage.py runserver 0.0.0.0:8000"
timeout /t 3
echo 正在启动前端服务...
start cmd /k "cd Web && npm run dev"
echo 系统启动完成!
echo 后端地址:http://localhost:8000
echo 前端地址:http://localhost:5173
pause
8.5 生产环境部署建议
1. 数据库升级
- 从SQLite迁移到MySQL/PostgreSQL
- 提高并发性能
- 支持更大数据量
2. Web服务器
- 使用Nginx作为反向代理
- 配置HTTPS证书
- 启用Gzip压缩
3. 应用服务器
- 使用Gunicorn/uWSGI运行Django
- 配置多进程/多线程
- 设置进程管理(Supervisor)
4. 静态文件
- 使用CDN加速
- 配置缓存策略
- 压缩静态资源
5. 安全加固
- 关闭DEBUG模式
- 配置ALLOWED_HOSTS
- 启用CSRF保护
- 使用环境变量管理密钥
九、系统特点与创新点
9.1 技术创新
9.1.1 大模型驱动的智能出题
- 传统方式:依赖固定题库,题目有限,容易重复
- 本系统:利用DeepSeek大模型实时生成题目,题目多样化,理论上无限
优势:
- 题目新颖,避免学生背题
- 可根据知识点和难度定制
- 降低题库维护成本
9.1.2 贝叶斯知识追踪(BKT)
- 传统方式:简单统计正确率,不考虑猜测和失误
- 本系统:使用BKT算法,科学建模学习过程
优势:
- 更准确反映真实掌握情况
- 考虑猜测和失误因素
- 动态调整掌握度
9.1.3 个性化推荐
- 传统方式:统一推荐,不考虑个体差异
- 本系统:基于掌握度的个性化推荐
优势:
- 针对薄弱环节
- 提高学习效率
- 因材施教
9.2 功能特色
9.2.1 多角色支持
- 学生端:练习、统计、错题本
- 教师端:题目审核、学情分析
- 管理员端:系统管理、数据分析
9.2.2 完整的学习闭环
知识点管理 → 题目生成 → 学生练习 → 答题记录
↑ ↓
推荐算法 ← 掌握度更新 ← 答案评估 ← 提交答案
9.2.3 数据可视化
- 答题趋势图
- 掌握度雷达图
- 知识点分析图
- 学生排行榜
9.2.4 题目质量控制
- AI生成题目需人工审核
- 题目去重检查
- 格式严格验证
- 支持教师修改
9.3 系统优势
9.3.1 轻量化实现
- 使用SQLite数据库
- 无需复杂部署
- 适合教学演示
- 易于二次开发
9.3.2 前后端分离
- 开发效率高
- 易于维护
- 支持多端访问
- API可复用
9.3.3 可扩展性强
- 模块化设计
- 接口标准化
- 支持功能扩展
- 易于集成其他系统
9.3.4 用户体验好
- 界面美观(Element Plus)
- 交互流畅(Vue3)
- 响应式布局
- 操作简便
9.4 应用价值
9.4.1 对学生
- 个性化学习路径
- 及时反馈和指导
- 薄弱环节针对性练习
- 学习进度可视化
9.4.2 对教师
- 减轻出题负担
- 全面了解学情
- 识别教学难点
- 数据驱动教学
9.4.3 对教学
- 提高教学效率
- 实现因材施教
- 促进教学改革
- 积累教学数据
十、系统流程图
10.1 用户注册登录流程
开始
↓
选择注册/登录
↓
┌─────────┬─────────┐
│ 注册 │ 登录 │
└─────────┴─────────┘
↓ ↓
填写信息 输入账号密码
↓ ↓
检查用户名 验证账号密码
↓ ↓
密码加密 验证成功?
↓ ↓
保存数据 保存用户信息到store
↓ ↓
注册成功 根据角色跳转页面
↓ ↓
跳转登录 进入系统
↓ ↓
结束 结束
10.2 题目生成流程
学生选择知识点和难度
↓
发送生成请求
↓
后端接收请求
↓
检查API密钥配置
↓
┌────┴────┐
↓ ↓
有密钥 无密钥
↓ ↓
调用DeepSeek 使用本地模板
↓ ↓
构造Prompt 匹配关键词
↓ ↓
发送API请求 选择模板
↓ ↓
解析JSON响应 构造题目
↓ ↓
格式验证 格式验证
↓ ↓
题目去重 题目去重
↓ ↓
状态:pending 状态:approved
└────┬────┘
↓
保存到数据库
↓
返回题目给前端
↓
展示题目
↓
学生答题
↓
提交答案
↓
结束
10.3 掌握度更新流程(BKT)
学生提交答案
↓
后端接收答案
↓
检查答案正确性
↓
记录到Record表
↓
获取当前掌握度P(L)
↓
┌────┴────┐
↓ ↓
答对 答错
↓ ↓
应用公式: 应用公式:
P(L|正确) P(L|错误)
↓ ↓
P×(1-S) P×S
───────── ─────────
P×(1-S)+ P×S+
(1-P)×G (1-P)×(1-G)
└────┬────┘
↓
计算新掌握度
↓
转换为0-100分数
↓
保存到Mastery表
↓
返回结果给前端
↓
结束
10.4 个性化推荐流程
学生请求推荐
↓
后端接收请求
↓
获取学生所有知识点掌握度
↓
┌────┴────┐
↓ ↓
已练习 未练习
↓ ↓
使用实际 默认50分
掌握度
└────┬────┘
↓
构建推荐列表
↓
按掌握度升序排序
(薄弱知识点优先)
↓
设置推荐优先级
┌────┴────┐
↓ ↓ ↓
<40 40-70 >70
high medium low
└────┬────┘
↓
返回前N个知识点
↓
前端展示推荐列表
↓
学生选择练习
↓
结束
10.5 教师审核流程
AI生成题目(状态:pending)
↓
保存到数据库
↓
教师查看待审核列表
↓
点击题目详情
↓
评估题目质量
↓
┌──────┴──────┐
↓ ↓ ↓
通过 修改 拒绝
↓ ↓ ↓
状态: 编辑 状态:
approved 内容 rejected
↓ ↓ ↓
学生 保存 学生
可见 修改 不可见
↓ ↓ ↓
└──────┴──────┘
↓
更新数据库
↓
结束
十一、数据库表关系详解
11.1 核心表关系
用户-角色关系:
- 一个角色可以有多个用户(一对多)
- 通过Profile.role外键关联
用户-答题记录关系:
- 一个学生有多条答题记录(一对多)
- 通过Record.student_id外键关联
用户-掌握度关系:
- 一个学生对多个知识点有掌握度(一对多)
- 通过Mastery.student_id外键关联
知识点-题目关系:
- 一个知识点对应多道题目(一对多)
- 通过Question.knowledge_id外键关联
知识点-掌握度关系:
- 一个知识点对应多个学生的掌握度(一对多)
- 通过Mastery.knowledge_id外键关联
题目-答题记录关系:
- 一道题目可被多次作答(一对多)
- 通过Record.question_id外键关联
11.2 数据完整性保证
外键约束:
on_delete=models.SET_NULL
当关联对象删除时,外键设为NULL而不是级联删除
role = models.ForeignKey(Role, on_delete=models.SET_NULL, null=True)
优势:
- 保护历史数据
- 避免误删除
- 便于数据恢复
11.3 索引优化
常用查询字段建议添加索引:
class Meta:
indexes = [
models.Index(fields=['student_id', 'knowledge_id']), Mastery表
models.Index(fields=['student_id', 'create_time']), Record表
models.Index(fields=['knowledge_id', 'review_status']), Question表
]
十二、系统性能优化
12.1 数据库优化
1. 查询优化
使用select_related减少查询次数
records = Record.objects.select_related(
'student_id',
'question_id',
'question_id__knowledge_id'
).all()
使用prefetch_related优化多对多查询
students = Profile.objects.prefetch_related('student_id_records').all()
2. 分页查询
避免一次性加载大量数据
class CustomPageNumberPagination(PageNumberPagination):
page_size = 10
max_page_size = 100
3. 数据库连接池
生产环境配置
DATABASES = {
'default': {
'CONN_MAX_AGE': 600, 连接持久化
}
}
12.2 前端优化
1. 组件懒加载
const StudentStats = () => import('./views/front/main/main_student_stats')
const WrongBook = () => import('./views/front/main/main_wrong_book')
2. 图片懒加载
<img v-lazy="imageUrl" />
3. 防抖节流
// 搜索输入防抖
const searchDebounced = debounce(this.search, 500)
4. 虚拟滚动
<!-- 大列表优化 -->
<virtual-list :data="longList" :item-height="50" />
12.3 API优化
1. 响应压缩
MIDDLEWARE = [
'django.middleware.gzip.GZipMiddleware',
]
2. 缓存策略
from django.views.decorators.cache import cache_page
@cache_page(60 * 15) 缓存15分钟
def knowledge_list(request):
pass
3. 批量操作
批量创建
Question.objects.bulk_create([q1, q2, q3])
批量更新
Question.objects.filter(id__in=ids).update(review_status='approved')
十三、系统安全性
13.1 认证与授权
密码加密:
from django.contrib.auth.hashers import make_password, check_password
注册时加密
password = make_password(raw_password)
登录时验证
if check_password(raw_password, hashed_password):
验证通过
权限控制:
基于角色的访问控制
if user.role.role_name == 'teacher':
教师权限
elif user.role.role_name == 'student':
学生权限
13.2 数据验证
前端验证:
rules: {
username: [
{ required: true, message: '请输入用户名' },
{ min: 3, max: 20, message: '长度在3到20个字符' }
],
password: [
{ required: true, message: '请输入密码' },
{ min: 6, message: '密码至少6位' }
]
}
后端验证:
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = '__all__'
def validate_username(self, value):
if len(value) < 3:
raise serializers.ValidationError("用户名至少3个字符")
return value
13.3 SQL注入防护
使用ORM:
安全:使用ORM参数化查询
Profile.objects.filter(username=username)
危险:直接拼接SQL(避免)
cursor.execute(f"SELECT * FROM Profile WHERE username='{username}'")
13.4 XSS防护
前端转义:
<!-- 自动转义 -->
<div>{{ userInput }}</div>
<!-- 不转义(危险,仅信任内容) -->
<div v-html="trustedContent"></div>
后端CSP配置:
CSP_DEFAULT_SRC = ("'self'",)
CSP_SCRIPT_SRC = ("'self'", "'unsafe-inline'")
十四、系统测试
14.1 单元测试
后端测试(tests.py):
from django.test import TestCase
from .models import Knowledge, Question
from .practice_service import generate_practice_question
class PracticeServiceTest(TestCase):
def setUp(self):
self.knowledge = Knowledge.objects.create(
name="测试知识点",
difficulty="中等"
)
def test_generate_question(self):
question = generate_practice_question(
self.knowledge.id,
"中等",
"选择题"
)
self.assertIsNotNone(question)
self.assertEqual(question.type, "选择题")
运行测试:
python manage.py test
14.2 接口测试
使用Postman测试API:
- 导入API文档(drf-yasg生成)
- 测试各个接口
- 验证响应格式
- 检查错误处理
14.3 前端测试
组件测试:
import { mount } from '@vue/test-utils'
import LoginForm from '@/components/LoginForm.vue'
describe('LoginForm', () => {
it('validates username', () => {
const wrapper = mount(LoginForm)
// 测试逻辑
})
})
十五、系统总结
15.1 项目完成情况
本系统成功实现了基于大模型的个性化练习题即时生成与推荐功能,完成了以下核心目标:
15.1.1 功能完成度
✅ 知识点管理
- 树形层级结构
- 难度标签管理
- 增删改查操作
- 批量导入导出
✅ 智能出题
- DeepSeek API集成
- 选择题和填空题生成
- 题目质量控制
- 本地模板兜底
✅ 学生模型
- BKT算法实现
- 答题记录追踪
- 掌握度动态更新
- 学习趋势分析
✅ 个性化推荐
- 基于掌握度推荐
- 薄弱知识点优先
- 推荐策略分级
✅ 多角色支持
- 学生端功能完整
- 教师端学情分析
- 管理员系统管理
✅ 数据可视化
- ECharts图表展示
- 多维度统计分析
- 交互式数据探索
15.1.2 技术实现
后端技术:
- Django 5.0.7框架
- Django REST Framework
- SQLite数据库
- DeepSeek API集成
- BKT算法实现
前端技术:
- Vue 3 + Composition API
- Element Plus UI组件
- ECharts数据可视化
- Axios HTTP客户端
- Pinia状态管理
架构设计:
- 前后端分离
- RESTful API
- 模块化设计
- 可扩展架构
15.2 系统亮点
15.2.1 创新性
-
大模型驱动出题
- 突破传统题库限制
- 题目多样化、个性化
- 降低维护成本
-
科学的掌握度模型
- 采用BKT算法
- 考虑猜测和失误
- 动态追踪学习进度
-
个性化推荐
- 针对薄弱环节
- 因材施教
- 提高学习效率
15.2.2 实用性
-
完整的学习闭环
- 从知识点到题目生成
- 从答题到掌握度更新
- 从分析到推荐
-
多角色协同
- 学生自主学习
- 教师监控指导
- 管理员系统管理
-
数据驱动决策
- 可视化学情分析
- 识别教学难点
- 优化教学策略
15.2.3 可扩展性
-
模块化设计
- 功能模块独立
- 易于维护升级
- 支持功能扩展
-
标准化接口
- RESTful API
- 前后端解耦
- 支持多端访问
-
灵活配置
- 环境变量管理
- 算法参数可调
- 支持多种部署方式
15.3 应用场景
15.3.1 高校教学
- 计算机组成原理课程辅助教学
- 课后练习自动生成
- 学生学习情况监控
- 教学效果评估
15.3.2 在线教育
- 自适应学习平台
- 个性化学习路径
- 智能题库系统
- 学习数据分析
15.3.3 企业培训
- 员工技能培训
- 知识掌握度评估
- 培训效果追踪
- 个性化培训方案
15.4 项目价值
15.4.1 教育价值
- 提高学习效率
- 实现因材施教
- 促进教学改革
- 积累教学数据
15.4.2 技术价值
- 大模型教育应用探索
- 认知诊断算法实践
- 前后端分离架构示范
- 数据可视化技术应用
15.4.3 研究价值
- 智能教育系统研究
- 学习分析技术研究
- 个性化推荐算法研究
- 教育数据挖掘研究
十六、未来展望
16.1 功能扩展
16.1.1 题型扩展
- 判断题
- 简答题
- 编程题
- 综合应用题
16.1.2 学习路径规划
- 基于知识图谱的学习路径
- 前置知识点推荐
- 学习进度预测
- 学习时间估算
16.1.3 协作学习
- 学生讨论区
- 题目评论功能
- 学习小组
- 同伴互助
16.1.4 游戏化学习
- 积分系统
- 成就徽章
- 排行榜
- 学习挑战
16.2 技术优化
16.2.1 算法优化
推荐算法:
- 引入协同过滤
- 深度学习推荐模型
- 强化学习优化推荐策略
- 多目标优化
掌握度模型:
- 深度知识追踪(DKT)
- 动态学生模型
- 多维度能力评估
- 遗忘曲线建模
16.2.2 性能优化
- 数据库升级到MySQL/PostgreSQL
- 引入Redis缓存
- 异步任务队列(Celery)
- 负载均衡
16.2.3 AI能力增强
- 多模型支持(GPT-4、Claude等)
- 题目难度自动评估
- 答案自动评分(简答题)
- 学习建议生成
16.3 平台扩展
16.3.1 移动端
- 开发移动App(React Native/Flutter)
- 微信小程序
- 支持离线学习
- 推送通知
16.3.2 多学科支持
- 扩展到其他计算机课程
- 支持理工科课程
- 通用题库框架
- 学科知识图谱
16.3.3 开放平台
- 提供API接口
- 支持第三方集成
- 插件系统
- 数据导出接口
16.4 数据分析
16.4.1 学习分析
- 学习行为分析
- 学习模式识别
- 学习效果预测
- 个性化干预
16.4.2 教学分析
- 教学效果评估
- 课程难度分析
- 知识点关联分析
- 教学资源优化
16.4.3 系统分析
- 用户行为分析
- 系统性能监控
- 异常检测
- 智能运维
十七、参考文献与资源
17.1 理论基础
-
Corbett, A. T., & Anderson, J. R. (1995). Knowledge tracing: Modeling the acquisition of procedural knowledge. User modeling and user-adapted interaction, 4(4), 253-278.
-
Piech, C., et al. (2015). Deep knowledge tracing. Advances in neural information processing systems, 28.
-
教育数据挖掘与学习分析相关研究
17.2 技术文档
- Django官方文档:https://docs.djangoproject.com/
- Vue.js官方文档:https://vuejs.org/
- Element Plus文档:https://element-plus.org/
- ECharts文档:https://echarts.apache.org/
- DeepSeek API文档:https://platform.deepseek.com/
17.3 开源项目
- Django REST Framework:https://www.django-rest-framework.org/
- Vue Router:https://router.vuejs.org/
- Pinia:https://pinia.vuejs.org/
- Axios:https://axios-http.com/
十八、附录
18.1 常见问题(FAQ)
Q1:如何配置DeepSeek API密钥?
A:在Backend目录创建.env文件,添加:
DEEPSEEK_API_KEY=your_api_key_here
Q2:未配置API密钥能否使用系统?
A:可以。系统会自动使用本地模板生成题目,功能完整可用。
Q3:如何修改BKT算法参数?
A:在.env文件中配置:
BKT_GUESS=0.25
BKT_SLIP=0.1
BKT_P0=0.5
Q4:如何添加新的知识点?
A:登录教师或管理员账号,进入知识点管理页面,点击"添加知识点"。
Q5:题目审核流程是什么?
A:AI生成的题目初始状态为pending,教师审核后可通过/拒绝/修改,只有approved状态的题目学生才能看到。
18.2 系统配置参数说明
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| DEEPSEEK_API_KEY | string | “” | DeepSeek API密钥 |
| DEEPSEEK_API_BASE | string | https://api.deepseek.com/v1 | API基础URL |
| DEEPSEEK_MODEL | string | deepseek-chat | 使用的模型 |
| DEEPSEEK_TIMEOUT | int | 90 | API超时时间(秒) |
| USE_BKT_MASTERY | bool | true | 是否使用BKT算法 |
| BKT_GUESS | float | 0.25 | BKT猜测率 |
| BKT_SLIP | float | 0.1 | BKT失误率 |
| BKT_P0 | float | 0.5 | BKT初始掌握概率 |
| DEEPSEEK_ALLOW_TEMPLATE_FALLBACK | bool | false | API失败时是否回退模板 |
18.3 API接口速查表
| 接口路径 | 方法 | 功能 | 权限 |
|---|---|---|---|
| /api/login/ | POST | 用户登录 | 公开 |
| /api/register/ | POST | 用户注册 | 公开 |
| /api/knowledge/ | GET | 获取知识点列表 | 登录 |
| /api/question/ | GET | 获取题目列表 | 登录 |
| /api/practice/generate/ | POST | 生成练习题 | 学生 |
| /api/practice/submit/ | POST | 提交答案 | 学生 |
| /api/practice/recommend/ | GET | 获取推荐 | 学生 |
| /api/practice/student_stats/ | GET | 学生统计 | 学生 |
| /api/practice/wrong_book/ | GET | 错题本 | 学生 |
| /api/practice/teacher_analytics/ | GET | 学情分析 | 教师 |
结语
本系统成功将大模型技术应用于教育领域,实现了智能出题、个性化推荐和学习分析的完整闭环。通过贝叶斯知识追踪算法,系统能够科学地评估学生的知识掌握情况,并提供针对性的学习建议。
系统采用前后端分离架构,技术栈成熟稳定,代码结构清晰,易于维护和扩展。无论是作为教学辅助工具,还是作为智能教育系统的研究平台,都具有较高的实用价值和研究价值。
未来,随着人工智能技术的不断发展,智能教育系统将在个性化学习、自适应教学、学习分析等方面发挥越来越重要的作用。本系统为这一领域的探索提供了有益的实践经验。
更多推荐
所有评论(0)