模型评估查看报告

This commit is contained in:
sunxiqing 2025-01-02 20:23:35 +08:00
parent a1ce3b6ce5
commit 4ddcbb3442
4 changed files with 96 additions and 2 deletions

View File

@ -2,9 +2,11 @@ package cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual;
import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetQuestionPageReqVO;
import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetQuestionRespVO;
import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual.manualAnnoVo.ManualModelAnswerPageReqVO;
import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskmanual.ModelAssessTaskDimensionDO;
import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskmanual.ModelAssessTaskDimensionMapper;
import cn.iocoder.yudao.module.llm.service.dataset.DatasetQuestionService;
import cn.iocoder.yudao.module.llm.service.modelassesstaskmanual.ManualModelAnswerService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@ -45,6 +47,8 @@ public class ModelAssessTaskManualController {
private ModelAssessTaskManualService modelAssessTaskManualService;
@Resource
ModelAssessTaskDimensionMapper modelAssessTaskDimensionMapper;
@Resource
private ManualModelAnswerService manualModelAnswerService;
@PostMapping("/create")
@Operation(summary = "创建模型评估任务 —— 人工评估")
@ -103,9 +107,17 @@ public class ModelAssessTaskManualController {
@GetMapping("/gitReport")
@Operation(summary = "查看报告详情")
@PreAuthorize("@ss.hasPermission('llm:model-assess-task-manual:query')")
public CommonResult<PageResult<ModelAssessTaskManualRespVO>> gitViewTheReportDetails(@Valid ModelAssessTaskManualPageReqVO pageReqVO) {
public CommonResult<List<ManualEvaluationReportRespVO>> gitViewTheReportDetails(@RequestParam("id") Long id) {
//TODO 人工评估-查看报告待补充
return success(new PageResult<>());
List<ManualEvaluationReportRespVO> manualEvaluationReportRespVOS = modelAssessTaskManualService.gitViewTheReportDetails(id);
return success(manualEvaluationReportRespVOS);
}
@GetMapping("/getManualAssessment")
@Operation(summary = "获取模型结果")
@PreAuthorize("@ss.hasPermission('llm:model-assess-task-manual:query')")
public CommonResult<PageResult<ManualAssessmentPageRespVO>> getManualAssessment(@Valid ManualModelAnswerPageReqVO pageReqVO) {
return success(manualModelAnswerService.getManualAssessment(pageReqVO));
}

View File

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 人工评估报告 Request VO")
@Data
public class ManualEvaluationReportRespVO {
@Schema(description = "评估维度")
private String dimension;
@Schema(description = " 平均分数")
private Double score;
@Schema(description = "百分比")
private Double percent;
@Schema(description = "0分占比")
private Double zeroPercent;
@Schema(description = "1分占比")
private Double onePercent;
@Schema(description = "2分占比")
private Double twoPercent;
}

View File

@ -54,5 +54,7 @@ public interface ModelAssessTaskManualService {
PageResult<ModelAssessTaskManualDO> getModelAssessTaskManualPage(ModelAssessTaskManualPageReqVO pageReqVO);
List<ManualEvaluationReportRespVO> gitViewTheReportDetails(Long id);
void backupModelAssessTaskManual(ModelAssessTaskManualBackupReqVO updateReqVO);
}

View File

@ -5,10 +5,12 @@ import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetQuestionRe
import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanualbackup.vo.ModelAssessTaskManualBackupSaveReqVO;
import cn.iocoder.yudao.module.llm.dal.dataobject.dataset.DatasetDO;
import cn.iocoder.yudao.module.llm.dal.dataobject.modelassessstoplist.ModelAssessStoplistDO;
import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskmanual.ManualModelAnnoDO;
import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskmanual.ModelAssessDimensionDO;
import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskmanual.ModelAssessTaskDimensionDO;
import cn.iocoder.yudao.module.llm.dal.dataobject.modelservice.ModelServiceDO;
import cn.iocoder.yudao.module.llm.dal.mysql.dataset.DatasetMapper;
import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskmanual.ManualModelAnnoMapper;
import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskmanual.ModelAssessDimensionMapper;
import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskmanual.ModelAssessTaskDimensionMapper;
import cn.iocoder.yudao.module.llm.dal.mysql.modelservice.ModelServiceMapper;
@ -23,6 +25,8 @@ import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -63,6 +67,8 @@ public class ModelAssessTaskManualServiceImpl implements ModelAssessTaskManualSe
private AsyncModelAccessManualService asyncModelAccessManualService;
@Resource
private ModelAssessTaskManualBackupService modelAssessTaskManualBackupService;
@Resource
private ManualModelAnnoMapper manualModelAnnoMapper;
@Override
public Long createModelAssessTaskManual(ModelAssessTaskManualSaveReqVO createReqVO) {
@ -202,4 +208,50 @@ public class ModelAssessTaskManualServiceImpl implements ModelAssessTaskManualSe
this.modelAssessTaskManualBackupService.createModelAssessTaskManualBackup(backupDo);
}
@Override
public List<ManualEvaluationReportRespVO> gitViewTheReportDetails(Long id) {
ModelAssessTaskManualDO modelAssessTaskManual = modelAssessTaskManualMapper.selectById(id);
List<ManualEvaluationReportRespVO> manualEvaluationReportRespVOS = new ArrayList<>();
LambdaQueryWrapper<ManualModelAnnoDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ManualModelAnnoDO::getManalTaskId,id);
List<ManualModelAnnoDO> manualModelAnnoDOS = manualModelAnnoMapper.selectList(wrapper);
LambdaQueryWrapper<ModelAssessTaskDimensionDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ModelAssessTaskDimensionDO::getTaskId,id);
List<ModelAssessTaskDimensionDO> modelAssessTaskDimensionDOS = modelAssessTaskDimensionMapper.selectList(queryWrapper);
// 计算平均分
double average = manualModelAnnoDOS.stream().mapToDouble(ManualModelAnnoDO::getScore).average().getAsDouble();
double score =average * 50.0;
ManualEvaluationReportRespVO reportRespVO = new ManualEvaluationReportRespVO();
double bd = new BigDecimal(average).setScale(2, RoundingMode.HALF_UP).doubleValue();
double v = new BigDecimal(score).setScale(2, RoundingMode.HALF_UP).doubleValue();
reportRespVO.setDimension("平均分");
reportRespVO.setScore(bd);
reportRespVO.setPercent(v);
manualEvaluationReportRespVOS.add(reportRespVO);
List<ModelAssessDimensionDO> modelAssessDimensionDOS = modelAssessDimensionMapper.selectList();
Map<Long, ModelAssessDimensionDO> longModelDimesionDOMap = cn.iocoder.yudao.framework.common.util.collection.
CollectionUtils.convertMap(modelAssessDimensionDOS, ModelAssessDimensionDO::getId);
for (ModelAssessTaskDimensionDO modelAssessTaskDimensionDO : modelAssessTaskDimensionDOS){
List<ManualModelAnnoDO> collect = manualModelAnnoDOS.stream().filter(manualModelAnswerDO -> manualModelAnswerDO.getDimensionId() == modelAssessTaskDimensionDO.getDimensionId()).collect(Collectors.toList());
ModelAssessDimensionDO modelAssessDimensionDO = longModelDimesionDOMap.get(modelAssessTaskDimensionDO.getDimensionId());
ManualEvaluationReportRespVO reportRespVO1 = new ManualEvaluationReportRespVO();
reportRespVO1.setDimension(modelAssessDimensionDO.getDimension());
double average1 = collect.stream().mapToDouble(ManualModelAnnoDO::getScore).average().getAsDouble();
reportRespVO1.setScore(average1);
reportRespVO1.setPercent(average1 * 50.0);
long count = collect.stream().filter(manualModelAnswerDO -> manualModelAnswerDO.getScore() == 0).count();
double zeroPercent = count / collect.size() * 100;
reportRespVO1.setZeroPercent(new BigDecimal(zeroPercent).setScale(2, RoundingMode.HALF_UP).doubleValue());
long count1 = collect.stream().filter(manualModelAnswerDO -> manualModelAnswerDO.getScore() == 1).count();
long count2 = collect.stream().filter(manualModelAnswerDO -> manualModelAnswerDO.getScore() == 2).count();
double onePercent = count1 / collect.size() * 100;
reportRespVO1.setOnePercent(new BigDecimal(onePercent).setScale(2, RoundingMode.HALF_UP).doubleValue());
double twoPercent = count2 / collect.size() * 100;
reportRespVO1.setTwoPercent(new BigDecimal(twoPercent).setScale(2, RoundingMode.HALF_UP).doubleValue());
manualEvaluationReportRespVOS.add(reportRespVO1);
}
return manualEvaluationReportRespVOS;
}
}