- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
3.3 KiB
3.3 KiB
考试工作流联调文档
版本: 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):
{
"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
}
第二、三轮(传入错题记录):
{
"course_id": 1,
"mistake_records": "[{\"question_id\":null,\"knowledge_point_id\":456,...}]",
"single_choice_count": 2,
...
}
⚠️ 关键:
- 第一轮:完全不传
mistake_records参数 - 第二三轮:传入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. 路由顺序
# ✅ 正确
@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