|
|
|
@ -91,29 +91,7 @@ public class RobotTalkServiceImpl implements RobotTalkService {
|
|
|
|
|
|
|
|
|
|
// 匹配问题意图
|
|
|
|
|
MatchQuestionAnswerDTO matchQuestionAnswerDTO = matchQuestionAnswer(robotTalkReq.getMessage());
|
|
|
|
|
if (Objects.nonNull(matchQuestionAnswerDTO)){
|
|
|
|
|
List<ParamCheckDTO> paramCheckDTOS = queryTemplateProcessor.paramCheck(matchQuestionAnswerDTO.getMatchQuestionCode(), sessionId,
|
|
|
|
|
suspectInfo2IrSessionParam(sessionId, robotTalkReq.getTitleContent()));
|
|
|
|
|
// 匹配到意图,但是参数校验不通过,尝试提取消息中的信息
|
|
|
|
|
if (CollUtil.isNotEmpty(paramCheckDTOS) && !Boolean.TRUE.equals(robotTalkReq.isConfirmFlag())){
|
|
|
|
|
String paramsJoin = paramCheckDTOS.stream().map(ParamCheckDTO::getParamName).collect(Collectors.joining(","));
|
|
|
|
|
log.info("匹配到的问题:{} ,需要参数:{} ,尝试抽取问题:{} 中的参数。",matchQuestionAnswerDTO.getMatchQuestionCode(),paramsJoin,robotTalkReq.getMessage());
|
|
|
|
|
extractInformation(sessionId, robotTalkReq.getMessage(), robotTalkDTO);
|
|
|
|
|
robotTalkDTO.getAnswerInfo().setContentType(6);
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
if (!Boolean.TRUE.equals(robotTalkReq.isConfirmFlag())){
|
|
|
|
|
log.info("问题:{},未匹配到意图,且confirmFlag标识不为true,抽取问题中的关键属性",robotTalkReq.getMessage());
|
|
|
|
|
// 未匹配到意图,且不是关键信息确认操作则提取信息中的关键信息
|
|
|
|
|
extractInformation(sessionId, robotTalkReq.getMessage(), robotTalkDTO);
|
|
|
|
|
robotTalkDTO.getAnswerInfo().setContentType(6);
|
|
|
|
|
}else {
|
|
|
|
|
// 未匹配到意图,是关键信息确认操作,不做问题响应,只做默认回答
|
|
|
|
|
log.info("问题:{},未匹配到意图,且confirmFlag标识为true,设置默认回答:{}",robotTalkReq.getMessage(),config.getUnrecognizedTwo());
|
|
|
|
|
robotTalkDTO.getAnswerInfo().setMessage(config.getUnrecognizedTwo());
|
|
|
|
|
robotTalkDTO.setDoNext(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
question2Answer(robotTalkReq, robotTalkDTO, matchQuestionAnswerDTO,config);
|
|
|
|
|
|
|
|
|
|
if (Objects.isNull(matchQuestionAnswerDTO) && robotTalkDTO.isDoNext()){
|
|
|
|
|
// 未匹配到查询意图,设置默认错误语
|
|
|
|
@ -147,6 +125,42 @@ public class RobotTalkServiceImpl implements RobotTalkService {
|
|
|
|
|
return robotTalkDTO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void question2Answer(RobotTalkReq robotTalkReq,RobotTalkDTO robotTalkDTO, MatchQuestionAnswerDTO matchQuestionAnswerDTO,IrRobotConfig config) {
|
|
|
|
|
|
|
|
|
|
String sessionId = robotTalkReq.getSessionId();
|
|
|
|
|
|
|
|
|
|
if (Objects.nonNull(matchQuestionAnswerDTO)){
|
|
|
|
|
List<ParamCheckDTO> paramCheckDTOS = queryTemplateProcessor.paramCheck(matchQuestionAnswerDTO.getMatchQuestionCode(), sessionId,
|
|
|
|
|
suspectInfo2IrSessionParam(sessionId, null));
|
|
|
|
|
// 匹配到意图,但是参数校验不通过,尝试提取消息中的信息
|
|
|
|
|
if (CollUtil.isNotEmpty(paramCheckDTOS) && !Boolean.TRUE.equals(robotTalkReq.isConfirmFlag())){
|
|
|
|
|
String paramsJoin = paramCheckDTOS.stream().map(ParamCheckDTO::getParamName).collect(Collectors.joining(","));
|
|
|
|
|
log.info("匹配到的问题:{} ,需要参数:{} ,尝试抽取问题:{} 中的参数。",matchQuestionAnswerDTO.getMatchQuestionCode(),paramsJoin, robotTalkReq.getMessage());
|
|
|
|
|
extractInformation(sessionId, robotTalkReq.getMessage(), robotTalkDTO);
|
|
|
|
|
SuspectInfo suspectInfo = robotTalkDTO.getAnswerInfo().getSuspectInfo();
|
|
|
|
|
if (Objects.isNull(suspectInfo) || suspectInfo.isEmpty()){
|
|
|
|
|
// 未抽取到信息,继续下一步操作
|
|
|
|
|
robotTalkDTO.getAnswerInfo().setContentType(6);
|
|
|
|
|
robotTalkDTO.setDoNext(true);
|
|
|
|
|
}else {
|
|
|
|
|
robotTalkDTO.getAnswerInfo().setContentType(6);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
if (!Boolean.TRUE.equals(robotTalkReq.isConfirmFlag())){
|
|
|
|
|
log.info("问题:{},未匹配到意图,且confirmFlag标识不为true,抽取问题中的关键属性", robotTalkReq.getMessage());
|
|
|
|
|
// 未匹配到意图,且不是关键信息确认操作则提取信息中的关键信息
|
|
|
|
|
extractInformation(sessionId, robotTalkReq.getMessage(), robotTalkDTO);
|
|
|
|
|
robotTalkDTO.getAnswerInfo().setContentType(6);
|
|
|
|
|
}else {
|
|
|
|
|
// 未匹配到意图,是关键信息确认操作,不做问题响应,只做默认回答
|
|
|
|
|
log.info("问题:{},未匹配到意图,且confirmFlag标识为true,设置默认回答:{}", robotTalkReq.getMessage(), config.getUnrecognizedTwo());
|
|
|
|
|
robotTalkDTO.getAnswerInfo().setMessage(config.getUnrecognizedTwo());
|
|
|
|
|
robotTalkDTO.setDoNext(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void logSessionInfo(RobotTalkDTO robotTalkDTO, MatchQuestionAnswerDTO matchQuestionAnswerDTO) {
|
|
|
|
|
// 组装日志信息
|
|
|
|
|
IrSessionHistory irSessionHistory = talk2SessionHistory(robotTalkDTO.getSessionId(),
|
|
|
|
|