diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoSaveReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoSaveReqVO.java index 3655ef7c8..8dc13083c 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoSaveReqVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoSaveReqVO.java @@ -28,8 +28,8 @@ public class ModelAssessTaskAutoSaveReqVO { @Schema(description = "数据集") private Long dataset; - @Schema(description = "数据集类型 0 普通 1 官方",example = "1") - private Integer type; + @Schema(description = "是否预知模型服务(0普通 1官方)",example = "0") + private Integer modelType; @Schema(description = "评估方向,使用字典(llm_dimension_type)") private Integer dimension; diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskmanual/vo/LabelInformationVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskmanual/vo/LabelInformationVO.java new file mode 100644 index 000000000..50f0a984c --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskmanual/vo/LabelInformationVO.java @@ -0,0 +1,14 @@ +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 LabelInformationVO { + + @Schema(description = "打分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long score; + @Schema(description = "标注", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private String label; +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/modelassesstaskauto/ModelAssessTaskAutoDO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/modelassesstaskauto/ModelAssessTaskAutoDO.java index c812b0f29..ea03d71c2 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/modelassesstaskauto/ModelAssessTaskAutoDO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/modelassesstaskauto/ModelAssessTaskAutoDO.java @@ -44,14 +44,14 @@ public class ModelAssessTaskAutoDO extends BaseDO { * 模型服务 */ private Long modelService; + /** + * 是否预知模型(0普通 1官方) + */ + private Integer modelType; /** * 数据集 */ private Long dataset; - /** - * 数据集类型 0 普通 1 官方 - */ - private Integer type; /** * 评估方向,使用字典(llm_dimension_type) */ diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskmanual/ModelAssessTaskManualServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskmanual/ModelAssessTaskManualServiceImpl.java index 60c359511..7a65c1515 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskmanual/ModelAssessTaskManualServiceImpl.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskmanual/ModelAssessTaskManualServiceImpl.java @@ -7,12 +7,14 @@ import cn.iocoder.yudao.module.llm.dal.dataobject.basemodel.BaseModelDO; 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.ManualModelAnswerDO; 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.basemodel.BaseModelMapper; 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.ManualModelAnswerMapper; 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; @@ -73,6 +75,8 @@ public class ModelAssessTaskManualServiceImpl implements ModelAssessTaskManualSe private ManualModelAnnoMapper manualModelAnnoMapper; @Resource private BaseModelMapper baseModelMapper; + @Resource + private ManualModelAnswerMapper manualModelAnswerMapper; @Override public Long createModelAssessTaskManual(ModelAssessTaskManualSaveReqVO createReqVO) { @@ -252,46 +256,52 @@ public class ModelAssessTaskManualServiceImpl implements ModelAssessTaskManualSe @Override public List gitViewTheReportDetails(Long id) { - ModelAssessTaskManualDO modelAssessTaskManual = modelAssessTaskManualMapper.selectById(id); List manualEvaluationReportRespVOS = new ArrayList<>(); - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(ManualModelAnnoDO::getManalTaskId,id); - List manualModelAnnoDOS = manualModelAnnoMapper.selectList(wrapper); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(ModelAssessTaskDimensionDO::getTaskId,id); - List 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 modelAssessDimensionDOS = modelAssessDimensionMapper.selectList(); - Map longModelDimesionDOMap = cn.iocoder.yudao.framework.common.util.collection. - CollectionUtils.convertMap(modelAssessDimensionDOS, ModelAssessDimensionDO::getId); - - for (ModelAssessTaskDimensionDO modelAssessTaskDimensionDO : modelAssessTaskDimensionDOS){ - List 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); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ManualModelAnswerDO::getManalTaskId,id) + .eq(ManualModelAnswerDO::getStatus,2) + .isNotNull(ManualModelAnswerDO::getReqRespVos); + List manualModelAnswerDOS = manualModelAnswerMapper.selectList(wrapper); + // 获取维度 + List collect =new ArrayList<>(); + if (CollectionUtils.isNotEmpty(manualModelAnswerDOS)){ + List bean = BeanUtils.toBean(manualModelAnswerDOS.get(0).getReqRespVos(), LabelInformationVO.class); + collect = bean.stream().map(LabelInformationVO::getLabel).collect(Collectors.toList()); + } + List labelInformationVOS = new ArrayList<>(); + for (ManualModelAnswerDO manualModelAnswerDO : manualModelAnswerDOS){ + List bean = BeanUtils.toBean(manualModelAnswerDO.getReqRespVos(), LabelInformationVO.class); + labelInformationVOS.addAll(bean); + } + if (CollectionUtils.isNotEmpty(labelInformationVOS)){ + // 计算平均分 + double average = labelInformationVOS.stream().mapToDouble(LabelInformationVO::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); + for (String collect1 : collect){ + List voList = labelInformationVOS.stream().filter(manualModelAnswerDO -> manualModelAnswerDO.getLabel().equals(collect1)).collect(Collectors.toList()); + ManualEvaluationReportRespVO reportRespVO1 = new ManualEvaluationReportRespVO(); + reportRespVO1.setDimension(collect1); + double average1 = voList.stream().mapToDouble(LabelInformationVO::getScore).average().getAsDouble(); + reportRespVO1.setScore(average1); + reportRespVO1.setPercent(average1 * 50.0); + long count = voList.stream().filter(manualModelAnswerDO -> manualModelAnswerDO.getScore() == 0).count(); + double zeroPercent = count / voList.size() * 100; + reportRespVO1.setZeroPercent(new BigDecimal(zeroPercent).setScale(2, RoundingMode.HALF_UP).doubleValue()); + long count1 = voList.stream().filter(manualModelAnswerDO -> manualModelAnswerDO.getScore() == 1).count(); + long count2 = voList.stream().filter(manualModelAnswerDO -> manualModelAnswerDO.getScore() == 2).count(); + double onePercent = count1 / voList.size() * 100; + reportRespVO1.setOnePercent(new BigDecimal(onePercent).setScale(2, RoundingMode.HALF_UP).doubleValue()); + double twoPercent = count2 / voList.size() * 100; + reportRespVO1.setTwoPercent(new BigDecimal(twoPercent).setScale(2, RoundingMode.HALF_UP).doubleValue()); + manualEvaluationReportRespVOS.add(reportRespVO1); + } } return manualEvaluationReportRespVOS; }