新增功能: 1. AI智能评分系统 - 集成OpenAI兼容API进行简答题评分 - 提供分数、评语和改进建议 - 支持自定义AI服务配置(BaseURL、APIKey、Model) 2. 题目列表页面 - 展示所有题目和答案 - Tab标签页形式的题型筛选(选择题、多选题、判断题、填空题、简答题) - 关键词搜索功能(支持题目内容和编号搜索) - 填空题特殊渲染:****显示为下划线 - 判断题不显示选项,界面更简洁 3. UI优化 - 答题结果组件重构,支持AI评分显示 - 首页新增"题目列表"快速入口 - 响应式设计,适配移动端和PC端 技术改进: - 添加AI评分服务层(internal/services/ai_grading.go) - 扩展题目模型支持AI评分结果 - 更新配置管理支持AI服务配置 - 添加AI评分测试脚本和文档 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
205 lines
4.9 KiB
Markdown
205 lines
4.9 KiB
Markdown
# AI 评分功能测试指南
|
||
|
||
## 测试前提
|
||
|
||
1. 确保后端服务器运行在 `http://localhost:8080`
|
||
2. 确保数据库中有简答题数据
|
||
3. 需要先登录获取 token
|
||
|
||
## 测试步骤
|
||
|
||
### 1. 登录获取 Token
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/login \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"username": "你的用户名",
|
||
"password": "你的密码"
|
||
}'
|
||
```
|
||
|
||
返回示例:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"token": "your-token-here",
|
||
"user": {...}
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2. 获取简答题列表
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/practice/questions?type=short-answer" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
找到一个简答题的 ID(例如:123)
|
||
|
||
### 3. 提交简答题答案测试 AI 评分
|
||
|
||
**测试用例 1:提交一个接近标准答案的回答**
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/practice/submit \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||
-d '{
|
||
"question_id": 123,
|
||
"answer": "网络安全是保护计算机网络系统及其数据的完整性、保密性和可用性的措施"
|
||
}'
|
||
```
|
||
|
||
**预期返回**:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"correct": true,
|
||
"user_answer": "网络安全是保护计算机网络系统及其数据的完整性、保密性和可用性的措施",
|
||
"correct_answer": "标准答案...",
|
||
"ai_grading": {
|
||
"score": 85,
|
||
"feedback": "答案基本正确,要点全面",
|
||
"suggestion": "可以补充一些具体的例子"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**测试用例 2:提交一个不完整的回答**
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/practice/submit \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||
-d '{
|
||
"question_id": 123,
|
||
"answer": "保护网络安全"
|
||
}'
|
||
```
|
||
|
||
**预期返回**:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"correct": false,
|
||
"user_answer": "保护网络安全",
|
||
"correct_answer": "标准答案...",
|
||
"ai_grading": {
|
||
"score": 45,
|
||
"feedback": "答案过于简单,缺少要点",
|
||
"suggestion": "需要补充完整性、保密性和可用性等关键概念"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## 验证要点
|
||
|
||
1. **响应结构**:检查响应中是否包含 `ai_grading` 字段
|
||
2. **评分合理性**:AI 给出的分数是否在 0-100 之间
|
||
3. **correct 字段**:分数 >= 60 时,correct 应该为 true
|
||
4. **反馈信息**:feedback 和 suggestion 是否有意义
|
||
5. **非简答题**:对其他题型(填空题、判断题等),`ai_grading` 字段应该为 null
|
||
|
||
## 使用 Postman 测试
|
||
|
||
1. 创建新请求,方法为 POST
|
||
2. URL:`http://localhost:8080/api/practice/submit`
|
||
3. Headers 添加:
|
||
- `Content-Type: application/json`
|
||
- `Authorization: Bearer YOUR_TOKEN`
|
||
4. Body 选择 raw 和 JSON,输入:
|
||
```json
|
||
{
|
||
"question_id": 123,
|
||
"answer": "你的答案"
|
||
}
|
||
```
|
||
5. 点击 Send 发送请求
|
||
6. 查看响应中的 `ai_grading` 字段
|
||
|
||
## 前端测试
|
||
|
||
如果你已经实现了前端界面:
|
||
|
||
1. 登录系统
|
||
2. 进入练习页面
|
||
3. 筛选简答题类型
|
||
4. 随机获取一道简答题
|
||
5. 输入答案并提交
|
||
6. 查看是否显示 AI 评分结果(分数、评语、建议)
|
||
|
||
## 故障排查
|
||
|
||
### 问题 1:没有返回 ai_grading 字段
|
||
|
||
**可能原因**:
|
||
- 题目类型不是 `short-answer`
|
||
- 服务器未重启,使用的是旧代码
|
||
|
||
**解决方法**:
|
||
- 确认题目类型:`GET /api/practice/questions/:id`
|
||
- 重新编译并启动服务器:
|
||
```bash
|
||
go build -o bin/server.exe main.go
|
||
./bin/server.exe
|
||
```
|
||
|
||
### 问题 2:AI 评分失败
|
||
|
||
**可能原因**:
|
||
- API 密钥无效
|
||
- 网络连接问题
|
||
- AI 服务不可用
|
||
|
||
**解决方法**:
|
||
- 检查后端日志中的错误信息
|
||
- 验证 API 配置:查看 [pkg/config/config.go](pkg/config/config.go)
|
||
- 尝试直接调用 AI API 测试连通性
|
||
|
||
### 问题 3:评分结果不合理
|
||
|
||
**可能原因**:
|
||
- 提示词需要优化
|
||
- AI 模型理解偏差
|
||
|
||
**解决方法**:
|
||
- 调整 [internal/services/ai_grading.go](internal/services/ai_grading.go) 中的提示词
|
||
- 增加更详细的评分标准说明
|
||
|
||
## 测试数据示例
|
||
|
||
以下是一些可以用于测试的简答题和答案:
|
||
|
||
### 题目:什么是网络安全?
|
||
|
||
**优秀答案(应得高分)**:
|
||
"网络安全是指保护计算机网络系统及其数据免受未经授权的访问、使用、披露、破坏、修改或破坏的技术、策略和实践。它包括保护网络的完整性、保密性和可用性,确保数据在传输和存储过程中的安全。"
|
||
|
||
**一般答案(应得中等分)**:
|
||
"网络安全是保护计算机和网络不被黑客攻击,保护数据安全。"
|
||
|
||
**较差答案(应得低分)**:
|
||
"网络安全就是网络很安全。"
|
||
|
||
## 日志查看
|
||
|
||
查看服务器日志中的 AI 评分相关信息:
|
||
|
||
```bash
|
||
# Windows (如果使用 PowerShell)
|
||
Get-Content .\logs\server.log -Wait
|
||
|
||
# 或直接查看控制台输出
|
||
```
|
||
|
||
关注以下日志:
|
||
- `AI评分失败: ...` - AI 评分出错
|
||
- 没有错误日志 - AI 评分成功
|