# 考试工作流联调文档 **版本:** v2.0 **状态:** ✅ 已完成 **最后更新:** 2025-10-12 --- ## 一、基本信息 ### 考试页面 - **URL:** `http://localhost:3001/trainee/exam?courseId=1` - **流程:** 三轮考试(正式考试 + 两次错题重考) ### 两个Dify工作流 #### 工作流1:试题生成器 - **API:** `http://dify.ireborn.com.cn/v1/workflows/run` - **Token:** `app-tDlrmXyS9NtWCShsOx5FH49L` - **功能:** 根据课程知识点生成试题 #### 工作流2:答案判断器 - **API:** `http://dify.ireborn.com.cn/v1/workflows/run` - **Token:** `app-FvMdrvbRBz547DVZEorgO1WT` - **功能:** 判断填空题和问答题答案 --- ## 二、API接口 ### 后端接口列表 | 接口 | 方法 | 功能 | |------|------|------| | `/api/v1/exams/generate` | POST | 生成试题 | | `/api/v1/exams/judge-answer` | POST | 判断主观题答案 | | `/api/v1/exams/record-mistake` | POST | 记录错题 | | `/api/v1/exams/mistakes` | GET | 获取错题记录 | **文件:** `kaopeilian-backend/app/api/v1/exam.py` --- ## 三、参数说明 ### 生成试题参数 **第一轮(不传mistake_records):** ```json { "course_id": 1, "single_choice_count": 4, "multiple_choice_count": 2, "true_false_count": 1, "fill_blank_count": 2, "essay_count": 1, "difficulty_level": 3 } ``` **第二、三轮(传入错题记录):** ```json { "course_id": 1, "mistake_records": "[{\"question_id\":null,\"knowledge_point_id\":456,...}]", "single_choice_count": 2, ... } ``` ⚠️ **关键**: - 第一轮:完全不传`mistake_records`参数 - 第二三轮:传入JSON字符串格式 ### 判断答案参数 ```json { "question": "题目内容", "correct_answer": "正确答案", "user_answer": "用户答案", "analysis": "答案解析" } ``` **返回:** `result: "正确"/"错误"` 或 `is_correct: true/false` --- ## 四、数据库表 ### exam_mistakes(错题记录表) **核心字段:** - user_id, exam_id(必填,外键CASCADE) - question_id, knowledge_point_id(可空,SET NULL) - question_content, correct_answer, user_answer **索引:** user_id, exam_id, knowledge_point_id --- ## 五、三轮考试流程 ``` 第一轮 ↓ 答错N题 ├─ 记录错题到数据库 └─ 获取错题记录 → 第二轮 第二轮(针对第一轮错题) ↓ 答错M题 ├─ 记录错题到数据库 └─ 获取错题记录 → 第三轮 第三轮(针对第二轮错题) ↓ 完成 └─ 显示最终成绩 ``` --- ## 六、关键技术点 ### 1. 路由顺序 ```python # ✅ 正确 @router.get("/mistakes") # 具体路由在前 @router.get("/{exam_id}") # 动态路由在后 ``` ### 2. 数据格式转换 **Dify → 前端:** ``` single_choice → single multiple_choice → multiple true_false → judge fill_blank → blank essay → essay ``` ### 3. 超时配置 - 试题生成:300秒(5分钟) - 答案判断:60秒(1分钟) --- ## 七、测试验证 **测试账号:** admin / admin123 **测试课程:** courseId=1 **验证要点:** - ✅ 试题成功生成 - ✅ 所有题型正常答题 - ✅ 错题正确记录 - ✅ AI判断正常工作 - ✅ 三轮流程完整 --- **文档维护:** 开发团队 **参考:** `试题生成器的核心提示词与输出示例.md`