46 KiB
46 KiB
知识库管理系统 - 完整CURL测试手册
文档信息
| 项目 | 内容 |
|---|---|
| 文档名称 | 完整CURL测试文档 |
| 版本号 | V2.15.0 |
| 生成日期 | 2026-05-29 |
| 基础URL | http://localhost:8080 |
| RAG服务地址 | http://localhost:5001 |
一、使用说明
1.1 认证Token获取
首先需要通过登录接口获取JWT Token:
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 通用请求头
所有需要认证的接口都需要添加以下请求头:
-H "Authorization: Bearer <your_token>" \
-H "Content-Type: application/json"
二、认证接口
2.1 登录
curl -X POST "http://localhost:8080/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"123456"}'
2.2 获取当前用户信息
curl -X GET "http://localhost:8080/api/auth/me" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
三、用户管理接口
3.1 获取用户列表
curl -X GET "http://localhost:8080/api/user/list" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
3.2 获取用户详情
curl -X GET "http://localhost:8080/api/user/1" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
3.3 创建用户
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 更新用户
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 删除用户
curl -X DELETE "http://localhost:8080/api/user/1" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
3.6 获取部门列表
curl -X GET "http://localhost:8080/api/department/list" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
四、向量库管理接口
4.1 获取向量库列表
curl -X GET "http://localhost:8080/api/collection" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
4.2 创建向量库
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 修改向量库
curl -X PUT "http://localhost:8080/api/collection/dept_hr?displayName=人力资源知识库V2&description=更新后的描述" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
4.4 删除向量库
curl -X DELETE "http://localhost:8080/api/collection/dept_hr" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
4.5 文件向量化(单文件)
curl -X POST "http://localhost:8080/api/collection/public_kb/vectorize?fileId=36" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
4.6 批量文件向量化
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 获取文档列表
curl -X GET "http://localhost:8080/api/collection/public_kb/documents" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
4.8 删除文档
# 推荐:使用 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 废止文档
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 恢复已废止文档
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 获取文档版本历史
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 获取向量库切片列表
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 获取文档切片列表
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 新增切片
curl -X POST "http://localhost:8080/api/collection/public_kb/chunks?content=新的切片内容§ion=第一章" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
4.15 修改切片
curl -X PUT "http://localhost:8080/api/collection/public_kb/chunks/chunk_001?content=更新后的内容§ion=第一章" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
4.16 删除切片
curl -X DELETE "http://localhost:8080/api/collection/public_kb/chunks/chunk_001" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
四、知识库访问控制接口
4.1 分页查询知识库列表
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 获取知识库详情
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 获取用户可访问的知识库列表
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 流式问答
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流式问答
curl -X POST "http://localhost:8080/api/ai/chat/stop?sessionId=sess_1777600000000_abc123" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
5.3 获取用户会话列表
curl -X GET "http://localhost:8080/api/ai/sessions?page=1&pageSize=10" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
5.4 获取会话详情
curl -X GET "http://localhost:8080/api/ai/session/sess_123456789" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
5.5 获取消息文件来源列表
curl -X GET "http://localhost:8080/api/ai/message/1/sources" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
5.6 获取消息引用信息
curl -X GET "http://localhost:8080/api/ai/message/1/references" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
5.7 获取会话引用信息
curl -X GET "http://localhost:8080/api/ai/session/sess_123456789/references" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
5.8 删除单个会话
curl -X DELETE "http://localhost:8080/api/ai/session/sess_123456789" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
5.9 批量删除会话
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 提交反馈
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 获取反馈列表
curl -X GET "http://localhost:8080/api/feedback/list?page=1&page_size=10" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
6.3 获取反馈统计
curl -X GET "http://localhost:8080/api/feedback/stats" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
6.4 获取差评案例
curl -X GET "http://localhost:8080/api/feedback/bad-cases" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
七、FAQ管理接口
7.1 获取FAQ列表
curl -X GET "http://localhost:8080/api/faq?page=1&page_size=10" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
7.2 获取FAQ建议列表
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建议
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建议
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 步骤1:AI流式问答(包含图片)
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 数组:
{
"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:获取图片数据(二进制)
curl -X GET "http://localhost:8080/api/image/ab77281e7913.jpg/data" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-o downloaded_image.jpg
验证下载的文件:
# 查看文件信息
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)
curl -X GET "http://localhost:8080/api/image/1" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
预期返回:
{
"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:查看数据库中的图片记录
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 获取图片列表
curl -X GET "http://localhost:8080/api/image/list?limit=10&offset=0" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
8.2 获取单张图片
curl -X GET "http://localhost:8080/api/image/img_001" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A" \
-o downloaded_image.jpg
8.3 获取图片统计
curl -X GET "http://localhost:8080/api/image/stats" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
九、报告管理接口
9.1 获取周报
curl -X GET "http://localhost:8080/api/report/weekly" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
9.2 获取月报
curl -X GET "http://localhost:8080/api/report/monthly" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
十、知识检索接口
10.1 混合检索
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 测试知识库路由
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 生成试卷(按权限范围)
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 生成试卷(指定文件)
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 会根据文档内容自动判断题型和数量:
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时传入进行去重,避免生成重复题目。
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分 |
预期响应:
{
"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 指定文件
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:自定义题型分数
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:查询生成进度
提交请求后,通过文件状态查询接口轮询生成进度:
curl -X GET "http://localhost:8080/api/file/21" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
预期响应(生成中):
{
"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"
}
}
预期响应(生成成功):
{
"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:单选题
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:多选题
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:判断题
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:填空题
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:主观题
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:混合题型(完整试卷)
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 获取考试记录
curl -X GET "http://localhost:8080/api/exam/my/papers" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTc4MDY0Njg2MSwiZXhwIjoxNzgwNjU0MDYxfQ.lNjvlKtxVRwjX9Ce2IO0M0NxB_Dm2vxkGlynBMUt6sjdUKr-R57nXhLcxHSM92gtaJYZHczYSU4l6eDWQ0a56A"
12.6 开始考试(获取题目)
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 获取考试结果
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 查询用户答题记录(按试卷)
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 查询用户答题记录(按会话)
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 获取题目列表(按权限过滤)
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 创建题目
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 题目统计
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 开始考试(获取题目)
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 方式,推荐)
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 方式,支持完整题目信息)
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 获取考试结果
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 预览试卷
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 保存试卷
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 发布试卷
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
}'