用户反映在创建学习目标时选择的难度是"中等",目标创建成功并正确保存了difficulty字段,但在调用Coze生成题目时,响应体中的difficulty字段变成了null。
通过详细的代码分析和测试,确定了difficulty字段的完整传递链路:
Coze API本身返回的difficulty字段为null,而后端代码没有fallback逻辑来处理这种情况。
创建了完整的测试脚本 test_difficulty_flow_debug.py
来验证整个流程:
=== 修复前测试结果 ===
题目1 - difficulty: None, 预期: 中等
❌ 题目1 difficulty字段为null
=== 修复后测试结果 ===
题目1 - difficulty: 中等, 预期: 中等
✅ 题目1 difficulty字段正确
server/src/main/java/com/example/baseserver/service/CozeWorkflowService.java
// 修改前
private CozeWorkflowResponse parseCozeResponse(String responseBody) throws JsonProcessingException
// 修改后
private CozeWorkflowResponse parseCozeResponse(String responseBody, String originalDifficulty) throws JsonProcessingException
// 修改前
private CozeWorkflowResponse.GeneratedQuestion parseQuestion(JsonNode questionNode)
// 修改后
private CozeWorkflowResponse.GeneratedQuestion parseQuestion(JsonNode questionNode, String originalDifficulty)
// 解析难度字段,添加fallback逻辑
String difficulty = null;
if (questionNode.has("difficulty") && !questionNode.get("difficulty").isNull()) {
difficulty = questionNode.get("difficulty").asText();
}
// 如果Coze返回的difficulty为null或空,使用原始请求中的difficulty
if (difficulty == null || difficulty.trim().isEmpty()) {
difficulty = originalDifficulty;
log.warn("Coze API返回的difficulty为null,使用原始difficulty: {}", originalDifficulty);
}
builder.difficulty(difficulty);
// 在generateQuestions方法中
CozeWorkflowResponse result = parseCozeResponse(response, request.getDifficulty());
// 在parseCozeResponse方法中
CozeWorkflowResponse.GeneratedQuestion question = parseQuestion(questionNode, originalDifficulty);
test_difficulty_flow_debug.py
验证完整流程此次修复成功解决了difficulty字段丢失的问题,通过添加fallback机制确保了数据的完整性。修复方案不仅解决了当前问题,还提高了系统的健壮性,能够应对外部API返回不完整数据的情况。
修复状态:✅ 已完成
测试状态:✅ 通过
部署状态:✅ 已部署