diff --git a/yudao-module-llm/yudao-module-llm-api/src/main/java/cn/iocoder/yudao/module/llm/enums/ErrorCodeConstants.java b/yudao-module-llm/yudao-module-llm-api/src/main/java/cn/iocoder/yudao/module/llm/enums/ErrorCodeConstants.java index 7bb531fbe..f8c5eeb80 100644 --- a/yudao-module-llm/yudao-module-llm-api/src/main/java/cn/iocoder/yudao/module/llm/enums/ErrorCodeConstants.java +++ b/yudao-module-llm/yudao-module-llm-api/src/main/java/cn/iocoder/yudao/module/llm/enums/ErrorCodeConstants.java @@ -91,10 +91,17 @@ public interface ErrorCodeConstants { ErrorCode PROMPT_TEMPLATES_APPLICATIONS_BACKUP_NOT_EXISTS = new ErrorCode(10036, "模板信息不存在"); ErrorCode PROMPT_TEMPLATES_TAGS_BACKUP_NOT_EXISTS = new ErrorCode(10037, "模板信息不存在"); + ErrorCode DATA_PROCESS_TASK_NAME_NOT_EXISTS = new ErrorCode(10038, "数据处理任务名称已存在"); + ErrorCode FINE_TUNING_TASK_NAME_NOT_EXISTS = new ErrorCode(10039, "模型调优任务名称已存在"); - ErrorCode LEARNING_RESOURCES_NAME_NOT_EXISTS = new ErrorCode(10041, "学习资源标题名称已存在"); - ErrorCode KNOWLEDGE_BASE_NAME_NOT_EXISTS = new ErrorCode(10042, "知识库名称已存在"); + + ErrorCode LEARNING_RESOURCES_NAME_NOT_EXISTS = new ErrorCode(10040, "学习资源标题名称已存在"); + + ErrorCode KNOWLEDGE_BASE_NAME_NOT_EXISTS = new ErrorCode(10040, "知识库名称已存在"); + + ErrorCode APPLICATION_NAME_NOT_EXISTS = new ErrorCode(10041, "应用中心名称已存在"); + ErrorCode MODEL_SERVIC_ENAME_NOT_EXISTS = new ErrorCode(10043, "模型名称已存在"); diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/application/ApplicationController.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/application/ApplicationController.java index 49c59977f..5a88f157d 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/application/ApplicationController.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/application/ApplicationController.java @@ -112,8 +112,8 @@ public class ApplicationController { public CommonResult apiChat(@PathVariable("apiKey") String apiKey,@RequestBody ChatApiReqVO chatReqVO){ ApplicationDO applicationDO = applicationService.getByApiKey(apiKey); chatReqVO.setApplicationId(applicationDO.getId()); - chatReqVO.setModelId(applicationDO.getModelServiceId()); - chatReqVO.setModelType(chatReqVO.getModelType()); + chatReqVO.setModelId(applicationDO.getAppModel()); + chatReqVO.setModelType(applicationDO.getAppModelType()); ChatReqVO bean = BeanUtils.toBean(chatReqVO, ChatReqVO.class); ChatRespVO chat = conversationService.chat(bean); diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/ModelServiceController.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/ModelServiceController.java index 13803b277..76de50ab8 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/ModelServiceController.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/ModelServiceController.java @@ -1,5 +1,12 @@ package cn.iocoder.yudao.module.llm.controller.admin.modelservice; +import cn.iocoder.yudao.module.llm.controller.admin.conversation.vo.ChatApiReqVO; +import cn.iocoder.yudao.module.llm.controller.admin.conversation.vo.ChatReqVO; +import cn.iocoder.yudao.module.llm.controller.admin.conversation.vo.ChatRespVO; +import cn.iocoder.yudao.module.llm.controller.admin.finetuningtask.vo.FineTuningTaskRespVO; +import cn.iocoder.yudao.module.llm.dal.dataobject.application.ApplicationDO; +import cn.iocoder.yudao.module.llm.service.conversation.ConversationService; +import cn.iocoder.yudao.module.llm.service.finetuningtask.FineTuningTaskService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -8,6 +15,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Operation; +import javax.annotation.security.PermitAll; import javax.validation.constraints.*; import javax.validation.*; import javax.servlet.http.*; @@ -37,6 +45,10 @@ public class ModelServiceController { @Resource private ModelServiceService modelServiceService; + @Resource + private FineTuningTaskService fineTuningTaskService; + @Resource + private ConversationService conversationService; @PostMapping("/create") @Operation(summary = "创建模型服务") @@ -117,4 +129,18 @@ public class ModelServiceController { BeanUtils.toBean(list, ModelServiceRespVO.class)); } + @PermitAll + @PostMapping("/api/{apiKey}/chat") + @Operation(summary = "api对话接口") + public CommonResult apiChat(@PathVariable("apiKey") String apiKey, @RequestBody ChatApiReqVO chatReqVO){ + ModelServiceDO byApiKey = modelServiceService.getByApiKey(apiKey); + Long fineTuningTaskId = byApiKey.getFineTuningTask(); + FineTuningTaskRespVO fineTuningTask = fineTuningTaskService.getFineTuningTask(fineTuningTaskId); + chatReqVO.setModelId(fineTuningTask.getBaseModelId()); + chatReqVO.setModelType(0); + ChatReqVO bean = BeanUtils.toBean(chatReqVO, ChatReqVO.class); + ChatRespVO chat = conversationService.chat(bean); + return success(chat); + } + } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/vo/ModelServicePageReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/vo/ModelServicePageReqVO.java index f0a8e6c14..1d3545b30 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/vo/ModelServicePageReqVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/vo/ModelServicePageReqVO.java @@ -37,4 +37,10 @@ public class ModelServicePageReqVO extends PageParam { @Schema(description = "模型服务状态,使用字典(llm_model_status)", example = "1") private Integer status; + @Schema(description = "apiKey", example = "123") + private String apiKey; + + @Schema(description = "apiUrl", example = "www.sdada.com") + private String apiUrl; + } 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 292280546..9eb417bdc 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 @@ -60,4 +60,9 @@ public class ModelServiceRespVO { */ private Long jobId; + @Schema(description = "apiKey", example = "123") + private String apiKey; + + @Schema(description = "apiUrl", example = "www.sdada.com") + private String apiUrl; } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/vo/ModelServiceSaveReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/vo/ModelServiceSaveReqVO.java index 2da63416a..498958675 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/vo/ModelServiceSaveReqVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/modelservice/vo/ModelServiceSaveReqVO.java @@ -33,4 +33,11 @@ public class ModelServiceSaveReqVO { private Integer status; private Long jobId; + @Schema(description = "apiKey", example = "123") + private String apiKey; + + @Schema(description = "apiUrl", example = "www.sdada.com") + private String apiUrl; + + } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/modelservice/ModelServiceDO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/modelservice/ModelServiceDO.java index 6f828ca4d..964c75a59 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/modelservice/ModelServiceDO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/modelservice/ModelServiceDO.java @@ -62,4 +62,8 @@ public class ModelServiceDO extends BaseDO { */ private Long jobId; + private String apiKey; + + private String apiUrl; + } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/application/ApplicationMapper.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/application/ApplicationMapper.java index 6ad555966..1a803d597 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/application/ApplicationMapper.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/application/ApplicationMapper.java @@ -27,4 +27,5 @@ public interface ApplicationMapper extends BaseMapperX { .orderByDesc(ApplicationDO::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 f445704d3..9280bdf0d 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 @@ -83,4 +83,6 @@ public class LLMBackendProperties { private String modelUndeploy; + + private String modelServiceApi; } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/application/ApplicationServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/application/ApplicationServiceImpl.java index 3105c37e5..3c0f0ee1d 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/application/ApplicationServiceImpl.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/application/ApplicationServiceImpl.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.llm.service.application; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.llm.controller.admin.application.vo.ApplicationPageReqVO; import cn.iocoder.yudao.module.llm.controller.admin.application.vo.ApplicationRespVO; import cn.iocoder.yudao.module.llm.controller.admin.application.vo.ApplicationSaveReqVO; @@ -29,7 +30,7 @@ import java.util.Random; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.llm.enums.ErrorCodeConstants.APPLICATION_NOT_EXISTS; +import static cn.iocoder.yudao.module.llm.enums.ErrorCodeConstants.*; /** * 大模型应用 Service 实现类 @@ -58,6 +59,14 @@ public class ApplicationServiceImpl implements ApplicationService { @Override public Long createApplication(ApplicationSaveReqVO createReqVO) { + + String appName = createReqVO.getAppName(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapperX<>(); + queryWrapper.eq(ApplicationDO::getAppName,appName); + List applicationDOS = applicationMapper.selectList(queryWrapper); + if(applicationDOS.size() > 0){ + throw exception(APPLICATION_NAME_NOT_EXISTS); + } // 插入 ApplicationDO application = BeanUtils.toBean(createReqVO, ApplicationDO.class); String apikey = getApikey(); diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelservice/ModelServiceService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelservice/ModelServiceService.java index cd340d062..bd385de6d 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelservice/ModelServiceService.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelservice/ModelServiceService.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.llm.service.modelservice; import java.util.*; import javax.validation.*; import cn.iocoder.yudao.module.llm.controller.admin.modelservice.vo.*; +import cn.iocoder.yudao.module.llm.dal.dataobject.application.ApplicationDO; import cn.iocoder.yudao.module.llm.dal.dataobject.modelservice.ModelServiceDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; @@ -63,4 +64,6 @@ public interface ModelServiceService { void unactive(ModelServiceSaveReqVO updateReqVO); PageResult getModelServicePage1(ModelServicePageReqVO pageReqVO); + + ModelServiceDO getByApiKey(String apiKey); } 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 b47fcfb24..d3ce76402 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 @@ -1,29 +1,30 @@ package cn.iocoder.yudao.module.llm.service.modelservice; +import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.module.llm.dal.dataobject.dataset.DatasetDO; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.llm.controller.admin.modelservice.vo.ModelServicePageReqVO; +import cn.iocoder.yudao.module.llm.controller.admin.modelservice.vo.ModelServiceRespVO; +import cn.iocoder.yudao.module.llm.controller.admin.modelservice.vo.ModelServiceSaveReqVO; import cn.iocoder.yudao.module.llm.dal.dataobject.finetuningtask.FineTuningTaskDO; +import cn.iocoder.yudao.module.llm.dal.dataobject.modelservice.ModelServiceDO; import cn.iocoder.yudao.module.llm.dal.mysql.finetuningtask.FineTuningTaskMapper; +import cn.iocoder.yudao.module.llm.dal.mysql.modelservice.ModelServiceMapper; +import cn.iocoder.yudao.module.llm.framework.backend.config.LLMBackendProperties; import cn.iocoder.yudao.module.llm.service.async.AsyncModelServiceService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.stereotype.Service; -import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; -import java.util.*; +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Random; import java.util.stream.Collectors; -import cn.iocoder.yudao.module.llm.controller.admin.modelservice.vo.*; -import cn.iocoder.yudao.module.llm.dal.dataobject.modelservice.ModelServiceDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.llm.dal.mysql.modelservice.ModelServiceMapper; - import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.llm.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.module.llm.enums.ErrorCodeConstants.MODEL_SERVICE_NOT_EXISTS; +import static cn.iocoder.yudao.module.llm.enums.ErrorCodeConstants.MODEL_SERVIC_ENAME_NOT_EXISTS; /** * 模型服务 Service 实现类 @@ -39,20 +40,50 @@ public class ModelServiceServiceImpl implements ModelServiceService { @Resource private AsyncModelServiceService asyncModelServiceService; + @Resource private FineTuningTaskMapper fineTuningTaskMapper; + @Resource + private LLMBackendProperties llmBackendProperties; + + @Override public Long createModelService(ModelServiceSaveReqVO createReqVO) { // 插入 validateModelServiceNameExists(createReqVO); ModelServiceDO modelService = BeanUtils.toBean(createReqVO, ModelServiceDO.class); + + // 插入 + String apikey = getApikey(); + modelService.setApiKey(apikey); + String replace = llmBackendProperties.getApplicationApi().replace("apiKey", apikey); + modelService.setApiUrl(replace); + modelServiceMapper.insert(modelService); asyncModelServiceService.createModelService(modelService); // 返回 return modelService.getId(); } + public String getApikey() { + Random random = new Random(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 30; i++) { + // 生成一个随机的大小写字母 + char c = (char) (random.nextBoolean() ? // 随机选择大小写 + 'A' + random.nextInt(26) : // 生成大写字母 + 'a' + random.nextInt(26)); // 生成小写字母 + sb.append(c); + } + Long count = modelServiceMapper.selectCount(new LambdaQueryWrapper() + .eq(ModelServiceDO::getApiKey, sb.toString())); + if (count > 0) { + getApikey(); + } + return sb.toString(); + } + @Override public void updateModelService(ModelServiceSaveReqVO updateReqVO) { // 校验存在 @@ -146,4 +177,11 @@ public class ModelServiceServiceImpl implements ModelServiceService { return respVo; } + @Override + public ModelServiceDO getByApiKey(String apiKey) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ModelServiceDO::getApiKey,apiKey); + return modelServiceMapper.selectOne(queryWrapper); + } + } diff --git a/yudao-server/src/main/resources/application-dev.yaml b/yudao-server/src/main/resources/application-dev.yaml index 8eeffc635..1b325ec88 100644 --- a/yudao-server/src/main/resources/application-dev.yaml +++ b/yudao-server/src/main/resources/application-dev.yaml @@ -261,6 +261,8 @@ llm: application_api: http://localhost:48100/admin-app/llm/application/api/apiKey/chat + model_service_api : http://localhost:48100/admin-app/llm/model-service/api/apiKey/chat + --- #################### iot相关配置 TODO 芋艿:再瞅瞅 #################### iot: emq: diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index 09993a38c..62560df53 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -303,6 +303,8 @@ llm: application_api: http://localhost:48080/admin-app/llm/application/api/apiKey/chat + model_service_api : http://localhost:48080/admin-app/llm/model-service/api/apiKey/chat + --- #################### iot相关配置 TODO 芋艿:再瞅瞅 #################### iot: emq: