diff --git a/kbqa-graph/src/main/java/com/supervision/controller/AskController.java b/kbqa-graph/src/main/java/com/supervision/controller/AskController.java index 26023e0..172ce7a 100644 --- a/kbqa-graph/src/main/java/com/supervision/controller/AskController.java +++ b/kbqa-graph/src/main/java/com/supervision/controller/AskController.java @@ -39,8 +39,6 @@ public class AskController { } catch (Exception e) { log.error("多轮对话过程中出现了异常,则说明多轮对话走不通,那么就根据sessionId获取Redis中的原始问题,直接走单轮对话", e); // 如果多轮对话过程中出现了异常,则说明多轮对话走不通,那么就根据sessionId获取Redis中的原始问题,直接走单轮对话 - Object cache = redisTemplate.opsForValue().get(SESSION_PARAM + roundTalkReqVO.getSessionId()); - SessionParamDTO sessionParamDTO = BeanUtil.toBean(cache, SessionParamDTO.class); SingleTalkResVO singleTalkResVO = askService.singleTalk(SingleTalkReqVO.builder().userTalk(roundTalkReqVO.getUserTalk()).build()); return RoundTalkResVO.builder().sessionId(roundTalkReqVO.getSessionId()) .answerText(singleTalkResVO.getAnswerText()).build(); diff --git a/kbqa-graph/src/main/java/com/supervision/service/impl/AskServiceImpl.java b/kbqa-graph/src/main/java/com/supervision/service/impl/AskServiceImpl.java index ec6ef6e..fcb5f59 100644 --- a/kbqa-graph/src/main/java/com/supervision/service/impl/AskServiceImpl.java +++ b/kbqa-graph/src/main/java/com/supervision/service/impl/AskServiceImpl.java @@ -97,10 +97,13 @@ public class AskServiceImpl implements AskService { } // 判断,如果已经有确定的叶子节点了,这时,就可以直接根据意图来问了,就不要要提取实体了 if (ObjectUtil.isNotEmpty(sessionParamDTO.getMatchItemLeaf())) { + log.info("上一个问题继续问,直接根据用户的新问题找结果"); sessionParamDTO.setOriginalQuestion(roundTalkReqVO.getUserTalk()); + // 识别意图 String intent = identifyIntentHandler.identifyIntentExample(roundTalkReqVO.getUserTalk()); sessionParamDTO.setIntent(intent); redisTemplate.opsForValue().set(SESSION_PARAM + sessionId, sessionParamDTO); + // 回答 return afterMatchReturnAnswer(sessionParamDTO); } // 判断意图是否为空,如果意图为空,进行识别意图 @@ -115,9 +118,8 @@ public class AskServiceImpl implements AskService { if (CollUtil.isEmpty(sessionParamDTO.getEntityValueByExtract()) && ObjectUtil.isEmpty(sessionParamDTO.getMatchItemLeaf())) { // 识别实体(先从图中获取所有的节点名称,然后识别) List allItemNode = findItemNodeHandler.findAllItemNode(); - List extractValue = itemExtractHandler.itemExtractByPossibleItemWithExample(sessionParamDTO.getOriginalQuestion(), allItemNode); // 识别问题中,用户可能问的业务是什么 -// String extractValue = itemExtractHandler.itemExtractBusiness(sessionParamDTO.getOriginalQuestion()); + List extractValue = itemExtractHandler.itemExtractByPossibleItemWithExample(sessionParamDTO.getOriginalQuestion(), allItemNode); sessionParamDTO.setEntityValueByExtract(extractValue); // 根据提取的内容,开始在知识图谱中寻找节点(首先找叶子节点,如果叶子节点有数据,直接返回,如果叶子节点没数据,再去找分支节点) List allMatchLeafNode = findItemNodeHandler.findAllMatchLeafNode(extractValue); @@ -129,8 +131,6 @@ public class AskServiceImpl implements AskService { } else { // 如果不等于1,说明可能有不确定的节点,这时就要开始找节点 Map waitMatchItemLeafMap = allMatchLeafNode.stream().collect(Collectors.toMap(ItemLeaf::getVid, Function.identity(), (k1, k2) -> k1)); - - // 所有的实体类型以及出现次数计数 Map entityCountMap = new HashMap<>(); // 用来存放所有的节点以及节点路径(key是节点ID,value是节点路径)