22 KiB
22 KiB
出题做题生成流程示意图
版本: v2.0 (2026-05-10 更新) 状态: 与代码实现已对齐
一、模块总览
┌─────────────────────────────────────────────────────────────────────┐
│ 考察与训练 (ExamModule) │
├──────────┬──────────┬──────────────┬──────────────┬────────────────┤
│ 🤖 AI出题 │ 📚 题库管理 │ 📋 智能组卷 │ 📝 试卷考核 │ 🎯 互动训练 │
│ (管理员) │ (管理员) │ (管理员) │ (全员) │ (全员) │
│ exam:ai │ exam:bank│ exam:paper │ exam:exam │ exam:train │
└──────────┴──────────┴──────────────┴──────────────┴────────────────┘
各模块功能说明
| 模块 | 权限码 | 功能描述 | 目标用户 |
|---|---|---|---|
| AI出题 | exam:ai |
选择文档→AI生成题目 | 管理员/有权限用户 |
| 题库管理 | exam:bank |
题目审核/编辑/删除 | 管理员 |
| 智能组卷 | exam:paper |
配置参数→生成试卷→编辑+发布 | 管理员 |
| 试卷考核 | exam:exam |
待考试/答题/成绩/错题本/自测组卷 | 全员 |
| 互动训练 | exam:train |
闯关模式/每日一练/错题本(本地) | 全员 |
二、题目生成流程(AI出题)
┌──────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐
│ 上传文档 │ ──→│ 文件向量化处理 │ ──→│ AI题目生成 │ ──→│ 题目预览 │
│ │ │ │ │ │ │ │
└──────────┘ └──────────────┘ └──────────────┘ └────┬─────┘
│
┌─────────────────────────────────────────┘
↓
┌──────────────┐
│ 管理员审核操作 │
└──────┬───────┘
│
┌──────────┼──────────┐
↓ ↓ ↓
┌────────┐ ┌────────┐ ┌────────┐
│ 采纳通过 │ │ 编辑修改 │ │ 删除丢弃 │
└───┬────┘ └───┬────┘ └────────┘
↓ ↓
┌────────┐ ┌────────┐
│ 进入题库 │→ │ 进入题库 │
└────────┘ └────────┘
相关API接口
| 序号 | 接口路径 | 方法 | 说明 |
|---|---|---|---|
| 1 | /api/file/upload |
POST | 上传制度文件 |
| 2 | /api/collections/{name}/vectorize |
POST | 文件向量化处理 |
| 3 | /api/exam/generate |
POST | AI智能出题接口 |
| 4 | /api/question/review/{questionId} |
PUT | 审核题目(采纳/拒绝) |
三、试卷生成流程(双路径)
路径A:管理员 — 智能组卷(可编辑 + 可发布)
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 选择关联文档 │ ──→│ 配置试卷参数 │ ──→│ 调用组卷API │ ──→│ 预览编辑试卷 │
│ (可选) │ │ │ │ │ │ │
└──────────────┘ └──────────────┘ └──────────────┘ └──────┬───────┘
│
┌────────────────────────────────┘
↓
┌──────────────────────┐
│ 管理员操作面板 │
│ ├─ 编辑题目(题干/选项) │
│ ├─ 调整分值/顺序 │
│ └─ 发布试卷给指定用户 │
└──────────┬───────────┘
│
┌───────────────┼───────────────┐
↓ ↓ ↓
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 保存草稿 │ │ 发布试卷 │ │ 删除试卷 │
└──────────┘ └────┬─────┘ └──────────┘
│
↓ 用户收到通知
┌──────────────────────┐
│ 试卷考核-待考试列表 │
└──────────────────────┘
路径B:用户 — 自测组卷(仅生成,直接答题)
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 配置参数 │ ──→│ 调用组卷API │ ──→│ 生成成功 │ ──→│ 直接进入答题 │
│ (题型/难度) │ │ │ │ │ │ (不可编辑) │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
两条路径对比
| 维度 | 路径A:管理员智能组卷 | 路径B:用户自测组卷 |
|---|---|---|
| 入口 | 「智能组卷」标签页 | 「试卷考核→自测组卷」子标签 |
| API | POST /api/exam/paper/generate |
同一接口 |
| 可选文件 | ✅ 关联制度文件筛选 | ✅ 可选关联 |
| 生成后行为 | 进入编辑预览 | 直接进入答题页面 |
| 编辑题目 | ✅ 题干/选项/答案/分值 | ❌ 不支持 |
| 发布功能 | ✅ 发布给指定部门/用户 | ❌ 仅自己使用 |
| 数据持久化 | ✅ 存入后端试卷表 | ❌ 前端暂存,关闭即失 |
| 权限要求 | exam:paper |
exam:exam |
相关API接口
| 序号 | 接口路径 | 方法 | 说明 |
|---|---|---|---|
| 1 | /api/exam/paper/generate |
POST | 从题库动态生成试卷 |
| 2 | /admin/exam/paper/{paperId}/publish |
POST | 管理员发布试卷(含deadline/target) |
| 3 | /api/exam/my/papers |
GET | 获取我的试卷列表 |
| 4 | /api/exam/paper/{paperId} |
GET | 获取试卷详情 |
四、答题考试流程(试卷考核)
核心流程图
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 获取待考试 │ ────→ │ 选择试卷 │ ────→ │ 启动考试记录 │
│ 列表 │ │ │ │ /record/start│
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
↓ ↓ ↓
┌──────────────┐ ┌──────────────────────────────────────────┐
│ GET │ │ 答题界面 │
│ /my/papers │ │ ┌─────────────────────────────────────┐ │
└──────────────┘ │ │ 第 N 题 [题型] ★ 分值 │ │
│ │ 题目内容 │ │
│ │ ○ A. 选项内容 │ │
│ │ ○ B. 选项内容 │ │
│ │ ○ C. 选项内容 │ │
│ │ ○ D. 选项内容 │ │
│ └─────────────────────────────────────┘ │
│ │
│ [上一题] ●●●○●● [下一题] [提交试卷] │
└──────────────┬───────────────────────────┘
│
┌───────────────────┼───────────────────┐
↓ ↓ ↓
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 自动保存 │ │ 提交试卷 │ │ 退出确认 │
│ /save │ │ /submit │ │ │
└──────────┘ └────┬─────┘ └──────────┘
│
↓
┌──────────────────────┐
│ 后端AI批改处理 │
│ (自动触发) │
└──────────┬───────────┘
│
↓
┌──────────────────────┐
│ 显示成绩单 │
│ 总分/得分率/每题详情 │
└──────────┬───────────┘
│
↓
┌──────────────────────┐
│ 错题自动收集入库 │
│ → 错题本可查看/重做 │
└──────────────────────┘
答题流程详细步骤与API对应关系
| 步骤 | 操作 | API接口 | 方法 | 说明 |
|---|---|---|---|---|
| 1 | 获取待考试列表 | /api/exam/my/papers |
GET | 返回当前用户的已发布试卷 |
| 2 | 选择并进入试卷 | - | 前端切换视图 | 加载试卷数据到答题组件 |
| 3 | 启动考试记录 | /api/exam/record/{recordId}/start |
POST | 创建考试记录,开始计时 |
| 4 | 答题中(自动保存) | /api/exam/record/{recordId}/save |
PUT | 定期保存当前答案进度 |
| 5 | 提交试卷 | /api/exam/record/{recordId}/submit |
POST | 提交最终答案,触发后端AI批改 |
| 6 | 查看成绩结果 | /api/exam/record/{recordId}/result |
GET | 获取AI批改后的成绩和错题信息 |
| 7 | 错题自动收集 | 后端自动处理 | - | 批改后自动将错题录入错题库 |
注意:当后端尚未实现 record 系列 API 时,前端会优雅降级:
- start/save 失败时继续前端答题模式
- submit 失败时降级为直接调用
/exam/grade进行批改
支持的题型及答题方式
| 题型 | question_type | 答题控件 | 答案格式 |
|---|---|---|---|
| 单选题 | single_choice |
Radio单选框 | 字符串 "A" |
| 多选题 | multiple_choice |
Checkbox多选框 | 数组 ["A","C"] |
| 判断题 | true_false |
是/否双选 | 字符串 "true"/"false" |
| 填空题 | fill_blank |
文本输入框 | 字符串 |
| 简答题 | subjective |
多行文本域 | 字符串 |
五、错题系统(两套独立机制)
架构对比
┌─────────────────────┐ ┌─────────────────────┐
│ 互动训练-错题本 │ │ 试卷考核-错题本 │
│ (trainTab='wrong') │ │ (examTab='wrong') │
├─────────────────────┤ ├─────────────────────┤
│ 数据来源: 前端缓存 │ │ 数据来源: 后端API │
│ 存储位置: trainingData│ │ 存储位置: 数据库表 │
│ .wrongQuestions │ │ wrong_questions │
│ │ │ │
│ 触发场景: │ │ 触发场景: │
│ • 闯关模式答错 │ │ • 试卷考核提交后 │
│ • 每日一练答错 │ │ • 后端自动收集 │
│ │ │ │
│ 操作能力: │ │ 操作能力: │
│ • 查看解析(前端mock) │ │ • 查看解析(API数据) │
│ • 重做(重置关卡) │ │ • 重做(/redo API) │
│ • 无持久化 │ │ • 收藏(/toggle API) │
└─────────────────────┘ └─────────────────────┘
试卷考核错题本API
| 操作 | API | 方法 | 说明 |
|---|---|---|---|
| 获取错题列表 | /api/wrong-questions/list |
POST | 分页查询,支持collection过滤 |
| 收藏/取消收藏 | /api/wrong-questions/collection/toggle |
POST | 传入question_id |
| 重做错题 | /api/wrong-questions/redo |
POST | 传入question_ids数组 |
六、互动训练流程
┌─────────────────────────────────────────────────────────────┐
│ 互动训练 (exam:train) │
├──────────┬──────────┬──────────────────────────────────────┤
│ 🏆 闯关 │ 📅 每日一练│ ❌ 错题本(本地缓存) │
│ checkpoint│ daily │ wrong │
└──────────┴──────────┴──────────────────────────────────────┘
闯关模式流程:
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 选择关卡 │ → │ 组卷API │ → │ 答题提交 │ → │ 批改评分 │
│ (5个预设) │ │ generate │ │ grade │ │ 更新关卡 │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
│
┌──────────┴──────────┐
↓ ↓
┌──────────┐ ┌──────────┐
│ 通过升级 │ │ 错题缓存 │
│ 下一关 │ │ 本地存储 │
└──────────┘ └──────────┘
互动训练关卡配置(预设固定关卡)
| 关卡ID | 名称 | 难度 | 单选 | 多选 | 判断 | 简答 | 状态 |
|---|---|---|---|---|---|---|---|
| 1 | 入门挑战 | ⭐ | 3 | 0 | 2 | 0 | in-progress |
| 2 | 基础巩固 | ⭐⭐ | 4 | 2 | 2 | 0 | pending |
| 3 | 进阶提升 | ⭐⭐⭐ | 4 | 3 | 3 | 0 | pending |
| 4 | 高级挑战 | ⭐⭐⭐⭐ | 3 | 3 | 2 | 2 | pending |
| 5 | 大师试炼 | ⭐⭐⭐⭐⭐ | 4 | 4 | 2 | 2 | pending |
七、完整API接口清单
7.1 题目管理
| 接口 | 路径 | 方法 | 权限 | 说明 |
|---|---|---|---|---|
| AI出题 | /api/exam/generate |
POST | exam:ai | 根据文档生成题目 |
| 审核题目 | /api/question/review/{id} |
PUT | exam:bank | 采纳/拒绝题目 |
7.2 试卷管理
| 接口 | 路径 | 方法 | 权限 | 说明 |
|---|---|---|---|---|
| 生成试卷 | /api/exam/paper/generate |
POST | exam:paper 或 exam:exam | 从题库动态组卷 |
| 我的试卷 | /api/exam/my/papers |
GET | exam:exam | 获取用户试卷列表 |
| 试卷详情 | /api/exam/paper/{paperId} |
GET | exam:paper 或 exam:exam | 获取试卷完整内容 |
| 发布试卷 | /admin/exam/paper/{paperId}/publish |
POST | exam:paper | 管理员发布试卷 |
7.3 答题考试(record-based)
| 接口 | 路径 | 方法 | 权限 | 说明 |
|---|---|---|---|---|
| 启动考试 | /api/exam/record/{recordId}/start |
POST | exam:exam | 开始考试计时 |
| 保存答案 | /api/exam/record/{recordId}/save |
PUT | exam:exam | 答题中途自动保存 |
| 提交试卷 | /api/exam/record/{recordId}/submit |
POST | exam:exam | 提交最终答案 |
| 成绩查询 | /api/exam/record/{recordId}/result |
GET | exam:exam | 获取批改成绩和错题 |
7.4 批改与查询
| 接口 | 路径 | 方法 | 权限 | 说明 |
|---|---|---|---|---|
| 批改答案 | /api/exam/grade |
POST | exam:exam | AI批改(降级备用) |
| 查询答题记录 | /api/exam/answers/query |
POST | exam:exam | 按paperId/sessionId查询 |
7.5 错题管理
| 接口 | 路径 | 方法 | 权限 | 说明 |
|---|---|---|---|---|
| 错题列表 | /api/wrong-questions/list |
POST | exam:exam | 分页获取错题 |
| 收藏切换 | /api/wrong-questions/collection/toggle |
POST | exam:exam | 收藏/取消收藏错题 |
| 重做错题 | /api/wrong-questions/redo |
POST | exam:exam | 重新练习错题 |
八、数据库核心表结构
exam_paper(试卷表)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | BIGINT | 主键 |
| uuid | VARCHAR(36) | UUID唯一标识 |
| title | VARCHAR(200) | 试卷标题 |
| total_score | INT | 总分 |
| question_count | INT | 题目数量 |
| difficulty | INT | 整体难度(1-5) |
| status | TINYINT | 状态(0=草稿,1=已发布,2=已归档) |
| creator_id | BIGINT | 创建者(管理员) |
| created_at | DATETIME | 创建时间 |
| updated_at | DATETIME | 更新时间 |
exam_record(考试记录表)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | BIGINT | 主键 |
| uuid | VARCHAR(36) | UUID唯一标识 |
| paper_id | BIGINT | 关联试卷ID |
| user_id | BIGINT | 考试用户ID |
| status | TINYINT | 状态(0=未开始,1=进行中,2=已交卷,3=已批改) |
| score | DECIMAL(5,2) | 得分 |
| max_score | INT | 满分 |
| started_at | DATETIME | 开始时间 |
| submitted_at | DATETIME | 提交时间 |
| graded_at | DATETIME | 批改完成时间 |
wrong_questions(错题表)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | BIGINT | 主键 |
| question_id | BIGINT | 关联题目ID |
| user_id | BIGINT | 用户ID |
| student_answer | TEXT | 学生答案 |
| correct_answer | TEXT | 正确答案 |
| is_correct | TINYINT | 是否正确(0=错误) |
| error_count | INT | 错误次数 |
| last_wrong_at | DATETIME | 最近错误时间 |
九、管理员 vs 用户 功能矩阵
| 功能 | 管理员 | 普通用户 |
|---|---|---|
| AI出题 | ✅ | ✅(有权限) |
| 题库审核 | ✅ | ❌ |
| 智能组卷(生成) | ✅ | ❌ |
| 智能组卷(编辑) | ✅ | ❌ |
| 智能组卷(发布) | ✅ | ❌ |
| 试卷考核-待考试 | ❌ | ✅ |
| 试卷考核-答题 | ✅(测试) | ✅ |
| 试卷考核-成绩单 | ✅ | ✅ |
| 试卷考核-错题本(API) | ✅ | ✅ |
| 试卷考核-自测组卷 | ✅ | ✅ |
| 互动训练-闯关 | ✅ | ✅ |
| 互动训练-每日一练 | ✅ | ✅ |
| 互动训练-错题本(本地) | ✅ | ✅ |
文档更新日期: 2026-05-10 与 ExamModule.vue v2.0 + exam.js v2.0 对齐