refactor(llm): 优化应用创建和更新逻辑,增加系统提示和知识库支持
- 在创建和更新应用时,增加了对系统提示的非空校验和空值处理 - 在获取应用信息时,增加了对 prompt、modelServiceId 和 promptId 的非空赋值 - 在会话创建和聊天请求中,增加了对知识库 ID 和系统提示的处理逻辑- 优化了日志输出,增加了对系统提示更新的记录
This commit is contained in:
parent
0e6e306b2e
commit
7b99cc41a5
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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";
|
||||
|
||||
/**
|
||||
* 公共模型聊天流式处理方法
|
||||
|
Loading…
x
Reference in New Issue
Block a user