| | |
| | | package cc.mrbird.febs.ai.service.impl; |
| | | |
| | | import cc.mrbird.febs.ai.enumerates.AiTypeEnum; |
| | | import cc.mrbird.febs.ai.entity.AiProductRole; |
| | | import cc.mrbird.febs.ai.req.ai.AiMessage; |
| | | import cc.mrbird.febs.ai.req.ai.AiRequest; |
| | | import cc.mrbird.febs.ai.res.ai.AiResponse; |
| | | import cc.mrbird.febs.ai.res.ai.RadarDataItem; |
| | | import cc.mrbird.febs.ai.res.ai.Report; |
| | | import cc.mrbird.febs.ai.service.AiProductRoleService; |
| | | import cc.mrbird.febs.ai.service.AiService; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.fasterxml.jackson.core.JsonProcessingException; |
| | | import com.fasterxml.jackson.databind.JsonNode; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public AiResponse start(String productRoleId, String content) { |
| | | public AiResponse start(List<AiMessage> aiMessageDtoList,Integer type,String productRoleId, String content, String question) { |
| | | if (!StringUtils.hasText(productRoleId)) { |
| | | log.warn("productRoleId 不能为空"); |
| | | return buildErrorResponse(CODE_NOT_FOUND, "AI陪练不存在"); |
| | |
| | | return buildErrorResponse(CODE_NOT_FOUND, "AI陪练不存在"); |
| | | } |
| | | |
| | | String promptTemplate = aiProductRole.getPromptTemplate(); |
| | | |
| | | String promptTemplate = "作为一个智能助手,请回答我提出的问题。"; |
| | | if (AiTypeEnum.QUESTION.getCode() == type){ |
| | | promptTemplate = aiProductRole.getPromptHead(); |
| | | } |
| | | if (AiTypeEnum.ANSWER.getCode() == type){ |
| | | promptTemplate = aiProductRole.getPromptTemplate()+question; |
| | | } |
| | | log.info("promptTemplate: {}", promptTemplate); |
| | | String linkId = aiProductRole.getLinkId(); |
| | | String jsonTemplate = aiProductRole.getJsonTemplate(); |
| | | |
| | |
| | | aiRequest.setJsonTemplate(jsonTemplate); |
| | | aiRequest.setLinkId(linkId); |
| | | aiRequest.setContent(content); |
| | | |
| | | if (CollUtil.isNotEmpty(aiMessageDtoList)){ |
| | | aiRequest.setAiMessageDtoList(aiMessageDtoList); |
| | | } |
| | | return this.question(aiRequest); |
| | | } |
| | | |
| | |
| | | return buildErrorResponse(CODE_ERROR, "请求参数不完整"); |
| | | } |
| | | |
| | | final List<ChatMessage> messages = new ArrayList<>(); |
| | | final ChatMessage systemMessage = ChatMessage.builder().role(ChatMessageRole.SYSTEM).content(promptTemplate).build(); |
| | | final ChatMessage userMessage = ChatMessage.builder().role(ChatMessageRole.USER).content(content).build(); |
| | | List<ChatMessage> messages = new ArrayList<>(); |
| | | ChatMessage systemMessage = ChatMessage.builder().role(ChatMessageRole.SYSTEM).content(promptTemplate).build(); |
| | | ChatMessage userMessage = ChatMessage.builder().role(ChatMessageRole.USER).content(content).build(); |
| | | messages.add(systemMessage); |
| | | if (CollUtil.isNotEmpty(aiRequest.getAiMessageDtoList())){ |
| | | aiRequest.getAiMessageDtoList().forEach(aiMessageDto -> { |
| | | ChatMessage message = ChatMessage.builder() |
| | | .role(aiMessageDto.getRole()) |
| | | .content(aiMessageDto.getContent()) |
| | | .build(); |
| | | messages.add(message); |
| | | }); |
| | | } |
| | | messages.add(userMessage); |
| | | |
| | | try { |
| | |
| | | .filter(contentObj -> contentObj != null) |
| | | .map(Object::toString) |
| | | .collect(Collectors.joining()); |
| | | |
| | | Report report = this.extractReportData(result); |
| | | return buildSuccessResponse(report, result); |
| | | } catch (JsonProcessingException e) { |
| | |
| | | public Report extractReportData(String modelOutput) { |
| | | Matcher matcher = JSON_PATTERN.matcher(modelOutput); |
| | | if (!matcher.find()) { |
| | | log.warn("未匹配到FunctionCall内容,原始输出长度: {}", modelOutput.length()); |
| | | log.warn("未匹配到FunctionCall内容,原始输出长度: {}", modelOutput); |
| | | return null; |
| | | } |
| | | |