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

4.9 KiB
Raw Blame History

AI 评分功能测试指南

测试前提

  1. 确保后端服务器运行在 http://localhost:8080
  2. 确保数据库中有简答题数据
  3. 需要先登录获取 token

测试步骤

1. 登录获取 Token

curl -X POST http://localhost:8080/api/login \
  -H "Content-Type: application/json" \
  -d '{
    "username": "你的用户名",
    "password": "你的密码"
  }'

返回示例:

{
  "success": true,
  "data": {
    "token": "your-token-here",
    "user": {...}
  }
}

2. 获取简答题列表

curl -X GET "http://localhost:8080/api/practice/questions?type=short-answer" \
  -H "Authorization: Bearer YOUR_TOKEN"

找到一个简答题的 ID例如123

3. 提交简答题答案测试 AI 评分

测试用例 1提交一个接近标准答案的回答

curl -X POST http://localhost:8080/api/practice/submit \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
    "question_id": 123,
    "answer": "网络安全是保护计算机网络系统及其数据的完整性、保密性和可用性的措施"
  }'

预期返回

{
  "success": true,
  "data": {
    "correct": true,
    "user_answer": "网络安全是保护计算机网络系统及其数据的完整性、保密性和可用性的措施",
    "correct_answer": "标准答案...",
    "ai_grading": {
      "score": 85,
      "feedback": "答案基本正确,要点全面",
      "suggestion": "可以补充一些具体的例子"
    }
  }
}

测试用例 2提交一个不完整的回答

curl -X POST http://localhost:8080/api/practice/submit \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
    "question_id": 123,
    "answer": "保护网络安全"
  }'

预期返回

{
  "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. URLhttp://localhost:8080/api/practice/submit
  3. Headers 添加:
    • Content-Type: application/json
    • Authorization: Bearer YOUR_TOKEN
  4. Body 选择 raw 和 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
  • 重新编译并启动服务器:
    go build -o bin/server.exe main.go
    ./bin/server.exe
    

问题 2AI 评分失败

可能原因

  • API 密钥无效
  • 网络连接问题
  • AI 服务不可用

解决方法

  • 检查后端日志中的错误信息
  • 验证 API 配置:查看 pkg/config/config.go
  • 尝试直接调用 AI API 测试连通性

问题 3评分结果不合理

可能原因

  • 提示词需要优化
  • AI 模型理解偏差

解决方法

测试数据示例

以下是一些可以用于测试的简答题和答案:

题目:什么是网络安全?

优秀答案(应得高分) "网络安全是指保护计算机网络系统及其数据免受未经授权的访问、使用、披露、破坏、修改或破坏的技术、策略和实践。它包括保护网络的完整性、保密性和可用性,确保数据在传输和存储过程中的安全。"

一般答案(应得中等分) "网络安全是保护计算机和网络不被黑客攻击,保护数据安全。"

较差答案(应得低分) "网络安全就是网络很安全。"

日志查看

查看服务器日志中的 AI 评分相关信息:

# Windows (如果使用 PowerShell)
Get-Content .\logs\server.log -Wait

# 或直接查看控制台输出

关注以下日志:

  • AI评分失败: ... - AI 评分出错
  • 没有错误日志 - AI 评分成功