Merge remote-tracking branch 'origin/master'

# Conflicts:
#	yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskmanual/ModelAssessTaskManualServiceImpl.java
This commit is contained in:
limin 2025-01-03 14:20:47 +08:00
commit 6191173b11
4 changed files with 69 additions and 45 deletions

View File

@ -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;

View File

@ -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;
}

View File

@ -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
*/

View File

@ -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<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);
LambdaQueryWrapper<ManualModelAnswerDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ManualModelAnswerDO::getManalTaskId,id)
.eq(ManualModelAnswerDO::getStatus,2)
.isNotNull(ManualModelAnswerDO::getReqRespVos);
List<ManualModelAnswerDO> manualModelAnswerDOS = manualModelAnswerMapper.selectList(wrapper);
// 获取维度
List<String> collect =new ArrayList<>();
if (CollectionUtils.isNotEmpty(manualModelAnswerDOS)){
List<LabelInformationVO> bean = BeanUtils.toBean(manualModelAnswerDOS.get(0).getReqRespVos(), LabelInformationVO.class);
collect = bean.stream().map(LabelInformationVO::getLabel).collect(Collectors.toList());
}
List<LabelInformationVO> labelInformationVOS = new ArrayList<>();
for (ManualModelAnswerDO manualModelAnswerDO : manualModelAnswerDOS){
List<LabelInformationVO> 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<LabelInformationVO> 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;
}