Files
012-kaopeilian/知识库/参考代码/python_dev_project/docs/modules/exam_module.md
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

5.0 KiB
Raw Blame History

考试模块Exam Module

模块概述

考试模块是考培练系统的核心功能之一提供动态组卷、在线考试、自动判题、成绩分析和错题管理等功能。该模块与Dify AI平台集成支持智能出题和主观题自动评分。

主要功能

1. 动态组卷

  • 根据课程、知识点、难度等参数动态生成试卷
  • 支持多种题型:单选题、多选题、判断题、填空题、简答题、论述题
  • 通过Dify工作流实现智能出题

2. 考试管理

  • 考试计时和状态管理
  • 防作弊机制(防重复提交、超时控制)
  • 题目与答案分离存储,确保安全性

3. 自动判题

  • 客观题自动判分
  • 主观题通过Dify AI评分
  • 实时计算成绩和统计信息

4. 成绩分析

  • 详细的成绩报告
  • 题型正确率统计
  • 知识点掌握情况分析
  • AI生成的学习建议

5. 错题管理

  • 自动记录错题
  • 支持错题复习和标记掌握状态
  • 按知识点分类管理

技术架构

数据模型

  • ExamSession: 考试会话表
  • ExamQuestion: 考试题目表
  • ExamAnswer: 考试答案表
  • ExamResult: 考试结果表
  • Mistake: 错题记录表

API接口

1. 开始考试

POST /api/v1/exams/start
  • 功能:动态生成试卷并开始考试
  • 权限:需要登录
  • 参数课程ID、题目数量、时长、难度等

2. 提交考试

POST /api/v1/exams/{examId}/submit
  • 功能:提交答案并生成成绩
  • 权限:需要登录,只能提交自己的考试
  • 参数:答案列表

3. 获取考试详情

GET /api/v1/exams/{examId}
  • 功能:获取考试信息和题目(不含答案)
  • 权限:需要登录,只能查看自己的考试

4. 获取考试记录

GET /api/v1/exams/records
  • 功能:分页获取考试历史记录
  • 权限:需要登录
  • 支持按状态筛选

5. 获取考试结果

GET /api/v1/exams/{examId}/result
  • 功能:获取详细的考试成绩和分析
  • 权限:需要登录,只能查看自己的成绩

6. 获取错题列表

GET /api/v1/exams/mistakes
  • 功能:分页获取错题记录
  • 权限:需要登录
  • 支持按掌握状态筛选

配置说明

环境变量

# Dify配置
DIFY_API_BASE=https://api.dify.ai/v1
DIFY_API_KEY=your_api_key
DIFY_EXAM_WORKFLOW_ID=exam_workflow_id
DIFY_EVAL_WORKFLOW_ID=eval_workflow_id
DIFY_TIMEOUT=30

考试参数限制

  • 题目数量1-100题
  • 考试时长1-300分钟
  • 难度等级1-5级
  • 默认及格分60分

使用示例

1. 开始考试

# 请求
POST /api/v1/exams/start
{
    "exam_name": "Python基础测试",
    "question_count": 20,
    "time_limit": 60,
    "difficulty": 3,
    "knowledge_points": ["Python基础", "数据结构"],
    "question_types": ["single_choice", "true_false"]
}

# 响应
{
    "code": 200,
    "message": "考试开始成功",
    "data": {
        "id": 1,
        "exam_name": "Python基础测试",
        "total_questions": 20,
        "total_score": 100.0,
        "time_limit": 60,
        "status": "in_progress",
        "started_at": "2024-01-01T10:00:00",
        "questions": [...]
    }
}

2. 提交考试

# 请求
POST /api/v1/exams/1/submit
{
    "answers": [
        {
            "question_id": 1,
            "user_answer": "B",
            "time_spent": 30
        },
        {
            "question_id": 2,
            "user_answer": "True",
            "time_spent": 20
        }
    ]
}

# 响应
{
    "code": 200,
    "message": "考试提交成功",
    "data": {
        "exam_id": 1,
        "total_score": 100.0,
        "actual_score": 85.0,
        "percentage_score": 85.0,
        "is_passed": true,
        "correct_questions": 17,
        "ai_analysis": "您在Python基础部分表现优秀...",
        "improvement_suggestions": ["建议加强数据结构的学习"]
    }
}

安全考虑

  1. 认证控制所有接口需要JWT认证
  2. 权限隔离:用户只能访问自己的考试数据
  3. 防作弊机制
    • 题目与答案分离存储
    • 考试状态严格控制
    • 超时自动结束
    • 防止重复提交

性能优化

  1. 数据库索引

    • 用户ID和考试状态联合索引
    • 考试ID和题目顺序联合索引
  2. 分页查询

    • 考试记录和错题列表支持分页
    • 默认每页20条最大100条
  3. 异步处理

    • 使用异步数据库操作
    • Dify API调用设置超时控制

扩展性

该模块设计考虑了未来的扩展需求:

  1. 题库管理:预留了题库查询接口
  2. 批量导入支持从Excel导入试题
  3. 考试模板:可保存常用考试配置
  4. 团体考试:支持班级或部门统一考试
  5. 证书生成:考试通过后生成电子证书

测试覆盖

  • 单元测试:覆盖所有服务层方法
  • 集成测试覆盖所有API接口
  • 测试场景包括:
    • 正常流程测试
    • 异常情况处理
    • 权限控制验证
    • 边界条件测试