Files
aue/出题做题生成流程示意图.md
2026-06-03 13:16:30 +08:00

394 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 出题做题生成流程示意图
> **版本**: 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 对齐*