From 7b99cc41a521bac1737389bb809a5a2feb8b8a69 Mon Sep 17 00:00:00 2001 From: Liuyang <2746366019@qq.com> Date: Fri, 14 Mar 2025 16:58:35 +0800 Subject: [PATCH] =?UTF-8?q?refactor(llm):=20=E4=BC=98=E5=8C=96=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=88=9B=E5=BB=BA=E5=92=8C=E6=9B=B4=E6=96=B0=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E5=A2=9E=E5=8A=A0=E7=B3=BB=E7=BB=9F=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E5=92=8C=E7=9F=A5=E8=AF=86=E5=BA=93=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在创建和更新应用时,增加了对系统提示的非空校验和空值处理 - 在获取应用信息时,增加了对 prompt、modelServiceId 和 promptId 的非空赋值 - 在会话创建和聊天请求中,增加了对知识库 ID 和系统提示的处理逻辑- 优化了日志输出,增加了对系统提示更新的记录 --- .../application/ApplicationServiceImpl.java | 24 ++++++++++++++++--- .../conversation/ConversationServiceImpl.java | 18 ++++++++++++-- 2 files changed, 37 insertions(+), 5 deletions(-) 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 d26bb923b..804490bc8 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 @@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -69,6 +70,7 @@ public class ApplicationServiceImpl implements ApplicationService { @Override public Long createApplication (ApplicationSaveReqVO createReqVO) { + // 获取名称并且校验是否重复 String appName = createReqVO.getAppName(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapperX<>(); queryWrapper.eq(ApplicationDO::getAppName, appName); @@ -76,13 +78,16 @@ public class ApplicationServiceImpl implements ApplicationService { if (applicationDOS.size() > 0) { throw exception(APPLICATION_NAME_NOT_EXISTS); } + // 插入 ApplicationDO application = BeanUtils.toBean(createReqVO, ApplicationDO.class); String apikey = getApikey(); application.setApiKey(apikey); String replace = llmBackendProperties.getApplicationApi().replace("apiKey", apikey); application.setApiUrl(replace); - application.setPrompt(createReqVO.getSystemPrompt()); + if (!StringUtils.isBlank(createReqVO.getSystemPrompt())){ + application.setPrompt(createReqVO.getSystemPrompt()); + } applicationMapper.insert(application); //prompt使用量+1 @@ -122,7 +127,9 @@ public class ApplicationServiceImpl implements ApplicationService { validateApplicationExists(updateReqVO.getId()); // 更新 ApplicationDO updateObj = BeanUtils.toBean(updateReqVO, ApplicationDO.class); - updateObj.setPrompt(updateReqVO.getSystemPrompt()); + if (!StringUtils.isBlank(updateReqVO.getSystemPrompt())){ + updateObj.setPrompt(updateReqVO.getSystemPrompt()); + } applicationMapper.updateById(updateObj); } @@ -215,7 +222,18 @@ public class ApplicationServiceImpl implements ApplicationService { } } - bean.setSystemPrompt(applicationDO.getPrompt()); + if (applicationDO.getPrompt() != null) { + bean.setSystemPrompt(applicationDO.getPrompt()); + bean.setPrompt(applicationDO.getPrompt()); + } + + if (applicationDO.getModelServiceId() != null) { + bean.setModelServiceId(applicationDO.getModelServiceId()); + } + + if (applicationDO.getPromptId() != null) { + bean.setPromptId(applicationDO.getPromptId()); + } return bean; } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/conversation/ConversationServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/conversation/ConversationServiceImpl.java index e08c9e053..435a16c7d 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/conversation/ConversationServiceImpl.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/conversation/ConversationServiceImpl.java @@ -98,6 +98,7 @@ public class ConversationServiceImpl implements ConversationService { */ private final static String KNOWLEDGE_DOCUMENTS_REDIS_KEY = "llm:knowledge:documents"; private final static Long KNOWLEDGE_DOCUMENTS_REDIS_EXPIRE_SECONDS = 60 * 60 * 24L; + public static final String PROMPT = "Use the following context as your learned knowledge, inside XML tags.When answer to user:\\n- If you don't know, just say that you don't know.\\n- If you don't know when you are not sure, ask for clarification.\\nAvoid mentioning that you obtained the information from the context.\\nAnd answer according to the language of the user's question.\\n\\n"; @Override public Integer createConversation (ConversationSaveReqVO createReqVO) { @@ -313,7 +314,21 @@ public class ConversationServiceImpl implements ConversationService { ApplicationSaveReqVO applicationSaveReqVO = BeanUtil.toBean(application, ApplicationSaveReqVO.class); applicationService.updateApplication(applicationSaveReqVO); } - chatReqVO.setSystemPrompt(application.getPrompt()); + + + // 知识库ID + if (application.getModelServiceId()!= null){ + chatReqVO.setKnowledge(application.getModelServiceId()); + } + + if (!org.apache.commons.lang3.StringUtils.isBlank(application.getPrompt())){ + chatReqVO.setSystemPrompt(application.getPrompt()); + if (chatReqVO.getSystemPrompt() == null || chatReqVO.getSystemPrompt().isEmpty()) { + log.info("应用中未找到系统提示信息,使用默认提示信息"); + chatReqVO.setSystemPrompt(PROMPT); + } + } + log.info("已更新系统提示信息为: {}", chatReqVO.getSystemPrompt()); } } @@ -372,7 +387,6 @@ public class ConversationServiceImpl implements ConversationService { && Objects.equals(expectedGroupId, actualGroupId); } - public static final String PROMPT = "Use the following context as your learned knowledge, inside XML tags.When answer to user:\\n- If you don't know, just say that you don't know.\\n- If you don't know when you are not sure, ask for clarification.\\nAvoid mentioning that you obtained the information from the context.\\nAnd answer according to the language of the user's question.\\n\\n"; /** * 公共模型聊天流式处理方法