AnCao/test_ai_grading.md
yanlongqi ea051e9380 添加AI评分系统和题目列表功能
新增功能:
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>
2025-11-05 13:36:30 +08:00

205 lines
4.9 KiB
Markdown
Raw 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.

# 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
```
### 问题 2AI 评分失败
**可能原因**
- 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 评分成功