From 5700df8687f1daa6e3567e01dadeac1ebf84db6c Mon Sep 17 00:00:00 2001 From: sunxiqing <2240398334@qq.com> Date: Fri, 14 Mar 2025 17:43:37 +0800 Subject: [PATCH] =?UTF-8?q?feat(llm):=20=E6=B7=BB=E5=8A=A0=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=9F=BA=E5=BA=A7=E6=A8=A1=E5=9E=8B=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E6=A8=A1=E5=9E=8B=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 BaseModelController 中添加删除基座模型的接口 - 在 BaseModelService 中实现删除基座模型的方法 - 更新 ModelServiceTaskService 中的模型状态刷新逻辑 - 在 ModelServiceRespVO 中添加基座模型的 API 地址和密钥字段 - 更新 ModelServiceServiceImpl 中的模型服务创建和状态更新逻辑 --- .../admin/basemodel/BaseModelController.java | 7 ++++++ .../modelservice/vo/ModelServiceRespVO.java | 6 +++++ .../backend/config/LLMBackendProperties.java | 2 ++ .../service/basemodel/BaseModelService.java | 4 ++++ .../basemodel/BaseModelServiceImpl.java | 15 ++++++++++++ .../basemodel/BaseModelTaskService.java | 13 ++++++----- .../modelservice/ModelServiceServiceImpl.java | 23 ++++++++++++------- .../src/main/resources/application-local.yaml | 2 ++ .../src/main/resources/application-ymx.yaml | 2 ++ 9 files changed, 60 insertions(+), 14 deletions(-) diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/basemodel/BaseModelController.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/basemodel/BaseModelController.java index 0fe2c13bb..b57f0f10a 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/basemodel/BaseModelController.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/basemodel/BaseModelController.java @@ -82,6 +82,13 @@ public class BaseModelController { return success(BeanUtils.toBean(pageResult, BaseModelRespVO.class)); } + @DeleteMapping("/deleteTheModel") + @Operation(summary = "删除基座模型") + public CommonResult deleteTheModel(@Valid BaseModelPageReqVO pageReqVO) { + baseModelService.deleteTheModel(pageReqVO); + return success(true); + } + @DeleteMapping("/delete") @Operation(summary = "删除基座模型") @Parameter(name = "id", description = "编号", required = true) diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/vo/ModelServiceRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/vo/ModelServiceRespVO.java index b0c18eb99..3b936c8fb 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/vo/ModelServiceRespVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/vo/ModelServiceRespVO.java @@ -72,4 +72,10 @@ public class ModelServiceRespVO { @Schema(description = "模型版本号", example = "1.0.0") @ExcelProperty("版本号") private String version; + + @Schema(description = "api地址") + private String BaseApiUrl; + + @Schema(description = "api秘钥") + private String BaseApiKey; } 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 5f06d130d..bcbfae6e5 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 @@ -120,6 +120,8 @@ public class LLMBackendProperties { private String aListOfAvailableModels; + private String deleteTheModel; + /** * 知识库向量嵌入 */ diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelService.java index a7feeaa50..6768e8e43 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelService.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelService.java @@ -82,4 +82,8 @@ public interface BaseModelService { List selectList(LambdaQueryWrapper select); List selectBatchIds(List ids); + + BaseModelDO getById(Long fineTuningTask); + + void deleteTheModel(BaseModelPageReqVO pageReqVO); } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelServiceImpl.java index 48b198023..27dd2d1e8 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelServiceImpl.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelServiceImpl.java @@ -210,6 +210,21 @@ public class BaseModelServiceImpl implements BaseModelService { return baseModelMapper.selectBatchIds(ids); } + @Override + public BaseModelDO getById(Long fineTuningTask) { + return baseModelMapper.selectById(fineTuningTask); + } + + @Override + public void deleteTheModel(BaseModelPageReqVO pageReqVO) { + try { + String resStr = HttpUtils.post(llmBackendProperties.getDeleteTheModel()+"?model_name ="+pageReqVO.getModelName(), null, ""); + log.info(" unActive:{}", resStr); + }catch (Exception e){ + log.error("禁用基础模型状态时发生异常: {}", e.getMessage(), e); + } + } + /** * 校验模型使用情况 * diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelTaskService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelTaskService.java index 1953495fe..b947a2d4c 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelTaskService.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelTaskService.java @@ -249,7 +249,7 @@ public class BaseModelTaskService { } -// @Scheduled(cron = "0 0/5 * * * ?") + @Scheduled(cron = "0 0/1 * * * ?") public void refreshTheModelService() { try { // 获取所有基础模型列表 @@ -268,11 +268,12 @@ public class BaseModelTaskService { .collect(Collectors.toCollection(HashSet::new)) .stream() .collect(Collectors.toList()); + //如果状态启动中没起来将状态变为停止 List differentModels = modelServiceDOS.stream() - .filter(baseModel -> !remoteModelNames.contains(baseModel.getBaseModelName()) && baseModel.getStatus() == 2) + .filter(baseModel -> !remoteModelNames.contains(baseModel.getBaseModelName()) && (baseModel.getStatus() == 4 || baseModel.getStatus() == 2)) .collect(Collectors.toList()); for (ModelServiceDO baseModel : differentModels){ - baseModel.setStatus(1); + baseModel.setStatus(3); } if (differentModels.size()>0) { modelServiceMapper.updateById(differentModels); @@ -298,12 +299,12 @@ public class BaseModelTaskService { // 如果状态不是 "running",更新本地状态 if (!"running".equals(pedestalModelVo.getStatus())) { log.info("更新模型状态,模型名称: {}, 状态: {}", pedestalModelVo.getDeploymentName(), pedestalModelVo.getStatus()); - localModel.setStatus(1); + localModel.setStatus(3); localModel.setJobId((long) pedestalModelVo.getId()); modelServiceMapper.updateById(localModel); } else { String string1 = pedestalModelVo.getHost() + "/v1/chat/completions"; - localModel.setStatus(2); + localModel.setStatus(4); localModel.setModelUrl(string1); // localModel.setApiUrl(string1); localModel.setJobId((long) pedestalModelVo.getId()); @@ -329,7 +330,7 @@ public class BaseModelTaskService { if (localModels != null && localModels.size() > 0) { ModelServiceDO localModel = localModels.get(0); // 如果状态不是 "running",更新本地状态 - localModel.setStatus(1); + localModel.setStatus(3); modelServiceMapper.updateById(localModel); } } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelservice/ModelServiceServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelservice/ModelServiceServiceImpl.java index 1c1f5767b..9db50e1dd 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelservice/ModelServiceServiceImpl.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelservice/ModelServiceServiceImpl.java @@ -96,7 +96,7 @@ public class ModelServiceServiceImpl implements ModelServiceService { queryWrapper.eq(ModelServiceDO::getFineTuningTask, createReqVO.getFineTuningTask()); List modelServiceDOS = modelServiceMapper.selectList(queryWrapper); if (modelServiceDOS.size() > 0) { - throw exception(new ErrorCode(10003_001, "该微调任务已生成过模型服务,不可再生成")); + throw exception(new ErrorCode(10003_001, "该基座模型已生成过模型服务,不可再生成")); } // 插入 @@ -119,10 +119,10 @@ public class ModelServiceServiceImpl implements ModelServiceService { modelService.setApiUrl(replace); modelService.setStatus(0); -// BaseModelDO byAigcId = baseModelService.getByAigcId(modelService.getFineTuningTask()); -// if (byAigcId != null){ -// modelService.setBaseModelName(byAigcId.getModelName()); -// } + BaseModelDO byAigcId = baseModelService.getById(modelService.getFineTuningTask()); + if (byAigcId != null){ + modelService.setBaseModelName(byAigcId.getModelName()); + } modelServiceMapper.insert(modelService); // asyncModelServiceService.createModelService(modelService); // 返回 @@ -327,6 +327,8 @@ public class ModelServiceServiceImpl implements ModelServiceService { BaseModelDO fineTuningTaskDO = fineTuningTaskMap.get(item.getFineTuningTask()); if (fineTuningTaskDO != null) { item.setFineTuningTaskName(fineTuningTaskDO.getModelName()); + item.setBaseApiUrl(fineTuningTaskDO.getApiUrl()); + item.setBaseApiKey(fineTuningTaskDO.getApiKey()); } }); } @@ -443,11 +445,13 @@ public class ModelServiceServiceImpl implements ModelServiceService { public void startTheModel(ModelServiceSaveReqVO updateReqVO) { try { Long fineTuningTask = updateReqVO.getFineTuningTask(); - BaseModelDO byAigcId = baseModelService.getByAigcId(fineTuningTask); + BaseModelDO byAigcId = baseModelService.getById(fineTuningTask); Map map = new HashMap<>(); map.put("model",byAigcId.getModelName()); String resStr = HttpUtils.post(llmBackendProperties.getDeployModel(), null,JSON.toJSONString(map)); - + ModelServiceDO updateObj = BeanUtils.toBean(updateReqVO, ModelServiceDO.class); + updateObj.setStatus(2); + modelServiceMapper.updateById(updateObj); }catch (Exception e){ log.error("启动基础模型状态时发生异常: {}", e.getMessage(), e); } @@ -457,9 +461,12 @@ public class ModelServiceServiceImpl implements ModelServiceService { public void disableTheModel(ModelServiceSaveReqVO updateReqVO) { try { Long fineTuningTask = updateReqVO.getFineTuningTask(); - BaseModelDO byAigcId = baseModelService.getByAigcId(fineTuningTask); + BaseModelDO byAigcId = baseModelService.getById(fineTuningTask); String resStr = HttpUtils.post(llmBackendProperties.getDeleteModel()+"?deploy_id="+byAigcId.getModelId(), null, ""); log.info(" unActive:{}", resStr); + ModelServiceDO updateObj = BeanUtils.toBean(updateReqVO, ModelServiceDO.class); + updateObj.setStatus(3); + modelServiceMapper.updateById(updateObj); // 禁用模型 }catch (Exception e){ log.error("禁用基础模型状态时发生异常: {}", e.getMessage(), e); diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index 9ddaf0153..19c187cc3 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -336,6 +336,8 @@ llm: delete_model: http://36.103.199.248:5123/llm/deploy/stop # 模型列表 get a_list_of_available_models: http://36.103.199.248:5123/llm/list + #删除模型 + delete_the_model: http://36.103.199.248:5123/delete-model #################### 30000: 大模型对话相关API。 ################### #### 大模型对话 diff --git a/yudao-server/src/main/resources/application-ymx.yaml b/yudao-server/src/main/resources/application-ymx.yaml index da75e7772..ff3281ef3 100644 --- a/yudao-server/src/main/resources/application-ymx.yaml +++ b/yudao-server/src/main/resources/application-ymx.yaml @@ -336,6 +336,8 @@ llm: delete_model: http://127.0.0.1:5123/llm/deploy/stop # 模型列表 get a_list_of_available_models: http://127.0.0.1:5123/llm/list + #删除模型 + delete_the_model: http://127.0.0.1:5123/delete-model #################### 30000: 大模型对话相关API。 ################### #### 大模型对话