调整应答交互规则

main
xueqingkun 11 months ago
parent 0fc339ff71
commit 393ba5a4d0

@ -21,4 +21,9 @@ public class SuspectInfo {
*
*/
private String idNumber;
public boolean isEmpty() {
return name == null && cardNumber == null && idNumber == null;
}
}

@ -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(),

Loading…
Cancel
Save