refactor(llm): 优化应用创建和更新逻辑,增加系统提示和知识库支持

- 在创建和更新应用时,增加了对系统提示的非空校验和空值处理
- 在获取应用信息时,增加了对 prompt、modelServiceId 和 promptId 的非空赋值
- 在会话创建和聊天请求中,增加了对知识库 ID 和系统提示的处理逻辑- 优化了日志输出,增加了对系统提示更新的记录
This commit is contained in:
Liuyang 2025-03-14 16:58:35 +08:00
parent 0e6e306b2e
commit 7b99cc41a5
2 changed files with 37 additions and 5 deletions

View File

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

View File

@ -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 <context></context> 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 <context></context> 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";
/**
* 公共模型聊天流式处理方法