|
|
|
@ -27,6 +27,8 @@ import com.supervision.util.UserUtil;
|
|
|
|
|
import com.supervision.vo.rasa.RasaTalkVo;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.ai.document.Document;
|
|
|
|
|
import org.springframework.ai.vectorstore.RedisVectorStore;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
@ -65,7 +67,8 @@ public class AskServiceImpl implements AskService {
|
|
|
|
|
|
|
|
|
|
private final DiagnosisAiRecordService diagnosisAiRecordService;
|
|
|
|
|
|
|
|
|
|
@Value("${qaSimilarityThreshold:0.4}")
|
|
|
|
|
private final RedisVectorStore redisVectorStore;
|
|
|
|
|
@Value("${qaSimilarityThreshold:0.7}")
|
|
|
|
|
private String qaSimilarityThreshold;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@ -234,14 +237,21 @@ public class AskServiceImpl implements AskService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public QaSimilarityQuestionAnswer talkQaSimilarityWithScore(String question, String sessionId) {
|
|
|
|
|
public QaSimilarityQuestionAnswer talkRedisVectorWithScore(String question) {
|
|
|
|
|
log.info("开始调用talkQaSimilarity,问题:{}", question);
|
|
|
|
|
try {
|
|
|
|
|
GlobalResult<List<QaSimilarityQuestionAnswer>> result = askQaSimilarityFeignClient.askQuestionSimilarityAnswer(new QaSimilarityQuestion(question));
|
|
|
|
|
// 走Redis进行比较
|
|
|
|
|
List<Document> documents = redisVectorStore.similaritySearch(question);
|
|
|
|
|
Optional<QaSimilarityQuestionAnswer> first = documents.stream().map(document -> {
|
|
|
|
|
QaSimilarityQuestionAnswer qaSimilarityQuestionAnswer = new QaSimilarityQuestionAnswer();
|
|
|
|
|
qaSimilarityQuestionAnswer.setMatchQuestion(document.getContent());
|
|
|
|
|
qaSimilarityQuestionAnswer.setMatchQuestionCode(String.valueOf(document.getMetadata().get("standardQuestionId")));
|
|
|
|
|
qaSimilarityQuestionAnswer.setMatchScore(Double.parseDouble(String.valueOf(document.getMetadata().get("standardQuestionId"))));
|
|
|
|
|
return qaSimilarityQuestionAnswer;
|
|
|
|
|
}).max(Comparator.comparing(QaSimilarityQuestionAnswer::getMatchScore));
|
|
|
|
|
// 排序,降序,取最高的
|
|
|
|
|
result.getData().sort(Comparator.comparing(QaSimilarityQuestionAnswer::getMatchScore).reversed());
|
|
|
|
|
log.info("调用talkQaSimilarity结束,问题:{},返回结果:{}", question, JSONUtil.toJsonStr(result));
|
|
|
|
|
return CollUtil.getFirst(result.getData());
|
|
|
|
|
log.info("调用talkQaSimilarity结束,问题:{},返回结果:{}", question, JSONUtil.toJsonStr(first.orElse(null)));
|
|
|
|
|
return first.orElse(null);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("调用talkQaSimilarity error ", e);
|
|
|
|
|
return null;
|
|
|
|
@ -301,7 +311,7 @@ public class AskServiceImpl implements AskService {
|
|
|
|
|
// 根据processId找到对应的病人
|
|
|
|
|
Process process = Optional.ofNullable(processService.getById(talkReqVO.getProcessId())).orElseThrow(() -> new BusinessException("未找到诊疗进程"));
|
|
|
|
|
MedicalRec medicalRec = medicalRecService.getById(process.getMedicalRecId());
|
|
|
|
|
QaSimilarityQuestionAnswer qaSimilarityQuestionAnswer = talkQaSimilarityWithScore(talkReqVO.getText(), UserUtil.getUser().getId());
|
|
|
|
|
QaSimilarityQuestionAnswer qaSimilarityQuestionAnswer = talkRedisVectorWithScore(talkReqVO.getText());
|
|
|
|
|
TalkVideoTtsResultResVO talkVideoTtsResultResVO = new TalkVideoTtsResultResVO();
|
|
|
|
|
// 如果匹配度没有匹配到任何数据,则走大模型
|
|
|
|
|
if (ObjectUtil.isEmpty(qaSimilarityQuestionAnswer)) {
|
|
|
|
|