7.7 KiB
题目管理 API 文档
1. 上传文件并生成题目
接口说明: 上传文档文件,调用 AI 自动生成题目
请求方式: POST
接口地址: /question/upload
Content-Type: multipart/form-data
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| file | File | 是 | 文档文件(支持 doc, docx, pdf, txt 等) |
| customFileName | String | 否 | 自定义文件名(可选) |
响应示例
json { "code": 200, "message": "操作成功", "data": "=== AI 处理结果 ===\n用户: admin\n文件路径: /path/to/file.docx\n\nAI 处理状态: 成功\n说明: 这是占位返回,请替换为实际的 AI 接口调用", "timestamp": "2026-04-23 08:30:00", "success": true }
注意: 目前
callAIInterface方法是占位符,需要对接 Dify 工作流才能实现真正的题目生成功能。
2. 分页查询题目
接口说明: 根据条件分页查询题目列表
请求方式: GET
接口地址: /question/page
请求参数
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| pageNum | Integer | 否 | 1 | 页码 |
| pageSize | Integer | 否 | 10 | 每页大小 |
| questionType | String | 否 | - | 题目类型:single_choice/multiple_choice/fill_blank/true_false/subjective |
| difficulty | Integer | 否 | - | 难度等级(1-5) |
| status | String | 否 | - | 审核状态:pending/approved/rejected |
响应示例
json { "code": 200, "message": "操作成功", "data": { "records": [ { "id": 21, "questionId": "q-001-sc-uuid-20260418", "questionType": "single_choice", "difficulty": 2, "tags": ["公司历史", "基本信息"], "score": 10.00, "version": "1.0", "documentId": "doc-001", "documentName": "公司介绍手册", "sourceContext": "根据文档第一段描述...", "pageNumbers": [1], "content": { "stem": "根据文档,公司成立的年份是?", "answer": "B", "explanation": "在文档第一页明确提到...", "data": { "options": [ {"key": "A", "content": "1998年"}, {"key": "B", "content": "2005年"}, {"key": "C", "content": "2010年"}, {"key": "D", "content": "2015年"} ] } }, "status": "pending", "reviewerComment": null, "createdAt": "2026-04-18 08:00:00", "updatedAt": "2026-04-18 00:49:27" } ], "total": 25, "size": 10, "current": 1, "pages": 3 }, "timestamp": "2026-04-23 08:30:00", "success": true }
3. 获取题目详情
接口说明: 根据题目 ID 获取详细信息
请求方式: GET
接口地址: /question/{id}
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | Long | 是 | 题目自增 ID |
响应示例
json { "code": 200, "message": "操作成功", "data": { "id": 21, "questionId": "q-001-sc-uuid-20260418", "questionType": "single_choice", "difficulty": 2, "tags": ["公司历史", "基本信息"], "score": 10.00, "version": "1.0", "documentId": "doc-001", "documentName": "公司介绍手册", "sourceContext": "根据文档第一段描述...", "pageNumbers": [1], "content": {...}, "status": "pending", "reviewerComment": null, "createdAt": "2026-04-18 08:00:00", "updatedAt": "2026-04-18 00:49:27" }, "timestamp": "2026-04-23 08:30:00", "success": true }---
4. 获取待审核题目列表
接口说明: 获取所有待审核的题目
请求方式: GET
接口地址: /question/pending
响应示例
json { "code": 200, "message": "操作成功", "data": [ { "id": 21, "questionId": "q-001-sc-uuid-20260418", "questionType": "single_choice", "status": "pending", ... } ], "timestamp": "2026-04-23 08:30:00", "success": true }
5. 审核题目
接口说明: 审核通过或拒绝题目
请求方式: PUT
接口地址: /question/review/{questionId}
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| questionId | String | 是 | 题目 UUID |
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| status | String | 是 | 审核状态:approved(通过)/ rejected(拒绝) |
| reviewerComment | String | 否 | 审核评论/意见 |
请求示例
PUT /question/review/q-001-sc-uuid-20260418?status=approved&reviewerComment=题目质量良好
响应示例
json { "code": 200, "message": "操作成功", "data": null, "timestamp": "2026-04-23 08:30:00", "success": true }
6. 按题型获取题目列表
接口说明: 获取指定题型的所有已审核通过的题目
请求方式: GET
接口地址: /question/type/{questionType}
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| questionType | String | 是 | 题目类型:single_choice/multiple_choice/fill_blank/true_false/subjective |
响应示例
json { "code": 200, "message": "操作成功", "data": [ { "id": 21, "questionId": "q-001-sc-uuid-20260418", "questionType": "single_choice", "status": "approved", ... } ], "timestamp": "2026-04-23 08:30:00", "success": true }
7. 获取所有题型列表
接口说明: 获取系统支持的所有题目类型
请求方式: GET
接口地址: /question/types
响应示例
json { "code": 200, "message": "操作成功", "data": [ "single_choice", "multiple_choice", "fill_blank", "true_false", "subjective" ], "timestamp": "2026-04-23 08:30:00", "success": true }
附录
题目类型说明
| 类型值 | 中文名称 | 说明 |
|---|---|---|
| single_choice | 选择题 | 单选题 |
| multiple_choice | 多选题 | 多项选择题 |
| fill_blank | 填空题 | 填空题目 |
| true_false | 判断题 | 判断对错 |
| subjective | 简答题 | 主观题/问答题 |
审核状态说明
| 状态值 | 中文名称 | 说明 |
|---|---|---|
| pending | 待审核 | AI 生成后的初始状态 |
| approved | 已通过 | 审核通过,可对外展示 |
| rejected | 已拒绝 | 审核不通过 |
注意事项
- 题目生成接口目前未完全实现,
uploadAndProcessFile方法中的callAIInterface是占位符,需要对接 Dify 工作流 API - 按题型查询只返回已通过的题目(status = "approved"),如需查看所有状态的题目,请使用分页查询接口并指定 status 参数
- 时间格式统一为
yyyy-MM-dd HH:mm:ss
AIChat模块流式接口
POST 'http://localhost:8080/api/ai/chat/stream'
-H 'Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc3NzAwODgxOCwiZXhwIjoxNzc3MDE2MDE4fQ.mrvapro3L_vzYPxRtZPcEDQFAE2kuvpeMBV1vWhI9ho7lJZq0CnBrL1ZkhwOnDiXOZltLjor6vvFkuEb-pGEtg'
-H 'Content-Type: application/json'
-d '{"message": "三峡船闸是什么", "chat_history": []}'
-H 'Accept: text/event-stream'