diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/ModelAssessTaskAutoController.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/ModelAssessTaskAutoController.java index bb5e5f3c9..f8847bec0 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/ModelAssessTaskAutoController.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/ModelAssessTaskAutoController.java @@ -79,6 +79,7 @@ public class ModelAssessTaskAutoController { return success(result); } + @GetMapping("/page") @Operation(summary = "获得模型评估任务 —— 自动评估分页") // @PreAuthorize("@ss.hasPermission('llm:model-assess-task-auto:query')") diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/ModelAssessTaskAutoInfoController.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/ModelAssessTaskAutoInfoController.java new file mode 100644 index 000000000..16fab9f48 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/ModelAssessTaskAutoInfoController.java @@ -0,0 +1,101 @@ +package cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskauto; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskauto.vo.ModelAssessTaskAutoInfoPageReqVO; +import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskauto.vo.ModelAssessTaskAutoInfoRespVO; +import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskauto.vo.ModelAssessTaskAutoInfoSaveReqVO; +import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskautoinfo.ModelAssessTaskAutoInfoDO; +import cn.iocoder.yudao.module.llm.service.modelassesstaskautoinfo.ModelAssessTaskAutoInfoService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 模型评估任务 —— 自动评估-详细内容") +@RestController +@RequestMapping("/llm/model-assess-task-auto-info") +@Validated +public class ModelAssessTaskAutoInfoController { + + @Resource + private ModelAssessTaskAutoInfoService modelAssessTaskAutoInfoService; + + @PostMapping("/create") + @Operation(summary = "创建模型评估任务 —— 自动评估-详细内容") + @PreAuthorize("@ss.hasPermission('llm:model-assess-task-auto-info:create')") + public CommonResult createModelAssessTaskAutoInfo(@Valid @RequestBody ModelAssessTaskAutoInfoSaveReqVO createReqVO) { + return success(modelAssessTaskAutoInfoService.createModelAssessTaskAutoInfo(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新模型评估任务 —— 自动评估-详细内容") + @PreAuthorize("@ss.hasPermission('llm:model-assess-task-auto-info:update')") + public CommonResult updateModelAssessTaskAutoInfo(@Valid @RequestBody ModelAssessTaskAutoInfoSaveReqVO updateReqVO) { + modelAssessTaskAutoInfoService.updateModelAssessTaskAutoInfo(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除模型评估任务 —— 自动评估-详细内容") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('llm:model-assess-task-auto-info:delete')") + public CommonResult deleteModelAssessTaskAutoInfo(@RequestParam("id") Long id) { + modelAssessTaskAutoInfoService.deleteModelAssessTaskAutoInfo(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得模型评估任务 —— 自动评估-详细内容") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('llm:model-assess-task-auto-info:query')") + public CommonResult getModelAssessTaskAutoInfo(@RequestParam("id") Long id) { + ModelAssessTaskAutoInfoDO modelAssessTaskAutoInfo = modelAssessTaskAutoInfoService.getModelAssessTaskAutoInfo(id); + return success(BeanUtils.toBean(modelAssessTaskAutoInfo, ModelAssessTaskAutoInfoRespVO.class)); + } + + @GetMapping("/list") + @Operation(summary = "根绝任务id获得模型评估任务-自动评估") + @PreAuthorize("@ss.hasPermission('llm:model-assess-task-auto-info:query')") + public CommonResult> list(@Valid ModelAssessTaskAutoInfoPageReqVO pageReqVO) { + List list = modelAssessTaskAutoInfoService.getListByTaskId(pageReqVO); + return success(BeanUtils.toBean(list, ModelAssessTaskAutoInfoRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得模型评估任务 —— 自动评估-详细内容分页") + @PreAuthorize("@ss.hasPermission('llm:model-assess-task-auto-info:query')") + public CommonResult> getModelAssessTaskAutoInfoPage(@Valid ModelAssessTaskAutoInfoPageReqVO pageReqVO) { + PageResult pageResult = modelAssessTaskAutoInfoService.getModelAssessTaskAutoInfoPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ModelAssessTaskAutoInfoRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出模型评估任务 —— 自动评估-详细内容 Excel") + @PreAuthorize("@ss.hasPermission('llm:model-assess-task-auto-info:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportModelAssessTaskAutoInfoExcel(@Valid ModelAssessTaskAutoInfoPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = modelAssessTaskAutoInfoService.getModelAssessTaskAutoInfoPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "模型评估任务 —— 自动评估-详细内容.xls", "数据", ModelAssessTaskAutoInfoRespVO.class, + BeanUtils.toBean(list, ModelAssessTaskAutoInfoRespVO.class)); + } + +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoInfoPageReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoInfoPageReqVO.java new file mode 100644 index 000000000..e88916cd9 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoInfoPageReqVO.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskauto.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 模型评估任务 —— 自动评估-详细内容分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ModelAssessTaskAutoInfoPageReqVO extends PageParam { + + @Schema(description = "自动评估任务id", example = "12558") + private Long taskId; + + @Schema(description = "模型名称", example = "芋艿") + private String modelName; + + @Schema(description = "问题") + private String question; + + @Schema(description = "模型回答内容") + private String prompt; + + @Schema(description = "数据集回答内容") + private String dataSetPrompt; + + @Schema(description = "事实性错误") + private Integer factualError; + + @Schema(description = "情感倾向性") + private Integer emotionTendency; + + @Schema(description = "语义连贯性") + private Integer semanticsCoherence; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoInfoRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoInfoRespVO.java new file mode 100644 index 000000000..00a7f7d9d --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoInfoRespVO.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskauto.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 模型评估任务 —— 自动评估-详细内容 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ModelAssessTaskAutoInfoRespVO { + + @Schema(description = "评估任务ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11736") + @ExcelProperty("评估任务ID") + private Long id; + + @Schema(description = "自动评估任务id", example = "12558") + @ExcelProperty("自动评估任务id") + private Long taskId; + + @Schema(description = "模型名称", example = "芋艿") + @ExcelProperty("模型名称") + private String modelName; + + @Schema(description = "问题") + @ExcelProperty("问题") + private String question; + + @Schema(description = "模型回答内容") + @ExcelProperty("模型回答内容") + private String prompt; + + @Schema(description = "数据集回答内容") + @ExcelProperty("数据集回答内容") + private String dataSetPrompt; + + @Schema(description = "事实性错误") + @ExcelProperty("事实性错误") + private Integer factualError; + + @Schema(description = "情感倾向性") + @ExcelProperty("情感倾向性") + private Integer emotionTendency; + + @Schema(description = "语义连贯性") + @ExcelProperty("语义连贯性") + private Integer semanticsCoherence; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoInfoSaveReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoInfoSaveReqVO.java new file mode 100644 index 000000000..f745c8f18 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoInfoSaveReqVO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskauto.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 模型评估任务 —— 自动评估-详细内容新增/修改 Request VO") +@Data +public class ModelAssessTaskAutoInfoSaveReqVO { + + @Schema(description = "评估任务ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11736") + private Long id; + + @Schema(description = "自动评估任务id", example = "12558") + private Long taskId; + + @Schema(description = "模型名称", example = "芋艿") + private String modelName; + + @Schema(description = "问题") + private String question; + + @Schema(description = "模型回答内容") + private String prompt; + + @Schema(description = "数据集回答内容") + private String dataSetPrompt; + + @Schema(description = "事实性错误") + private Integer factualError; + + @Schema(description = "情感倾向性") + private Integer emotionTendency; + + @Schema(description = "语义连贯性") + private Integer semanticsCoherence; + +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoPageReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoPageReqVO.java index 083dcf24a..1251de12b 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoPageReqVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoPageReqVO.java @@ -34,7 +34,7 @@ public class ModelAssessTaskAutoPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; - @Schema(description = "评估方向,使用字典(llm_dimension_type)") - private Integer dimension; + @Schema(description = "评估方向") + private List dimension; -} \ No newline at end of file +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoRespVO.java index 0f670b9f0..fc51c4031 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoRespVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelassesstaskauto/vo/ModelAssessTaskAutoRespVO.java @@ -44,9 +44,8 @@ public class ModelAssessTaskAutoRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; - @Schema(description = "评估方向,使用字典(llm_dimension_type)") - @ExcelProperty("评估方向,使用字典(llm_dimension_type)") - private Integer dimension; + @Schema(description = "评估方向") + private List dimension; @Schema(description = "自动评估列表") private List stoplists; 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 8dc13083c..23d97582c 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 @@ -31,8 +31,8 @@ public class ModelAssessTaskAutoSaveReqVO { @Schema(description = "是否预知模型服务(0普通 1官方)",example = "0") private Integer modelType; - @Schema(description = "评估方向,使用字典(llm_dimension_type)") - private Integer dimension; + @Schema(description = "评估方向") + private List dimension; @Schema(description = "自动规则打分,停用词表") private List stoplists; 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 cf8b961c3..7f2491760 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 @@ -59,7 +59,7 @@ public class ModelAssessTaskAutoDO extends BaseDO { /** * 评估方向,使用字典(llm_dimension_type) */ - private Integer dimension; + private String dimension; /** * 状态 */ diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/modelassesstaskautoinfo/ModelAssessTaskAutoInfoDO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/modelassesstaskautoinfo/ModelAssessTaskAutoInfoDO.java new file mode 100644 index 000000000..83e55a647 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/modelassesstaskautoinfo/ModelAssessTaskAutoInfoDO.java @@ -0,0 +1,63 @@ +package cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskautoinfo; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 模型评估任务 —— 自动评估-详细内容 DO + * + * @author 华大大模型 + */ +@TableName("llm_model_assess_task_auto_info") +@KeySequence("llm_model_assess_task_auto_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ModelAssessTaskAutoInfoDO extends BaseDO { + + /** + * 评估任务ID + */ + @TableId + private Long id; + /** + * 自动评估任务id + */ + private Long taskId; + /** + * 模型名称 + */ + private String modelName; + /** + * 问题 + */ + private String question; + /** + * 模型回答内容 + */ + private String prompt; + /** + * 数据集回答内容 + */ + private String dataSetPrompt; + /** + * 事实性错误 + */ + private Integer factualError; + /** + * 情感倾向性 + */ + private Integer emotionTendency; + /** + * 语义连贯性 + */ + private Integer semanticsCoherence; + +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/modelassesstaskautoinfo/ModelAssessTaskAutoInfoMapper.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/modelassesstaskautoinfo/ModelAssessTaskAutoInfoMapper.java new file mode 100644 index 000000000..e50ee7119 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/modelassesstaskautoinfo/ModelAssessTaskAutoInfoMapper.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskautoinfo; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskauto.vo.ModelAssessTaskAutoInfoPageReqVO; +import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskautoinfo.ModelAssessTaskAutoInfoDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 模型评估任务 —— 自动评估-详细内容 Mapper + * + * @author 华大大模型 + */ +@Mapper +public interface ModelAssessTaskAutoInfoMapper extends BaseMapperX { + + default PageResult selectPage(ModelAssessTaskAutoInfoPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ModelAssessTaskAutoInfoDO::getTaskId, reqVO.getTaskId()) + .likeIfPresent(ModelAssessTaskAutoInfoDO::getModelName, reqVO.getModelName()) + .eqIfPresent(ModelAssessTaskAutoInfoDO::getQuestion, reqVO.getQuestion()) + .eqIfPresent(ModelAssessTaskAutoInfoDO::getPrompt, reqVO.getPrompt()) + .eqIfPresent(ModelAssessTaskAutoInfoDO::getDataSetPrompt, reqVO.getDataSetPrompt()) + .eqIfPresent(ModelAssessTaskAutoInfoDO::getFactualError, reqVO.getFactualError()) + .eqIfPresent(ModelAssessTaskAutoInfoDO::getEmotionTendency, reqVO.getEmotionTendency()) + .eqIfPresent(ModelAssessTaskAutoInfoDO::getSemanticsCoherence, reqVO.getSemanticsCoherence()) + .betweenIfPresent(ModelAssessTaskAutoInfoDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ModelAssessTaskAutoInfoDO::getId)); + } + +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/framework/backend/config/LLMBackendProperties.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/framework/backend/config/LLMBackendProperties.java index 928a84af7..d2a9fe6b6 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/framework/backend/config/LLMBackendProperties.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/framework/backend/config/LLMBackendProperties.java @@ -94,5 +94,8 @@ public class LLMBackendProperties { private String optimizePrompt; private String aigcModelCompletions; + private String aigcFileUpload; + + private String autoEvaluation; } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/async/AsyncModelAccessManualService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/async/AsyncModelAccessManualService.java index ec8427119..af7dea98f 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/async/AsyncModelAccessManualService.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/async/AsyncModelAccessManualService.java @@ -2,27 +2,38 @@ package cn.iocoder.yudao.module.llm.service.async; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetAnswerRespVO; import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetQuestionRespVO; import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual.vo.ModelAssessTaskManualSaveReqVO; import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanualbackup.vo.ModelAssessTaskManualBackupSaveReqVO; +import cn.iocoder.yudao.module.llm.dal.dataobject.basemodel.BaseModelDO; +import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskauto.ModelAssessTaskAutoDO; +import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskautoinfo.ModelAssessTaskAutoInfoDO; import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskmanual.ManualModelAnswerDO; import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskmanual.ModelAssessTaskDimensionDO; import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskmanual.ModelAssessTaskManualDO; import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskmanualbackup.ManualModelAnswerBackupDO; import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskmanualbackup.ModelAssessTaskDimensionBackupDO; import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskmanualbackup.ModelAssessTaskManualBackupDO; +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.modelassesstaskauto.ModelAssessTaskAutoMapper; +import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskautoinfo.ModelAssessTaskAutoInfoMapper; import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskmanual.ManualModelAnswerMapper; import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskmanual.ModelAssessTaskDimensionMapper; import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskmanual.ModelAssessTaskManualMapper; import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskmanualbackup.ManualModelAnswerBackupMapper; import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskmanualbackup.ModelAssessTaskDimensionBackupMapper; +import cn.iocoder.yudao.module.llm.dal.mysql.modelservice.ModelServiceMapper; import cn.iocoder.yudao.module.llm.service.conversation.ConversationService; import cn.iocoder.yudao.module.llm.service.dataset.DatasetQuestionService; import cn.iocoder.yudao.module.llm.service.http.ModelService; +import cn.iocoder.yudao.module.llm.service.http.TrainHttpService; import cn.iocoder.yudao.module.llm.service.http.vo.ModelCompletionsReqVO; import cn.iocoder.yudao.module.llm.service.http.vo.ModelCompletionsRespVO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.hibernate.validator.internal.engine.constraintvalidation.PredefinedScopeConstraintValidatorManagerImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Async; @@ -30,6 +41,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; @Service @@ -38,8 +50,6 @@ public class AsyncModelAccessManualService { @Resource private ModelService modelService; @Resource - private ConversationService conversationService; - @Resource private DatasetQuestionService datasetQuestionService; @Resource private ManualModelAnswerMapper manualModelAnswerMapper; @@ -51,10 +61,119 @@ public class AsyncModelAccessManualService { private ModelAssessTaskDimensionBackupMapper modelAssessTaskDimensionBackupMapper; @Resource private ManualModelAnswerBackupMapper manualModelAnswerBackupMapper; + @Resource + private ModelAssessTaskAutoMapper modelAssessTaskAutoMapper; + @Resource + private TrainHttpService trainHttpService; + @Resource + private ModelServiceMapper modelServiceMapper; + @Resource + private BaseModelMapper baseModelMapper; + @Resource + private ModelAssessTaskAutoInfoMapper modelAssessTaskAutoInfoMapper; + @Async + public void auto(ModelAssessTaskAutoDO modelAssessTaskAuto) { + try { + List datasetQuestionList = datasetQuestionService.getDatasetQuestionList(modelAssessTaskAuto.getDataset()); + for (DatasetQuestionRespVO datasetQuestionRespVO : datasetQuestionList) { + String question = datasetQuestionRespVO.getQuestion(); + DatasetAnswerRespVO datasetAnswerRespVO = datasetQuestionRespVO.getDatasetAnswerRespVO().get(0); + String datasetPrompt = datasetAnswerRespVO.getAnswer(); + ModelCompletionsReqVO modelCompletionsReqVO = new ModelCompletionsReqVO(); + ModelCompletionsReqVO.ModelCompletionsMessage message = new ModelCompletionsReqVO.ModelCompletionsMessage(); + if (question != null){ + message.setContent(question); + } + message.setRole("user"); + List messages = new ArrayList<>(); + messages.add(message); + modelCompletionsReqVO.setMessages(messages); + ModelCompletionsRespVO modelCompletionsRespVO = modelService.modelCompletions(modelCompletionsReqVO); + String prompt = modelCompletionsRespVO.getAnswer(); + String res = trainHttpService.autoEvaluation(prompt, datasetPrompt); + + ModelAssessTaskAutoInfoDO infoDO = new ModelAssessTaskAutoInfoDO(); + infoDO.setPrompt(prompt); + infoDO.setDataSetPrompt(datasetPrompt); + infoDO.setQuestion(question); + + infoDO.setTaskId(modelAssessTaskAuto.getId()); + + if(modelAssessTaskAuto.getModelType() == 0){ + ModelServiceDO modelServiceDO = modelServiceMapper.selectById(modelAssessTaskAuto.getModelService()); + if (modelServiceDO != null){ + infoDO.setModelName(modelServiceDO.getServiceName()); + } + }else{ + BaseModelDO baseModelDO = baseModelMapper.selectById(modelAssessTaskAuto.getModelService()); + if (baseModelDO != null){ + infoDO.setModelName(baseModelDO.getModelName()); + } + } + + String[] split = res.split("\n"); + List list = new ArrayList<>(Arrays.asList(split)); + if(list.size() < 3){ + if(res.contains("good")){ + infoDO.setEmotionTendency(2); + infoDO.setFactualError(2); + infoDO.setSemanticsCoherence(2); + }else if(res.contains("same")){ + infoDO.setEmotionTendency(1); + infoDO.setFactualError(1); + infoDO.setSemanticsCoherence(1); + }else if(res.contains("bad")){ + infoDO.setEmotionTendency(0); + infoDO.setFactualError(0); + infoDO.setSemanticsCoherence(0); + } + }else{ + for (String s : list) { + if(s.contains("事实性错误")){ + if(s.contains("good")){ + infoDO.setFactualError(2); + }else if (s.contains("same")){ + infoDO.setFactualError(1); + }else if (s.contains("bad")){ + infoDO.setFactualError(0); + }; + }else if(s.contains("事实性错误")){ + if(s.contains("good")){ + infoDO.setSemanticsCoherence(2); + }else if (s.contains("same")){ + infoDO.setSemanticsCoherence(1); + }else if (s.contains("bad")){ + infoDO.setSemanticsCoherence(0); + }; + }else if(s.contains("情感倾向性")){ + if(s.contains("good")){ + infoDO.setEmotionTendency(2); + }else if (s.contains("same")){ + infoDO.setEmotionTendency(1); + }else if (s.contains("bad")){ + infoDO.setEmotionTendency(0); + }; + } + } + } + //评估结果: \n\n- 事实性错误: bad\n- 情感倾向性: same\n- 语义连贯性: same + //评估结果: \n- 事实性错误: bad\n- 情感倾向性: same\n- 语义连贯性: good + //事实性错误: bad \n情感倾向性: same \n语义连贯性: bad + //评估结果: good + modelAssessTaskAutoInfoMapper.insert(infoDO); + } + + modelAssessTaskAuto.setStatus(4); + modelAssessTaskAutoMapper.updateById(modelAssessTaskAuto); + }catch (Exception e){ + modelAssessTaskAuto.setStatus(5); + modelAssessTaskAutoMapper.updateById(modelAssessTaskAuto); + } + } @Async public void startModelAccess(ModelAssessTaskManualDO task) { diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/TrainHttpService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/TrainHttpService.java index 408d66464..cc9856d23 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/TrainHttpService.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/TrainHttpService.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.util.http.HttpUtils; import cn.iocoder.yudao.module.llm.framework.backend.config.LLMBackendProperties; import cn.iocoder.yudao.module.llm.service.http.vo.*; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import kong.unirest.HttpResponse; import kong.unirest.Unirest; import kong.unirest.UnirestException; @@ -21,8 +22,12 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.*; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 训练相关接口 @@ -214,6 +219,27 @@ public class TrainHttpService { return res; } + + public String autoEvaluation(String prompt,String dataSetPrompt) { + Map map = new HashMap<>(); + map.put("accept","application/json"); + map.put("Content-Type","application/json"); + String autoEvaluation = llmBackendProperties.getAutoEvaluation(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("prompt",prompt); + jsonObject.put("dataSetPrompt",dataSetPrompt); + List dimension = Stream.of("事实性错误","情感倾向性","语义连贯性").collect(Collectors.toList()); + jsonObject.put("dimension",dimension); + String body = JSONObject.toJSONString(jsonObject); + String res = HttpUtils.post(autoEvaluation, map, body); + log.info(" autoEvaluation:{}", res); + JSONObject resJson = JSONObject.parseObject(res); + JSONObject response = resJson.getJSONObject("response"); + String content = response.getString("content"); + return content; + + } + /** * 模型对话 POST */ @@ -222,6 +248,7 @@ public class TrainHttpService { String res = HttpUtils.post(finetuningCreate, headers, body); return res; } + public AigcRespVO modelDeploy(Map headers,AigcModelDeploySaveReq req,Long jobId){ login(headers); String modelDeploy = llmBackendProperties.getModelDeploy(); @@ -293,4 +320,5 @@ public class TrainHttpService { } } + } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskauto/ModelAssessTaskAutoServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskauto/ModelAssessTaskAutoServiceImpl.java index 9e27c7f06..02857d9d9 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskauto/ModelAssessTaskAutoServiceImpl.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskauto/ModelAssessTaskAutoServiceImpl.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.llm.service.modelassesstaskauto; import cn.iocoder.yudao.framework.common.exception.ErrorCode; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetQuestionRespVO; import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual.vo.ModelAssessTaskManualRespVO; import cn.iocoder.yudao.module.llm.dal.dataobject.basemodel.BaseModelDO; import cn.iocoder.yudao.module.llm.dal.dataobject.dataset.DatasetDO; @@ -18,6 +19,8 @@ import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskauto.ModelAssessTask import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskauto.ModelAssessTaskStoplistBackupMapper; import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskauto.ModelAssessTaskStoplistMapper; import cn.iocoder.yudao.module.llm.dal.mysql.modelservice.ModelServiceMapper; +import cn.iocoder.yudao.module.llm.service.async.AsyncModelAccessManualService; +import cn.iocoder.yudao.module.llm.service.dataset.DatasetQuestionService; import com.alibaba.druid.util.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -59,58 +62,63 @@ public class ModelAssessTaskAutoServiceImpl implements ModelAssessTaskAutoServic @Resource private DatasetMapper datasetMapper; @Resource - private ModelAssessStoplistMapper modelAssessStoplistMapper; - @Resource private BaseModelMapper baseModelMapper; @Resource private ModelAssessTaskAutoBackupMapper modelAssessTaskAutoBackupMapper; @Resource private ModelAssessTaskStoplistBackupMapper modelAssessTaskStoplistBackupMapper; + @Resource + private AsyncModelAccessManualService asyncModelAccessManualService; @Override public Long createModelAssessTaskAuto(ModelAssessTaskAutoSaveReqVO createReqVO) { // 插入 ModelAssessTaskAutoDO modelAssessTaskAuto = BeanUtils.toBean(createReqVO, ModelAssessTaskAutoDO.class); + modelAssessTaskAuto.setStatus(3); LambdaUpdateWrapper eq = new LambdaUpdateWrapper().eq(ModelAssessTaskAutoDO::getTaskName, createReqVO.getTaskName()); if (modelAssessTaskAutoMapper.selectCount(eq) > 0){ throw exception(new ErrorCode(11000,"任务名称重复")); } modelAssessTaskAutoMapper.insert(modelAssessTaskAuto); - List stoplists = createReqVO.getStoplists(); - if (!CollectionUtils.isEmpty(stoplists)){ - stoplists.stream().forEach(stoplist -> { - stoplist.setTaskId(modelAssessTaskAuto.getId()); - ModelAssessTaskStoplistDO modelAssessTaskStoplistDO = BeanUtils.toBean(stoplist,ModelAssessTaskStoplistDO.class); - modelingTaskStoplistMapper.insert(modelAssessTaskStoplistDO); - }); - } +// List stoplists = createReqVO.getStoplists(); +// if (!CollectionUtils.isEmpty(stoplists)){ +// stoplists.stream().forEach(stoplist -> { +// stoplist.setTaskId(modelAssessTaskAuto.getId()); +// ModelAssessTaskStoplistDO modelAssessTaskStoplistDO = BeanUtils.toBean(stoplist,ModelAssessTaskStoplistDO.class); +// modelingTaskStoplistMapper.insert(modelAssessTaskStoplistDO); +// }); +// } + + asyncModelAccessManualService.auto(modelAssessTaskAuto); // 返回 return modelAssessTaskAuto.getId(); } + + @Override public void updateModelAssessTaskAuto(ModelAssessTaskAutoSaveReqVO updateReqVO) { // 校验存在 validateModelAssessTaskAutoExists(updateReqVO.getId()); // 更新 ModelAssessTaskAutoDO updateObj = BeanUtils.toBean(updateReqVO, ModelAssessTaskAutoDO.class); - List stoplists = updateReqVO.getStoplists(); - if (!CollectionUtils.isEmpty(stoplists)){ - List stopIds = stoplists.stream().filter(stoplist -> stoplist.getId() != null) - .map(stoplist -> stoplist.getId()).collect(Collectors.toList()); - LambdaQueryWrapper wrapper = new LambdaQueryWrapper(); - wrapper.eq(ModelAssessTaskStoplistDO::getTaskId,updateReqVO.getId()); - if (!CollectionUtils.isEmpty(stopIds)){ - wrapper.notIn(ModelAssessTaskStoplistDO::getId,stopIds); - } - modelingTaskStoplistMapper.delete(wrapper); - stoplists.stream().forEach(stoplist -> { -// stoplist.setTaskId(updateObj.getId()); - ModelAssessTaskStoplistDO modelAssessTaskStoplistDO = BeanUtils.toBean(stoplist,ModelAssessTaskStoplistDO.class); - modelingTaskStoplistMapper.insertOrUpdate(modelAssessTaskStoplistDO); - }); - } +// List stoplists = updateReqVO.getStoplists(); +// if (!CollectionUtils.isEmpty(stoplists)){ +// List stopIds = stoplists.stream().filter(stoplist -> stoplist.getId() != null) +// .map(stoplist -> stoplist.getId()).collect(Collectors.toList()); +// LambdaQueryWrapper wrapper = new LambdaQueryWrapper(); +// wrapper.eq(ModelAssessTaskStoplistDO::getTaskId,updateReqVO.getId()); +// if (!CollectionUtils.isEmpty(stopIds)){ +// wrapper.notIn(ModelAssessTaskStoplistDO::getId,stopIds); +// } +// modelingTaskStoplistMapper.delete(wrapper); +// stoplists.stream().forEach(stoplist -> { +//// stoplist.setTaskId(updateObj.getId()); +// ModelAssessTaskStoplistDO modelAssessTaskStoplistDO = BeanUtils.toBean(stoplist,ModelAssessTaskStoplistDO.class); +// modelingTaskStoplistMapper.insertOrUpdate(modelAssessTaskStoplistDO); +// }); +// } modelAssessTaskAutoMapper.updateById(updateObj); } @@ -136,32 +144,39 @@ public class ModelAssessTaskAutoServiceImpl implements ModelAssessTaskAutoServic ModelAssessTaskAutoDO modelAssessTaskAutoDO = modelAssessTaskAutoMapper.selectById(id); ModelAssessTaskAutoRespVO result = BeanUtils.toBean(modelAssessTaskAutoDO, ModelAssessTaskAutoRespVO.class); - // 标注查询 - List modelAssessTaskStoplistDOS = modelingTaskStoplistMapper.selectList(new LambdaQueryWrapper() - .eq(ModelAssessTaskStoplistDO::getTaskId, id) - .eq(ModelAssessTaskStoplistDO::getDeleted, false)); - List stoplistRespVOS = BeanUtils.toBean(modelAssessTaskStoplistDOS, ModelAssessTaskStoplistRespVO.class); - // 提取id - List stoplistIds = modelAssessTaskStoplistDOS.stream().map(ModelAssessTaskStoplistDO::getStoplistId).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(stoplistIds)){ - // 查询停用词表 将词表word返回 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.in(ModelAssessStoplistDO::getId,stoplistIds); - List modelAssessStoplistDOs = modelAssessStoplistMapper.selectList(wrapper); - Map longModelServiceDOMap = cn.iocoder.yudao.framework.common.util.collection. - CollectionUtils.convertMap(modelAssessStoplistDOs, ModelAssessStoplistDO::getId); - stoplistRespVOS.stream().forEach(stoplistRespVO -> { - ModelAssessStoplistDO modelAssessStoplistDO = longModelServiceDOMap.get(stoplistRespVO.getStoplistId()); - if(modelAssessStoplistDO != null){ - stoplistRespVO.setStoplistName(modelAssessStoplistDO.getWord()); - } - }); - } - result.setStoplists(stoplistRespVOS); +// // 标注查询 +// List modelAssessTaskStoplistDOS = modelingTaskStoplistMapper.selectList(new LambdaQueryWrapper() +// .eq(ModelAssessTaskStoplistDO::getTaskId, id) +// .eq(ModelAssessTaskStoplistDO::getDeleted, false)); +// List stoplistRespVOS = BeanUtils.toBean(modelAssessTaskStoplistDOS, ModelAssessTaskStoplistRespVO.class); +// // 提取id +// List stoplistIds = modelAssessTaskStoplistDOS.stream().map(ModelAssessTaskStoplistDO::getStoplistId).collect(Collectors.toList()); +// if (!CollectionUtils.isEmpty(stoplistIds)){ +// // 查询停用词表 将词表word返回 +// LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); +// wrapper.in(ModelAssessStoplistDO::getId,stoplistIds); +// List modelAssessStoplistDOs = modelAssessStoplistMapper.selectList(wrapper); +// Map longModelServiceDOMap = cn.iocoder.yudao.framework.common.util.collection. +// CollectionUtils.convertMap(modelAssessStoplistDOs, ModelAssessStoplistDO::getId); +// stoplistRespVOS.stream().forEach(stoplistRespVO -> { +// ModelAssessStoplistDO modelAssessStoplistDO = longModelServiceDOMap.get(stoplistRespVO.getStoplistId()); +// if(modelAssessStoplistDO != null){ +// stoplistRespVO.setStoplistName(modelAssessStoplistDO.getWord()); +// } +// }); +// } +// result.setStoplists(stoplistRespVOS); - ModelServiceDO modelServiceDO = modelServiceMapper.selectById(modelAssessTaskAutoDO.getModelService()); - if (modelServiceDO != null){ - result.setModelServiceName(modelServiceDO.getServiceName()); + if(modelAssessTaskAutoDO.getModelType() == 0){ + ModelServiceDO modelServiceDO = modelServiceMapper.selectById(modelAssessTaskAutoDO.getModelService()); + if (modelServiceDO != null){ + result.setModelServiceName(modelServiceDO.getServiceName()); + } + }else{ + BaseModelDO baseModelDO = baseModelMapper.selectById(modelAssessTaskAutoDO.getModelService()); + if (baseModelDO != null){ + result.setModelServiceName(baseModelDO.getModelName()); + } } DatasetDO datasetDO = datasetMapper.selectById(modelAssessTaskAutoDO.getDataset()); if (datasetDO != null){ diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskautoinfo/ModelAssessTaskAutoInfoService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskautoinfo/ModelAssessTaskAutoInfoService.java new file mode 100644 index 000000000..d605ee53f --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskautoinfo/ModelAssessTaskAutoInfoService.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.module.llm.service.modelassesstaskautoinfo; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskauto.vo.ModelAssessTaskAutoInfoPageReqVO; +import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskauto.vo.ModelAssessTaskAutoInfoSaveReqVO; +import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskautoinfo.ModelAssessTaskAutoInfoDO; + +import javax.validation.Valid; +import java.util.List; + +/** + * 模型评估任务 —— 自动评估-详细内容 Service 接口 + * + * @author 华大大模型 + */ +public interface ModelAssessTaskAutoInfoService { + + /** + * 创建模型评估任务 —— 自动评估-详细内容 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createModelAssessTaskAutoInfo(@Valid ModelAssessTaskAutoInfoSaveReqVO createReqVO); + + /** + * 更新模型评估任务 —— 自动评估-详细内容 + * + * @param updateReqVO 更新信息 + */ + void updateModelAssessTaskAutoInfo(@Valid ModelAssessTaskAutoInfoSaveReqVO updateReqVO); + + /** + * 删除模型评估任务 —— 自动评估-详细内容 + * + * @param id 编号 + */ + void deleteModelAssessTaskAutoInfo(Long id); + + /** + * 获得模型评估任务 —— 自动评估-详细内容 + * + * @param id 编号 + * @return 模型评估任务 —— 自动评估-详细内容 + */ + ModelAssessTaskAutoInfoDO getModelAssessTaskAutoInfo(Long id); + + /** + * 获得模型评估任务 —— 自动评估-详细内容分页 + * + * @param pageReqVO 分页查询 + * @return 模型评估任务 —— 自动评估-详细内容分页 + */ + PageResult getModelAssessTaskAutoInfoPage(ModelAssessTaskAutoInfoPageReqVO pageReqVO); + + List getListByTaskId(ModelAssessTaskAutoInfoPageReqVO pageReqVO); + + +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskautoinfo/ModelAssessTaskAutoInfoServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskautoinfo/ModelAssessTaskAutoInfoServiceImpl.java new file mode 100644 index 000000000..5e565fbce --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelassesstaskautoinfo/ModelAssessTaskAutoInfoServiceImpl.java @@ -0,0 +1,71 @@ +package cn.iocoder.yudao.module.llm.service.modelassesstaskautoinfo; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskauto.vo.ModelAssessTaskAutoInfoPageReqVO; +import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskauto.vo.ModelAssessTaskAutoInfoSaveReqVO; +import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskautoinfo.ModelAssessTaskAutoInfoDO; +import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskautoinfo.ModelAssessTaskAutoInfoMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 模型评估任务 —— 自动评估-详细内容 Service 实现类 + * + * @author 华大大模型 + */ +@Service +@Validated +public class ModelAssessTaskAutoInfoServiceImpl implements ModelAssessTaskAutoInfoService { + + @Resource + private ModelAssessTaskAutoInfoMapper modelAssessTaskAutoInfoMapper; + + @Override + public Long createModelAssessTaskAutoInfo(ModelAssessTaskAutoInfoSaveReqVO createReqVO) { + // 插入 + ModelAssessTaskAutoInfoDO modelAssessTaskAutoInfo = BeanUtils.toBean(createReqVO, ModelAssessTaskAutoInfoDO.class); + modelAssessTaskAutoInfoMapper.insert(modelAssessTaskAutoInfo); + // 返回 + return modelAssessTaskAutoInfo.getId(); + } + + @Override + public void updateModelAssessTaskAutoInfo(ModelAssessTaskAutoInfoSaveReqVO updateReqVO) { + // 更新 + ModelAssessTaskAutoInfoDO updateObj = BeanUtils.toBean(updateReqVO, ModelAssessTaskAutoInfoDO.class); + modelAssessTaskAutoInfoMapper.updateById(updateObj); + } + + @Override + public void deleteModelAssessTaskAutoInfo(Long id) { + // 删除 + modelAssessTaskAutoInfoMapper.deleteById(id); + } + + + + @Override + public ModelAssessTaskAutoInfoDO getModelAssessTaskAutoInfo(Long id) { + return modelAssessTaskAutoInfoMapper.selectById(id); + } + + @Override + public PageResult getModelAssessTaskAutoInfoPage(ModelAssessTaskAutoInfoPageReqVO pageReqVO) { + return modelAssessTaskAutoInfoMapper.selectPage(pageReqVO); + } + + @Override + public List getListByTaskId(ModelAssessTaskAutoInfoPageReqVO pageReqVO) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ModelAssessTaskAutoInfoDO::getTaskId,pageReqVO.getTaskId()); + return modelAssessTaskAutoInfoMapper.selectList(queryWrapper); + + + } + +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/utils/HammingUtils.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/utils/HammingUtils.java index 40b96187e..fce017047 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/utils/HammingUtils.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/utils/HammingUtils.java @@ -8,7 +8,7 @@ import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.List; -/** +/**z * @Description : 海明距离算法 */ @Slf4j diff --git a/yudao-server/src/main/resources/application-dev.yaml b/yudao-server/src/main/resources/application-dev.yaml index f31343242..c93e9ce6b 100644 --- a/yudao-server/src/main/resources/application-dev.yaml +++ b/yudao-server/src/main/resources/application-dev.yaml @@ -264,9 +264,9 @@ llm: # aigc模型推理 aigc_model_completions: http://36.133.1.230:8080/api/channels/chat/completions - application_api: http://localhost:48100/admin-app/llm/application/api/apiKey/chat + application_api: http://xhllm.xinnuojinzhi.com/admin-app/llm/application/api/apiKey/chat - model_service_api: http://localhost:48100/admin-app/llm/model-service/api/apiKey/chat + model_service_api: http://xhllm.xinnuojinzhi.com/admin-app/llm/model-service/api/apiKey/chat model_file_list: http://36.133.1.230:5123/models/?path= @@ -274,6 +274,8 @@ llm: # 提示词优化 optimize_prompt: http://36.133.1.230:5123/optimize-prompt + auto_evaluation: http://36.133.1.230:5123/llm-eval + --- #################### iot相关配置 TODO 芋艿:再瞅瞅 #################### iot: diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index 3c640554e..b3213ae61 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -316,6 +316,8 @@ llm: # 提示词优化 optimize_prompt: http://36.133.1.230:5123/optimize-prompt + auto_evaluation: http://36.133.1.230:5123/llm-eval + --- #################### iot相关配置 TODO 芋艿:再瞅瞅 #################### iot: emq: