Files
my-springboot-project/docs/完整curl测试手册.md

1278 lines
46 KiB
Markdown
Raw Permalink 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.
# 知识库管理系统 - 完整CURL测试手册
## 文档信息
| 项目 | 内容 |
| ----------- | ----------------------- |
| **文档名称** | 完整CURL测试文档 |
| **版本号** | V2.15.0 |
| **生成日期** | 2026-05-29 |
| **基础URL** | <http://localhost:8080> |
| **RAG服务地址** | <http://localhost:5001> |
***
## 一、使用说明
### 1.1 认证Token获取
首先需要通过登录接口获取JWT Token
```bash
curl -X POST "http://localhost:8080/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"123456"}'
```
### 1.2 Token说明
本文档中所有curl命令均已预置Token可直接复制使用。
### 1.3 通用请求头
所有需要认证的接口都需要添加以下请求头:
```bash
-H "Authorization: Bearer <your_token>" \
-H "Content-Type: application/json"
```
***
## 二、认证接口
### 2.1 登录
```bash
curl -X POST "http://localhost:8080/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"123456"}'
```
### 2.2 获取当前用户信息
```bash
curl -X GET "http://localhost:8080/api/auth/me" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
***
## 三、用户管理接口
### 3.1 获取用户列表
```bash
curl -X GET "http://localhost:8080/api/user/list" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 3.2 获取用户详情
```bash
curl -X GET "http://localhost:8080/api/user/1" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 3.3 创建用户
```bash
curl -X POST "http://localhost:8080/api/user" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"username": "testuser",
"password": "123456",
"email": "test@example.com",
"deptId": 1,
"userType": 3
}'
```
### 3.4 更新用户
```bash
curl -X PUT "http://localhost:8080/api/user/1" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{"email": "newemail@example.com"}'
```
### 3.5 删除用户
```bash
curl -X DELETE "http://localhost:8080/api/user/1" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 3.6 获取部门列表
```bash
curl -X GET "http://localhost:8080/api/department/list" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
***
## 四、向量库管理接口
### 4.1 获取向量库列表
```bash
curl -X GET "http://localhost:8080/api/collection" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.2 创建向量库
```bash
curl -X POST "http://localhost:8080/api/collection?name=dept_hr&displayName=人力资源知识库&departmentId=1&description=人力资源部专用知识库" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.3 修改向量库
```bash
curl -X PUT "http://localhost:8080/api/collection/dept_hr?displayName=人力资源知识库V2&description=更新后的描述" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.4 删除向量库
```bash
curl -X DELETE "http://localhost:8080/api/collection/dept_hr" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.5 文件向量化(单文件)
```bash
curl -X POST "http://localhost:8080/api/collection/public_kb/vectorize?fileId=36" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.6 批量文件向量化
```bash
curl -X POST "http://localhost:8080/api/collection/public_kb/vectorize/batch?fileIds=1&fileIds=2&fileIds=3" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.7 获取文档列表
```bash
curl -X GET "http://localhost:8080/api/collection/public_kb/documents" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.8 删除文档
```bash
# 推荐:使用 fileId 精确删除(避免同名文件删除错误)
curl -X DELETE "http://localhost:8080/api/collection/public_kb/documents/test_document.pdf?fileId=56" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
# 兼容旧版本:仅使用文件名(存在同名文件风险)
curl -X DELETE "http://localhost:8080/api/collection/public_kb/documents/test_document.pdf" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.9 废止文档
```bash
curl -X POST "http://localhost:8080/api/collection/public_kb/documents/test_document.pdf/deprecate?reason=new_version" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.10 恢复已废止文档
```bash
curl -X POST "http://localhost:8080/api/collection/public_kb/documents/test_document_v2.pdf/restore" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.11 获取文档版本历史
```bash
curl -X GET "http://localhost:8080/api/collection/public_kb/documents/test_document.pdf/versions?limit=10" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.12 获取向量库切片列表
```bash
curl -X GET "http://localhost:8080/api/collection/public_kb/chunks?limit=100&offset=0" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.13 获取文档切片列表
```bash
curl -X GET "http://localhost:8080/api/collection/public_kb/documents/test_document.pdf/chunks?page=1&pageSize=20" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.14 新增切片
```bash
curl -X POST "http://localhost:8080/api/collection/public_kb/chunks?content=新的切片内容&section=第一章" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.15 修改切片
```bash
curl -X PUT "http://localhost:8080/api/collection/public_kb/chunks/chunk_001?content=更新后的内容&section=第一章" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 4.16 删除切片
```bash
curl -X DELETE "http://localhost:8080/api/collection/public_kb/chunks/chunk_001" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
***
## 四、知识库访问控制接口
### 4.1 分页查询知识库列表
```bash
curl -X GET "http://localhost:8080/api/collection-access/page?pageNum=1&pageSize=10" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-H "Content-Type: application/json"
```
### 4.2 获取知识库详情
```bash
curl -X GET "http://localhost:8080/api/collection-access/1" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-H "Content-Type: application/json"
```
### 4.3 获取用户可访问的知识库列表
```bash
curl -X GET "http://localhost:8080/api/collection-access/accessible" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-H "Content-Type: application/json"
```
***
## 五、AI流式问答接口
### 5.1 流式问答
```bash
curl -X POST "http://localhost:8080/api/ai/chat/stream" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-H "Content-Type: application/json" \
-d '{
"message": "市场权重计算公式",
"session_id": ""
}' \
--no-buffer
```
### 5.2 中断AI流式问答
```bash
curl -X POST "http://localhost:8080/api/ai/chat/stop?sessionId=sess_1777600000000_abc123" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 5.3 获取用户会话列表
```bash
curl -X GET "http://localhost:8080/api/ai/sessions?page=1&pageSize=10" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 5.4 获取会话详情
```bash
curl -X GET "http://localhost:8080/api/ai/session/sess_123456789" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 5.5 获取消息文件来源列表
```bash
curl -X GET "http://localhost:8080/api/ai/message/1/sources" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 5.6 获取消息引用信息
```bash
curl -X GET "http://localhost:8080/api/ai/message/1/references" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 5.7 获取会话引用信息
```bash
curl -X GET "http://localhost:8080/api/ai/session/sess_123456789/references" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 5.8 删除单个会话
```bash
curl -X DELETE "http://localhost:8080/api/ai/session/sess_123456789" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 5.9 批量删除会话
```bash
curl -X DELETE "http://localhost:8080/api/ai/sessions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '["sess_001", "sess_002", "sess_003"]'
```
***
## 六、反馈管理接口
### 6.1 提交反馈
```bash
curl -X POST "http://localhost:8080/api/feedback" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"sessionId": "sess_test_001",
"query": "出差补助标准是什么?",
"answer": "根据公司规定国内出差补助标准为每天200元。",
"rating": 1,
"reason": "回答准确详细",
"sources": ["出差报销制度.pdf"]
}'
```
### 6.2 获取反馈列表
```bash
curl -X GET "http://localhost:8080/api/feedback/list?page=1&page_size=10" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 6.3 获取反馈统计
```bash
curl -X GET "http://localhost:8080/api/feedback/stats" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 6.4 获取差评案例
```bash
curl -X GET "http://localhost:8080/api/feedback/bad-cases" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
***
## 七、FAQ管理接口
### 7.1 获取FAQ列表
```bash
curl -X GET "http://localhost:8080/api/faq?page=1&page_size=10" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 7.2 获取FAQ建议列表
```bash
curl -X GET "http://localhost:8080/api/faq/suggestions?page=1&page_size=10" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 7.3 批准FAQ建议
```bash
curl -X POST "http://localhost:8080/api/faq/suggestions/1/approve" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{"answer": "修改后的标准答案内容"}'
```
### 7.4 拒绝FAQ建议
```bash
curl -X POST "http://localhost:8080/api/faq/suggestions/1/reject" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
***
## 八、图片管理接口
### 8.0 图片完整处理流程测试
#### 8.0.1 整体流程说明
本系统实现了完整的AI图片处理流程
```
用户提问 → RAG服务返回 → 图片提取 → 下载保存 → 数据库存储 → API访问 → 前端展示
```
#### 8.0.2 步骤1AI流式问答包含图片
```bash
curl -X POST "http://localhost:8080/api/ai/chat/stream" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"message": "2003—2022 年,三峡电站累计发电量是多少?最好带图片说明",
"session_id": ""
}' \
--no-buffer
```
**预期返回的 finish 事件包含 images 数组:**
```json
{
"type": "finish",
"images": [
{
"id": "ab77281e7913.jpg",
"score": 7.8,
"type": "chart",
"source": "三峡公报_1-15页.pdf",
"page": 12,
"description": "这是一张柱状图...",
"full_description": "这是一张柱状图,展示了...",
"url": "/images/ab77281e7913.jpg"
}
]
}
```
#### 8.0.3 步骤2获取图片数据二进制
```bash
curl -X GET "http://localhost:8080/api/image/ab77281e7913.jpg/data" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-o downloaded_image.jpg
```
**验证下载的文件:**
```bash
# 查看文件信息
ls -lh downloaded_image.jpg
# 查看文件类型
file downloaded_image.jpg
# 查看文件大小
wc -c downloaded_image.jpg
```
**预期输出:**
```
-rw-r--r-- 1 root root 79827 May 19 15:37 downloaded_image.jpg
downloaded_image.jpg: JPEG image data, ...
79827 downloaded_image.jpg
```
#### 8.0.4 步骤3获取图片详情JSON
```bash
curl -X GET "http://localhost:8080/api/image/1" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
**预期返回:**
```json
{
"code": 200,
"message": "成功",
"data": {
"id": 1,
"imageId": "ab77281e7913.jpg",
"filename": "ab77281e7913.jpg",
"path": "/img/ab77281e7913.jpg",
"sizeBytes": 79827,
"format": "JPEG",
"source": "三峡公报_1-15页.pdf",
"page": 12,
"type": "chart",
"description": "这是一张柱状图展示了2003年至2022年发电量的变化趋势...",
"fullDescription": "这是一张柱状图展示了2003年至2022年发电量单位亿千瓦时的变化趋势...",
"score": 7.8
}
}
```
#### 8.0.5 步骤4查看数据库中的图片记录
```bash
mysql -h localhost -u root -p knowledge_management_system -e "SELECT id, image_id, path, format, size_bytes, source, page, type, score FROM context_image LIMIT 5;"
```
**预期输出:**
```
+----+-------------------------+--------------------------+--------+-------------+-------------------------------+------+-------+-------+
| id | image_id | path | format | size_bytes | source | page | type | score |
+----+-------------------------+--------------------------+--------+-------------+-------------------------------+------+-------+-------+
| 1 | ab77281e7913.jpg | /img/ab77281e7913.jpg | JPEG | 79827 | 三峡公报_1-15页.pdf | 12 | chart | 7.80 |
+----+-------------------------+--------------------------+--------+-------------+-------------------------------+------+-------+-------+
```
### 8.1 获取图片列表
```bash
curl -X GET "http://localhost:8080/api/image/list?limit=10&offset=0" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 8.2 获取单张图片
```bash
curl -X GET "http://localhost:8080/api/image/img_001" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-o downloaded_image.jpg
```
### 8.3 获取图片统计
```bash
curl -X GET "http://localhost:8080/api/image/stats" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
***
## 九、报告管理接口
### 9.1 获取周报
```bash
curl -X GET "http://localhost:8080/api/report/weekly" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 9.2 获取月报
```bash
curl -X GET "http://localhost:8080/api/report/monthly" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
***
## 十、知识检索接口
### 10.1 混合检索
```bash
curl -X POST "http://localhost:8080/api/search" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"query": "出差补助标准",
"topK": 5,
"collections": ["public_kb", "dept"]
}'
```
***
## 十一、知识库路由接口
### 11.1 测试知识库路由
```bash
curl -X POST "http://localhost:8080/api/kb-route" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"query": "财务部的报销流程是什么"
}'
```
***
## 十二、模拟考接口 🔵 模拟考
### 12.1 生成试卷(按权限范围)
```bash
curl -X POST "http://localhost:8080/api/exam/paper/generate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"single_choice_count": 5,
"multiple_choice_count": 3,
"true_false_count": 2,
"fill_blank_count": 2,
"subjective_count": 1,
"difficulty": 3,
"include_personal": false
}'
```
### 12.2 生成试卷(指定文件)
```bash
curl -X POST "http://localhost:8080/api/exam/paper/generate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"single_choice_count": 5,
"multiple_choice_count": 3,
"true_false_count": 2,
"fill_blank_count": 2,
"subjective_count": 1,
"difficulty": 3,
"file_ids": [1, 2, 3]
}'
```
### 12.3 生成题目
**重要说明**:此接口为异步接口,请求后立即返回任务提交状态,实际生成在后台执行。需通过 `GET /api/file/{fileId}` 接口轮询查询生成进度和结果。
**测试用例1智能生成模式推荐**
不提供 `question_types` 参数AI 会根据文档内容自动判断题型和数量:
```bash
curl -X POST "http://localhost:8080/api/exam/generate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"file_id": 74,
"difficulty": 3,
"request_id": "gen_req_smart_001"
}'
```
**测试用例2指定题型模式 - 通过 file\_id 指定文件**
> **注意**:系统会自动查询该文件已有的题目题干(`exclude_stems`在调用AI时传入进行去重避免生成重复题目。
```bash
curl -X POST "http://localhost:8080/api/exam/generate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"file_id": 69,
"question_types": {
"single_choice": 3,
"multiple_choice": 2,
"true_false": 2,
"fill_blank": 2,
"subjective": 1
},
"difficulty": 3,
"request_id": "gen_req_001"
}'
```
**默认分数配置:**
| 题型 | 默认分数 |
| ----------------- | ---- |
| `single_choice` | 2分 |
| `multiple_choice` | 4分 |
| `true_false` | 1分 |
| `fill_blank` | 2分 |
| `subjective` | 10分 |
**预期响应:**
```json
{
"code": 200,
"message": "收到请求",
"data": {
"requestId": "gen_req_001",
"fileId": 21,
"fileMatchStatus": "success",
"matchedCollection": "test1",
"matchedFilePath": "test1/1.docx",
"documentName": "1.docx",
"collectionFilled": true,
"collectionFillSource": "直接使用",
"asyncTaskStarted": true,
"nextStep": "请通过文件状态接口查询生成进度",
"status": "success"
}
}
```
> **生成完成后**,通过 `GET /api/file/{fileId}` 接口可查询到生成结果,`processMessage` 字段会包含题型统计信息:
>
> ```
> 生成成功共15道题
>
> 【题型统计】
> 请求题型: {单选题: 10道, 填空题: 5道}
> 实际生成: {单选题: 10道, 填空题: 3道}
>
> 【短缺警告】
> - fill_blank: 请求5道实际生成3道
> ```
**测试用例3通过 file\_path 指定文件**
```bash
curl -X POST "http://localhost:8080/api/exam/generate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"file_path": "test1/1.docx",
"collection": "test1",
"question_types": {
"single_choice": 3,
"multiple_choice": 2,
"true_false": 2,
"fill_blank": 2,
"subjective": 1
},
"difficulty": 3,
"request_id": "gen_req_002"
}'
```
**测试用例4自定义题型分数**
```bash
curl -X POST "http://localhost:8080/api/exam/generate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"file_id": 21,
"question_types": {
"single_choice": 5,
"multiple_choice": 3
},
"question_scores": {
"single_choice": 4.00,
"multiple_choice": 8.00
},
"difficulty": 3,
"request_id": "gen_req_003"
}'
```
**测试用例5查询生成进度**
提交请求后,通过文件状态查询接口轮询生成进度:
```bash
curl -X GET "http://localhost:8080/api/file/21" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
**预期响应(生成中):**
```json
{
"code": 200,
"message": "成功",
"data": {
"id": 21,
"fileName": "1.docx",
"filePath": "test1/1.docx",
"processStatus": "INDEXED",
"examStatus": "GENERATING",
"processMessage": "正在生成题目,请稍后...",
"createTime": "2026-05-28T10:00:00",
"updateTime": "2026-05-28T10:00:01"
}
}
```
**预期响应(生成成功):**
```json
{
"code": 200,
"message": "成功",
"data": {
"id": 21,
"fileName": "1.docx",
"filePath": "test1/1.docx",
"processStatus": "INDEXED",
"examStatus": "GENERATED",
"processMessage": "生成成功共5道题\n\n【AI分析结果】\n{\"summary\":\"文档摘要...\",\"questionDistribution\":{\"single_choice\":3,\"multiple_choice\":2}}",
"createTime": "2026-05-28T10:00:00",
"updateTime": "2026-05-28T10:00:03"
}
}
```
**AI生成题目状态说明**
| 状态值 | 说明 |
| ------------- | ---- |
| `UNGENERATED` | 未生成 |
| `GENERATING` | 正在生成 |
| `GENERATED` | 已生成 |
| `FAILED` | 生成失败 |
**轮询策略建议:**
- 初始轮询间隔2-3秒
- 超时时间:建议设置为 5-10 分钟
- 停止条件:`examStatus` 变为 `GENERATED``FAILED`
**默认分值说明:**
| 题型 | 默认分值 |
| ---------------------- | ---- |
| 单选题 (single\_choice) | 2分 |
| 多选题 (multiple\_choice) | 4分 |
| 判断题 (true\_false) | 1分 |
| 填空题 (fill\_blank) | 2分 |
| 简答题 (subjective) | 6分 |
### 12.4 批改答案(日常练习)
**测试用例1单选题**
```bash
curl -X POST "http://localhost:8080/api/exam/grade" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"type": "practice",
"request_id": "grade_req_single_001",
"answers": [
{
"question_id": "q_single_001",
"question_type": "single_choice",
"question_content": {
"stem": "请假制度中,事假的最长申请天数为?",
"data": {
"options": [
{"key": "A", "content": "3天"},
{"key": "B", "content": "7天"},
{"key": "C", "content": "15天"},
{"key": "D", "content": "30天"}
]
},
"answer": "B"
},
"student_answer": "B",
"max_score": 2.0
}
]
}'
```
**测试用例2多选题**
```bash
curl -X POST "http://localhost:8080/api/exam/grade" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"type": "practice",
"request_id": "grade_req_multi_001",
"answers": [
{
"question_id": "q_multi_001",
"question_type": "multiple_choice",
"question_content": {
"stem": "以下哪些属于公司福利?",
"data": {
"options": [
{"key": "A", "content": "五险一金"},
{"key": "B", "content": "年终奖金"},
{"key": "C", "content": "带薪年假"},
{"key": "D", "content": "加班工资"}
]
},
"answer": "ABC"
},
"student_answer": "AB",
"max_score": 4.0
}
]
}'
```
**测试用例3判断题**
```bash
curl -X POST "http://localhost:8080/api/exam/grade" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"type": "practice",
"request_id": "grade_req_tf_001",
"answers": [
{
"question_id": "q_tf_001",
"question_type": "true_false",
"question_content": {
"stem": "公式\"样本零售客户期末库存/月销量\"可以用来衡量客户对货源的依赖程度。",
"data": {"options": [{"key": "T", "content": "正确"}, {"key": "F", "content": "错误"}]},
"answer": "F"
},
"student_answer": "F",
"max_score": 1.0
}
]
}'
```
**测试用例4填空题**
```bash
curl -X POST "http://localhost:8080/api/exam/grade" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"type": "practice",
"request_id": "grade_req_fill_001",
"answers": [
{
"question_id": "q_fill_001",
"question_type": "fill_blank",
"question_content": {
"stem": "三峡电站2020年发电量达到____亿千瓦时为历年最高。",
"data": {"blank_count": 1},
"answer": ["1118.02"]
},
"student_answer": ["1118"],
"max_score": 2.0
}
]
}'
```
**测试用例5主观题**
```bash
curl -X POST "http://localhost:8080/api/exam/grade" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"type": "practice",
"request_id": "grade_req_subjective_001",
"answers": [
{
"question_id": "q_subjective_001",
"question_type": "subjective",
"question_content": {
"stem": "请简述库存周转率的定义及其计算公式。",
"data": {},
"answer": "库存周转率是衡量库存管理效率的指标。公式:库存周转率 = 销售成本 / 平均库存"
},
"student_answer": "库存周转率是衡量库存管理效率的指标,反映了库存的周转速度。计算公式为:库存周转率 = 销售成本 / 平均库存",
"max_score": 6.0
}
]
}'
```
**测试用例6混合题型完整试卷**
```bash
curl -X POST "http://localhost:8080/api/exam/grade" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"type": "practice",
"request_id": "grade_req_mixed_001",
"answers": [
{
"question_id": "q_001",
"question_type": "single_choice",
"question_content": {
"stem": "以下哪个不是公司的核心价值观?",
"data": {
"options": [
{"key": "A", "content": "诚信"},
{"key": "B", "content": "创新"},
{"key": "C", "content": "利润"},
{"key": "D", "content": "责任"}
]
},
"answer": "C"
},
"student_answer": "C",
"max_score": 2.0
},
{
"question_id": "q_002",
"question_type": "multiple_choice",
"question_content": {
"stem": "以下哪些属于人力资源部的职责?",
"data": {
"options": [
{"key": "A", "content": "招聘"},
{"key": "B", "content": "培训"},
{"key": "C", "content": "财务"},
{"key": "D", "content": "绩效"}
]
},
"answer": "ABD"
},
"student_answer": "AB",
"max_score": 4.0
},
{
"question_id": "q_003",
"question_type": "true_false",
"question_content": {
"stem": "员工请假需要提前一天申请。",
"data": {"options": [{"key": "T", "content": "正确"}, {"key": "F", "content": "错误"}]},
"answer": "T"
},
"student_answer": "T",
"max_score": 1.0
},
{
"question_id": "q_004",
"question_type": "fill_blank",
"question_content": {
"stem": "公司成立于____年总部位于____。",
"data": {"blank_count": 2},
"answer": ["2010", "北京"]
},
"student_answer": ["2010", "上海"],
"max_score": 4.0
},
{
"question_id": "q_005",
"question_type": "subjective",
"question_content": {
"stem": "请简述绩效考核的目的和意义。",
"data": {},
"answer": "绩效考核的目的是评估员工工作表现,激励员工提升绩效,为薪酬调整和晋升提供依据。"
},
"student_answer": "绩效考核可以评估员工的工作表现,帮助发现问题并改进,同时作为薪酬和晋升的参考依据。",
"max_score": 6.0
}
]
}'
```
### 12.5 获取考试记录
```bash
curl -X GET "http://localhost:8080/api/exam/my/papers" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 12.6 开始考试(获取题目)
```bash
curl -X POST "http://localhost:8080/api/exam/paper/paper_12345678-1234-1234-1234-123456789abc-start" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 12.7 获取考试结果
```bash
curl -X GET "http://localhost:8080/api/exam/record/record_12345678-1234-1234-1234-123456789abc/result" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 12.8 查询用户答题记录(按试卷)
```bash
curl -X POST "http://localhost:8080/api/exam/answers/query" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"paper_id": "paper_12345678-1234-1234-1234-123456789abc"
}'
```
### 12.9 查询用户答题记录(按会话)
```bash
curl -X POST "http://localhost:8080/api/exam/answers/query" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"session_id": "sess_practice_001"
}'
```
***
## 十三、题目管理接口
### 13.1 获取题目列表(按权限过滤)
```bash
curl -X GET "http://localhost:8080/api/question/list?questionType=&difficulty=&status=&documentName=&limit=10" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 13.2 创建题目
```bash
curl -X POST "http://localhost:8080/api/question" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"question_type": "single_choice",
"difficulty": 3,
"content": {
"stem": "测试题目",
"data": {
"options": [
{"key": "A", "content": "选项A"},
{"key": "B", "content": "选项B"},
{"key": "C", "content": "选项C"},
{"key": "D", "content": "选项D"}
]
},
"answer": "B",
"explanation": "测试解析"
},
"score": 5.0,
"document_name": "public_kb/test.docx"
}'
```
### 13.3 题目统计
```bash
curl -X POST "http://localhost:8080/api/question/stats" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"status": "approved",
"question_types": ["single_choice", "multiple_choice"]
}'
```
***
## 十四、正式考试接口 🟢 正式考
### 14.1 开始考试(获取题目)
```bash
curl -X POST "http://localhost:8080/api/formal-exam/paper/paper_12345678-1234-1234-1234-123456789abc/start" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
### 14.2 提交考试(通过 recordId 方式,推荐)
```bash
curl -X POST "http://localhost:8080/api/exam/record/record_12345678-1234-1234-1234-123456789abc/grade" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"answers": [
{"questionId": "q_001", "questionType": "true_false", "answer": true},
{"questionId": "q_002", "questionType": "subjective", "answer": "该指标用于衡量库存与销售的匹配程度。"},
{"questionId": "q_003", "questionType": "fill_blank", "answer": ["散点图","销量"]},
{"questionId": "q_004", "questionType": "single_choice", "answer": "B"},
{"questionId": "q_005", "questionType": "multiple_choice", "answer": ["A","C","D"]}
]
}'
```
### 14.3 提交考试(通过 /api/exam/grade 方式,支持完整题目信息)
```bash
curl -X POST "http://localhost:8080/api/exam/grade" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"type": "formal_exam",
"record_id": "record_12345678-1234-1234-1234-123456789abc",
"answers": [
{
"question_id": "q_001",
"question_type": "true_false",
"question_content": {
"stem": "公式\"样本零售客户期末库存/月销量\"可以用来衡量客户对货源的依赖程度。",
"data": {"options": [{"key": "T", "content": "正确"}, {"key": "F", "content": "错误"}]},
"answer": "F"
},
"student_answer": true,
"max_score": 3.0
}
]
}'
```
### 14.4 获取考试结果
```bash
curl -X GET "http://localhost:8080/api/formal-exam/record/record_12345678-1234-1234-1234-123456789abc/result" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
```
***
## 十五、正式考管理接口 🟢 正式考管理
### 15.1 预览试卷
```bash
curl -X POST "http://localhost:8080/api/admin/exam/paper/preview" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"single_choice_count": 1,
"multiple_choice_count": 1,
"true_false_count": 1,
"fill_blank_count": 2,
"subjective_count": 1,
"difficulty": 3
}'
```
### 15.2 保存试卷
```bash
curl -X POST "http://localhost:8080/api/admin/exam/paper/save" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"title": "月度考核试卷",
"questionIds": [
"q_001",
"q_002",
"q_003",
"q_004",
"q_005",
"q_006"
]
}'
```
### 15.3 发布试卷
```bash
curl -X POST "http://localhost:8080/api/admin/exam/paper/paper_12345678-1234-1234-1234-123456789abc/publish" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-d '{
"exam_name": "月度考核",
"start_time": "2026-06-01 09:00:00",
"end_time": "2026-06-01 11:00:00",
"duration_minutes": 120,
"department_ids": ["dept_001", "dept_002"],
"allow_retake": false
}'
```