1: 修改 AskTemplateQuestionLibrary中的question

pull/1/head
xueqingkun 11 months ago
parent f8e59d11a8
commit 0ba38c64df

@ -85,7 +85,8 @@ public class MedicalRecAnswerExcelDTO {
public void doAction(List<AskTemplateQuestionLibrary> questionLibraryList,
List<AskPatientAnswer> askPatientAnswerList,
List<MaterialLibrary> materialLibraryList,
List<CommonDic> questionTypeDicList){
List<CommonDic> questionTypeDicList,
Map<String,List<String>> questionMap){
if (StrUtil.isNotEmpty(this.answerVideoName)){
List<String> split = StrUtil.split(this.answerVideoName, ".");
@ -96,7 +97,7 @@ public class MedicalRecAnswerExcelDTO {
}
this.absentCheck();
this.matchQuestionDicId(questionTypeDicList);
this.matchQuestion(questionLibraryList);
this.matchQuestion(questionLibraryList,questionMap);
this.matchAskPatientAnswer(askPatientAnswerList);
this.matchAnswerResource(materialLibraryList);
}
@ -148,7 +149,7 @@ public class MedicalRecAnswerExcelDTO {
*
* @param questionLibraryList
*/
public void matchQuestion(List<AskTemplateQuestionLibrary> questionLibraryList){
public void matchQuestion(List<AskTemplateQuestionLibrary> questionLibraryList,Map<String,List<String>> questionMap){
if (StrUtil.isEmpty(this.question)){
return;
}
@ -157,7 +158,7 @@ public class MedicalRecAnswerExcelDTO {
}
for (AskTemplateQuestionLibrary questionLibrary : questionLibraryList) {
String description = questionLibrary.getDescription();
List<String> questionList = questionLibrary.getQuestion();
List<String> questionList = questionMap.get(questionLibrary.getId());
if (this.question.equals(description)){
this.libraryQuestionId = questionLibrary.getId();
return;

@ -94,7 +94,7 @@ public class UploadQuestionLibraryDTO {
*
* @param questionLibraryList
*/
public void matchQuestion(List<AskTemplateQuestionLibrary> questionLibraryList){
/*public void matchQuestion(List<AskTemplateQuestionLibrary> questionLibraryList){
if (StrUtil.isEmpty(this.question)){
return;
}
@ -110,7 +110,7 @@ public class UploadQuestionLibraryDTO {
return;
}
}
}
}*/
public void matchQuestionDicId(List<CommonDic> questionTypeDicList){
if (StrUtil.isEmpty(this.questionTypeTwo)){
return;

@ -11,15 +11,18 @@ import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.supervision.dto.AskTemplateQuestionLibraryDTO;
import com.supervision.manage.dto.UploadQuestionLibraryDTO;
import com.supervision.manage.pojo.vo.UploadQuestionLibraryResVo;
import com.supervision.manage.service.AskQuestionLibraryManageService;
import com.supervision.manage.service.FileManageService;
import com.supervision.manage.service.QaKnowledgeManageService;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.AskTemplateQuestionSimilarity;
import com.supervision.model.CommonDic;
import com.supervision.model.FileResource;
import com.supervision.service.AskTemplateQuestionLibraryService;
import com.supervision.service.AskTemplateQuestionSimilarityService;
import com.supervision.service.CommonDicService;
import com.supervision.util.RedisSequenceUtil;
import com.supervision.vo.manage.AskQuestionLibraryReqVo;
@ -28,6 +31,7 @@ import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.SimpleAliasRegistry;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;
@ -52,6 +56,8 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa
private final AskTemplateQuestionLibraryService askTemplateQuestionLibraryService;
private final AskTemplateQuestionSimilarityService askTemplateQuestionSimilarityService;
private final CommonDicService commonDicService;
private final FileManageService fileManageService;
@ -94,25 +100,32 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa
Assert.notNull(commonDic,"字典信息不存在");
// 不存在,则新增
AskTemplateQuestionLibrary one = askTemplateQuestionLibraryService.lambdaQuery().eq(AskTemplateQuestionLibrary::getDictId, askTemplateQuestionLibrary.getDictId()).one();
Map<String, List<String>> questionMap = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(CollUtil.newArrayList(one));
// 原始数据已经存在,更新数据
if (Objects.nonNull(one)){
// 更新数据
List<String> question = one.getQuestion();
if (CollUtil.isEmpty(question)){
question = CollUtil.newArrayList(askTemplateQuestionLibrary.getDescription());
} else if (!question.contains(askTemplateQuestionLibrary.getDescription())) {
question.add(0, askTemplateQuestionLibrary.getDescription());
}
one.setQuestion(question);
askTemplateQuestionLibraryService.updateById(one);
if (CollUtil.isEmpty(questionMap.get(one.getId()))){
// 相似问不为空。查看相似问是否存在
List<String> questionList = questionMap.get(one.getId());
if (CollUtil.isEmpty(questionList) || !questionList.contains(askTemplateQuestionLibrary.getDescription())){
// 不存在相似问,新增一条相似问数据
AskTemplateQuestionSimilarity similarity = new AskTemplateQuestionSimilarity();
similarity.setSimilarityQuestion(askTemplateQuestionLibrary.getDescription());
similarity.setLibraryId(one.getId());
askTemplateQuestionSimilarityService.save(similarity);
}
}
return one.getId();
}else {
// 新增数据
askTemplateQuestionLibrary.setQuestion(CollUtil.newArrayList(askTemplateQuestionLibrary.getDescription()));
if (StrUtil.isNotEmpty(commonDic.getDescription())){
askTemplateQuestionLibrary.setDescription(commonDic.getDescription());
askTemplateQuestionLibrary.getQuestion().add(commonDic.getDescription());
}
// askTemplateQuestionLibrary.setQuestion(CollUtil.newArrayList(askTemplateQuestionLibrary.getDescription()));
// if (StrUtil.isNotEmpty(commonDic.getDescription())){
// askTemplateQuestionLibrary.setDescription(commonDic.getDescription());
// askTemplateQuestionLibrary.getQuestion().add(commonDic.getDescription());
// }
// 获取nexCode
String nextCode = RedisSequenceUtil.getQuestionLibraryCode(() -> {

@ -50,6 +50,8 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
private final AskTemplateQuestionLibraryService askTemplateQuestionLibraryService;
private final AskTemplateQuestionSimilarityService askTemplateQuestionSimilarityService;
private final CommonDicService commonDicService;
private final DiseaseQuestionService diseaseQuestionService;
@ -164,6 +166,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
Set<String> libraryQuestionIdSet = list.stream().map(DiseaseQuestion::getQuestionId).collect(Collectors.toSet());
List<AskTemplateQuestionLibrary> askTemplateQuestionLibraryList = askTemplateQuestionLibraryService.listByIds(libraryQuestionIdSet);
Map<String, AskTemplateQuestionLibrary> askQuestionMap = askTemplateQuestionLibraryList.stream().collect(Collectors.toMap(AskTemplateQuestionLibrary::getId, Function.identity()));
Map<String, List<String>> libraryIdMapQuestion = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(askTemplateQuestionLibraryList);
// 获取字典
Set<Long> dictIdSet = askTemplateQuestionLibraryList.stream().map(AskTemplateQuestionLibrary::getDictId).collect(Collectors.toSet());
Map<Long, CommonDic> dictMap = commonDicService.listByIds(dictIdSet).stream().collect(Collectors.toMap(CommonDic::getId, Function.identity()));
@ -174,13 +177,11 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
MedicalRecQaVO medicalRecQaVO = new MedicalRecQaVO();
medicalRecQaVO.setLibraryQuestionId(diseaseQuestion.getQuestionId());
// 问题
medicalRecQaVO.setQuestionList(questionLibrary.getQuestion());
medicalRecQaVO.setQuestionList(libraryIdMapQuestion.get(questionLibrary.getId()));
// 类目
medicalRecQaVO.setDictId(questionLibrary.getDictId());
// 类目名称
medicalRecQaVO.setDictNamePath(dictMap.getOrDefault(questionLibrary.getDictId(), new CommonDic()).getNameZhPath());
// 默认回答
medicalRecQaVO.setDefaultAnswer(questionLibrary.getDefaultAnswer());
result.add(medicalRecQaVO);
}
}
@ -277,6 +278,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
// 获取问题
Set<String> libraryQuestionIdSet = medicalRecQaList.stream().map(MedicalRecQaVO::getLibraryQuestionId).collect(Collectors.toSet());
List<AskTemplateQuestionLibrary> askTemplateQuestionLibraryList = askTemplateQuestionLibraryService.listByIds(libraryQuestionIdSet);
Map<String, List<String>> libraryMapQuestion = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(askTemplateQuestionLibraryList);
Map<String, AskTemplateQuestionLibrary> askQuestionMap = askTemplateQuestionLibraryList.stream().collect(Collectors.toMap(AskTemplateQuestionLibrary::getId, Function.identity()));
// 获取字典
Set<Long> dictIdSet = askTemplateQuestionLibraryList.stream().map(AskTemplateQuestionLibrary::getDictId).collect(Collectors.toSet());
@ -291,6 +293,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
videoInfoMaps.putAll(videoInfoMapsTmp);
}
for (MedicalRecQaVO medicalRecQaVO : medicalRecQaList) {
AskTemplateQuestionLibrary questionLibrary = askQuestionMap.get(medicalRecQaVO.getLibraryQuestionId());
if (ObjectUtil.isNotEmpty(questionLibrary)) {

@ -43,6 +43,8 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
private final AskTemplateQuestionLibraryService askTemplateQuestionLibraryService;
private final AskTemplateQuestionSimilarityService askTemplateQuestionSimilarityService;
private final AskQuestionLibraryManageService askQuestionLibraryManageService;
private final MaterialLibraryService materialLibraryService;
@ -109,6 +111,7 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
// 查询问题库问题
List<AskTemplateQuestionLibrary> questionLibraryList = askTemplateQuestionLibraryService.list();
Map<String, List<String>> questionMap = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(questionLibraryList);
// 疾病id为空不查询数据
List<AskPatientAnswer> askPatientAnswerList = StrUtil.isEmpty(medicalId) ?
CollUtil.newArrayList() :
@ -119,7 +122,7 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
List<CommonDic> questionTypeDicList = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").list();
medicalRecAnswerExcelDTOS.forEach(dto->dto.doAction(
questionLibraryList,askPatientAnswerList,materialLibraryList,questionTypeDicList));
questionLibraryList,askPatientAnswerList,materialLibraryList,questionTypeDicList,questionMap));
}
public void updateAskPatientAnswer(List<MedicalRecAnswerExcelDTO> medicalRecAnswerExcelDTOS,String medicalId){

@ -0,0 +1,14 @@
package com.supervision.dto;
import com.supervision.model.AskTemplateQuestionLibrary;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Data
public class AskTemplateQuestionLibraryDTO extends AskTemplateQuestionLibrary {
private List<String> question;
}

@ -1,8 +1,12 @@
package com.supervision.service;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.AskTemplateQuestionSimilarity;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
* @description vp_ask_template_question_similarity()Service
@ -10,4 +14,20 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface AskTemplateQuestionSimilarityService extends IService<AskTemplateQuestionSimilarity> {
/**
* libraryIdList
* @param libraryIdList
* @return key:id value:
*/
Map<String, List<String>> querySimilarityQuestionMapByLibraryIds(List<String> libraryIdList);
/**
* libraryList
* @param libraryList
* @return
*/
Map<String, List<String>> querySimilarityQuestionMapByLibraryLists(List<AskTemplateQuestionLibrary> libraryList);
}

@ -7,9 +7,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.dto.QaKnowledgeDTO;
import com.supervision.mapper.AskTemplateQuestionLibraryMapper;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.AskTemplateQuestionSimilarity;
import com.supervision.model.ConfigAncillaryItem;
import com.supervision.model.ConfigPhysicalTool;
import com.supervision.service.AskTemplateQuestionLibraryService;
import com.supervision.service.AskTemplateQuestionSimilarityService;
import com.supervision.service.ConfigAncillaryItemService;
import com.supervision.service.ConfigPhysicalToolService;
import com.supervision.vo.manage.AskQuestionLibraryReqVo;
@ -20,7 +22,9 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author flevance
@ -37,6 +41,8 @@ public class AskTemplateQuestionLibraryServiceImpl extends ServiceImpl<AskTempla
private final ConfigAncillaryItemService configAncillaryItemService;
private final AskTemplateQuestionSimilarityService askTemplateQuestionSimilarityService;
@Override
public List<AskQuestionLibraryResVo> queryList(AskQuestionLibraryReqVo askQuestionLibraryReqVo) {
@ -67,10 +73,12 @@ public class AskTemplateQuestionLibraryServiceImpl extends ServiceImpl<AskTempla
.ne(AskTemplateQuestionLibrary::getDictId, 180).ne(AskTemplateQuestionLibrary::getDictId, 182).list();
List<QaKnowledgeDTO> knowledgeList = new ArrayList<>();
Map<String, List<String>> librarySimilarityMap = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryIds(null);
for (AskTemplateQuestionLibrary library : libraryList) {
QaKnowledgeDTO qaKnowledgeDTO = new QaKnowledgeDTO();
qaKnowledgeDTO.setQuestionCode(library.getId());
qaKnowledgeDTO.setQuestionList(library.getQuestion());
qaKnowledgeDTO.setQuestionList(librarySimilarityMap.get(library.getId()));
knowledgeList.add(qaKnowledgeDTO);
}

@ -1,11 +1,18 @@
package com.supervision.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.AskTemplateQuestionSimilarity;
import com.supervision.service.AskTemplateQuestionSimilarityService;
import com.supervision.mapper.AskTemplateQuestionSimilarityMapper;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Administrator
* @description vp_ask_template_question_similarity()Service
@ -15,6 +22,34 @@ import org.springframework.stereotype.Service;
public class AskTemplateQuestionSimilarityServiceImpl extends ServiceImpl<AskTemplateQuestionSimilarityMapper, AskTemplateQuestionSimilarity>
implements AskTemplateQuestionSimilarityService{
@Override
public Map<String, List<String>> querySimilarityQuestionMapByLibraryIds(List<String> libraryIdList) {
List<AskTemplateQuestionSimilarity> similarityList = super.lambdaQuery()
.in(CollUtil.isNotEmpty(libraryIdList), AskTemplateQuestionSimilarity::getLibraryId, libraryIdList).list();
Map<String, List<String>> similarityMap = similarityList.stream()
.collect(Collectors.groupingBy(AskTemplateQuestionSimilarity::getLibraryId,
Collectors.mapping(AskTemplateQuestionSimilarity::getSimilarityQuestion, Collectors.toList())));
if (CollUtil.isNotEmpty(libraryIdList)){
for (String libraryId : libraryIdList) {
if (!similarityMap.containsKey(libraryId)){
similarityMap.put(libraryId, new ArrayList<>());
}
}
}
return similarityMap;
}
@Override
public Map<String, List<String>> querySimilarityQuestionMapByLibraryLists(List<AskTemplateQuestionLibrary> libraryList) {
List<String> libraryIdList = new ArrayList<>();
if (CollUtil.isNotEmpty(libraryList)){
libraryIdList = libraryList.stream().map(AskTemplateQuestionLibrary::getId).collect(Collectors.toList());
}
return querySimilarityQuestionMapByLibraryIds(libraryIdList);
}
}

@ -1,5 +1,6 @@
package com.supervision.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.MD5;
import cn.hutool.http.HttpUtil;
@ -10,6 +11,7 @@ import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.ConfigPhysicalTool;
import com.supervision.model.DiagnosisAiRecord;
import com.supervision.service.AskTemplateQuestionLibraryService;
import com.supervision.service.AskTemplateQuestionSimilarityService;
import com.supervision.service.ConfigPhysicalToolService;
import com.supervision.service.DiagnosisAiRecordService;
import com.supervision.util.MinioUtil;
@ -49,6 +51,8 @@ public class TestController {
private final OllamaChatClient chatClient;
private final AskTemplateQuestionSimilarityService askTemplateQuestionSimilarityService;
@GetMapping("testMatchQuestion")
public String test(String question) {
@ -80,6 +84,12 @@ public class TestController {
@GetMapping("testRedisVectorStore")
public void testRedisVectorStore() {
List<AskTemplateQuestionLibrary> list = askTemplateQuestionLibraryService.list();
if (CollUtil.isEmpty(list)){
return;
}
Map<String, List<String>> similarityQuestionMap = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(list);
for (AskTemplateQuestionLibrary askTemplateQuestionLibrary : list) {
String description = askTemplateQuestionLibrary.getDescription();
redisVectorStore.add(List.of(new Document(description,
@ -87,7 +97,7 @@ public class TestController {
"standardQuestionId", askTemplateQuestionLibrary.getId(),
"questionId", askTemplateQuestionLibrary.getId(),
"dictId", String.valueOf(askTemplateQuestionLibrary.getDictId())))));
List<String> question = askTemplateQuestionLibrary.getQuestion();
List<String> question = similarityQuestionMap.get(askTemplateQuestionLibrary.getId());
for (String s : question) {
redisVectorStore.add(List.of(new Document(s,
Map.of("type", "2",

@ -17,10 +17,7 @@ import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator;
import com.supervision.model.AskPatientAnswer;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.CommonDic;
import com.supervision.service.AskPatientAnswerService;
import com.supervision.service.AskService;
import com.supervision.service.AskTemplateQuestionLibraryService;
import com.supervision.service.CommonDicService;
import com.supervision.service.*;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
@ -52,6 +49,9 @@ public class AskTemplateIdTest {
@Autowired
private AskService askService;
@Autowired
private AskTemplateQuestionSimilarityService askTemplateQuestionSimilarityService;
@Test
public void creatAskId() {
Object o = new Object();
@ -105,6 +105,8 @@ public class AskTemplateIdTest {
List<CommonDic> aqtList = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").isNotNull(CommonDic::getParentId).ne(CommonDic::getParentId, 179).list();
Map<Long, CommonDic> dictMap = aqtList.stream().collect(Collectors.toMap(CommonDic::getId, Function.identity()));
List<AskTemplateQuestionLibrary> list = askTemplateQuestionLibraryService.list();
Map<String, List<String>> similarQuestionMap = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(list);
for (AskTemplateQuestionLibrary ask : list) {
try {
CommonDic dic = dictMap.get(ask.getDictId());
@ -112,8 +114,9 @@ public class AskTemplateIdTest {
String description = ask.getDescription();
Map<String, Object> map = new HashMap<>();
map.put("role", "user");
map.put("content", "假设你是一个精通RASA NLU调优的工程师我现在有一个意图有一个问题示例请你根据这个意图针对这个问题示例提出30条与这个问题示例类似的问题注意问题不要超出这个意图的范围回答请使用json array的格式示例[\"相似问题1\",\"相似问题2\"]\n" +
"### 下面是意图和问题示例\n" + dic.getNameZhPath() + ":" + ask.getQuestion());
"### 下面是意图和问题示例\n" + dic.getNameZhPath() + ":" + similarQuestionMap.get(ask.getId()));
HashMap<String, Object> param = new HashMap<>();
param.put("messages", CollUtil.newArrayList(map));
String askAnswer = HttpUtil.post("https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + accessToken, JSONUtil.toJsonStr(param));
@ -122,7 +125,7 @@ public class AskTemplateIdTest {
String s = ReUtil.get("\\[(.*?)\\]", result, 0);
List<String> question = JSONUtil.toList(s, String.class);
question.add(0, description);
askTemplateQuestionLibraryService.lambdaUpdate().set(AskTemplateQuestionLibrary::getQuestion, JSONUtil.toJsonStr(question)).eq(AskTemplateQuestionLibrary::getId, ask.getId()).update();
// askTemplateQuestionLibraryService.lambdaUpdate().set(AskTemplateQuestionLibrary::getQuestion, JSONUtil.toJsonStr(question)).eq(AskTemplateQuestionLibrary::getId, ask.getId()).update();
}
} catch (Exception e) {
@ -201,6 +204,8 @@ public class AskTemplateIdTest {
Map<String, CommonDic> dictMap = aqtList.stream().collect(Collectors.toMap(CommonDic::getNameZhPath, Function.identity()));
List<AskTemplateQuestionLibrary> libraryList = askTemplateQuestionLibraryService.list();
Map<Long, AskTemplateQuestionLibrary> libraryMap = libraryList.stream().collect(Collectors.toMap(AskTemplateQuestionLibrary::getDictId, Function.identity()));
Map<String, List<String>> similarityQuestionMap = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(libraryList);
// 遍历match_result.json文件
JSONArray jsonArray = JSONUtil.readJSONArray(FileUtil.file("/Users/flevance/Desktop/知识图谱调优/matching_results.json"), StandardCharsets.UTF_8);
// 根据测试问题判断,匹配度最高的问题,是不是包含在question列表内,如果不是,就提示
@ -225,7 +230,7 @@ public class AskTemplateIdTest {
if (ObjectUtil.isEmpty(askTemplateQuestionLibrary)) {
log.info("测试问题:{},对应意图:{},期望的意图找到了,但是期望意图对应的知识库数据未找到", testQuestion, intent);
}
Set<String> dataBaseQuestionSet = new HashSet<>(askTemplateQuestionLibrary.getQuestion());
Set<String> dataBaseQuestionSet = new HashSet<>(similarityQuestionMap.get(askTemplateQuestionLibrary.getId()));
if (!dataBaseQuestionSet.contains(question)) {
log.info("测试问题:{},对应意图:{},实际匹配相似度最高的问题为:{},但并不是实际期待匹配的意图", testQuestion, intent, question);
} else {

@ -109,15 +109,16 @@ public class RedisVecTest {
List<AskTemplateQuestionLibrary> questionLibraryList = askTemplateQuestionLibraryService.lambdaQuery().notIn(AskTemplateQuestionLibrary::getDictId, dicIds).list();
for (AskTemplateQuestionLibrary library : questionLibraryList) {
List<String> questionList = library.getQuestion();
for (String question : questionList) {
AskTemplateQuestionSimilarity similarity = new AskTemplateQuestionSimilarity();
similarity.setLibraryId(library.getId());
similarity.setSimilarityQuestion(question);
askTemplateQuestionSimilarityService.save(similarity);
}
}
// for (AskTemplateQuestionLibrary library : questionLibraryList) {
// List<String> questionList = library.getQuestion();
// for (String question : questionList) {
// AskTemplateQuestionSimilarity similarity = new AskTemplateQuestionSimilarity();
// similarity.setLibraryId(library.getId());
// similarity.setSimilarityQuestion(question);
// askTemplateQuestionSimilarityService.save(similarity);
// }
// }
}

@ -19,6 +19,7 @@ import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.CommonDic;
import com.supervision.service.AskPatientAnswerService;
import com.supervision.service.AskTemplateQuestionLibraryService;
import com.supervision.service.AskTemplateQuestionSimilarityService;
import com.supervision.service.CommonDicService;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
@ -47,6 +48,8 @@ public class VecTest {
private CommonDicService commonDicService;
@Autowired
private AskPatientAnswerService askPatientAnswerService;
@Autowired
private AskTemplateQuestionSimilarityService askTemplateQuestionSimilarityService;
@Test
public void questionCompareGenerateTest() {
@ -117,9 +120,9 @@ public class VecTest {
@Test
public void questionEqualGenerateTest() {
List<AskTemplateQuestionLibrary> libraries = askTemplateQuestionLibraryService.list()
.stream().peek(library -> library.getQuestion().forEach(StrUtil::trim))
.collect(Collectors.toList());
// askTemplateQuestionSimilarityService
List<AskTemplateQuestionLibrary> libraries = askTemplateQuestionLibraryService.list();
Map<String, List<String>> similarQuestionMap = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(libraries);
List<CommonDic> commonDics = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").list();
Map<Long, CommonDic> dicMap = commonDics.stream().collect(Collectors.toMap(CommonDic::getId, v -> v));
@ -127,14 +130,14 @@ public class VecTest {
// 构建问题map id -->> question --->> library
Map<String, Map<String, AskTemplateQuestionLibrary>> questionMap = new HashMap<>();
for (AskTemplateQuestionLibrary library : libraries) {
Map<String, AskTemplateQuestionLibrary> map = library.getQuestion().stream().collect(Collectors.toMap(v -> v, v -> library));
Map<String, AskTemplateQuestionLibrary> map = similarQuestionMap.get(library.getId()).stream().collect(Collectors.toMap(v -> v, v -> library));
questionMap.put(library.getId(), map);
}
// 循环处理数据
List<Map<String, Object>> result = new ArrayList<>();
for (AskTemplateQuestionLibrary library : libraries) {
List<String> questionList = library.getQuestion();
List<String> questionList = similarQuestionMap.get(library.getId());
for (String sourceQuestion : questionList) {
//确认同组数据中是否存在相同的问题
long count = questionList.stream().filter(v -> StrUtil.equals(sourceQuestion, v)).count();
@ -201,6 +204,7 @@ public class VecTest {
public void questionSimilarityGenerateTest() {
List<AskTemplateQuestionLibrary> questionLibraries = askTemplateQuestionLibraryService.list();
Map<String, List<String>> similarQuestionMap = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(questionLibraries);
List<CommonDic> commonDics = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").list();
Map<Long, CommonDic> dicMap = commonDics.stream().collect(Collectors.toMap(CommonDic::getId, v -> v));
@ -209,7 +213,7 @@ public class VecTest {
List<Map<String, Object>> result = new ArrayList<>();
for (AskTemplateQuestionLibrary questionLibrary : questionLibraries) {
List<String> questionList = questionLibrary.getQuestion();
List<String> questionList = similarQuestionMap.get(questionLibrary.getId());
for (String question : questionList) {
List<Map<String, Object>> maps = questionMatch(question);
if (CollUtil.isEmpty(maps)) {
@ -256,13 +260,14 @@ public class VecTest {
@Test
public void questionSimilarityTopGenerateTest() {
List<AskTemplateQuestionLibrary> questionLibraries = askTemplateQuestionLibraryService.list();
Map<String, List<String>> similarQuestionMap = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(questionLibraries);
List<CommonDic> commonDics = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").list();
Map<Long, CommonDic> dicMap = commonDics.stream().collect(Collectors.toMap(CommonDic::getId, v -> v));
Map<String, AskTemplateQuestionLibrary> libraryMap = questionLibraries.stream().collect(Collectors.toMap(AskTemplateQuestionLibrary::getId, library -> library));
List<Map<String, Object>> result = new ArrayList<>();
for (AskTemplateQuestionLibrary questionLibrary : questionLibraries) {
for (String question : questionLibrary.getQuestion()) {
for (String question : similarQuestionMap.get(questionLibrary.getId())) {
List<Map<String, Object>> maps = questionMatch(question);
// 只获取前四条数据
@ -407,12 +412,12 @@ public class VecTest {
@Test
public void initVecData() {
List<AskTemplateQuestionLibrary> questionLibraries = askTemplateQuestionLibraryService.list();
Map<String, List<String>> similarQuestionMap = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(questionLibraries);
// load vec data
List<Map<String, Object>> vecData = questionLibraries.stream().map(library -> {
Map<String, Object> map = new HashMap<>();
map.put("questionCode", library.getId());
map.put("questionList", library.getQuestion());
map.put("questionList", similarQuestionMap.get(library.getId()));
return map;
}).collect(Collectors.toList());
saveVec(vecData);
@ -434,11 +439,12 @@ public class VecTest {
@Test
public void initQuestionJoinVecData() {
List<AskTemplateQuestionLibrary> questionLibraries = askTemplateQuestionLibraryService.list();
Map<String, List<String>> similarQuestionMap = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(questionLibraries);
// load vec data
List<Map<String, Object>> vecData = questionLibraries.stream().map(library -> {
Map<String, Object> map = new HashMap<>();
map.put("questionCode", library.getId());
List<String> joinList = library.getQuestion().stream()
List<String> joinList = similarQuestionMap.get(library.getId()).stream()
.map(question -> question + " "/* + library.getDefaultAnswer()*/).collect(Collectors.toList());
map.put("questionList", joinList);
return map;
@ -453,11 +459,12 @@ public class VecTest {
List<AskPatientAnswer> answerList = askPatientAnswerService.lambdaQuery().eq(AskPatientAnswer::getMedicalId, medicalId).list();
Map<String, AskPatientAnswer> answerMap = answerList.stream().collect(Collectors.toMap(AskPatientAnswer::getLibraryQuestionId, v -> v));
List<AskTemplateQuestionLibrary> questionLibraries = askTemplateQuestionLibraryService.list();
Map<String, List<String>> similarQuestionMap = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(questionLibraries);
List<Map<String, Object>> result = new ArrayList<>();
for (AskTemplateQuestionLibrary questionLibrary : questionLibraries) {
if (!questionLibrary.getDescription().contains(questionLibrary.getDescription())) {
/*if (!questionLibrary.getDescription().contains(questionLibrary.getDescription())) {
questionLibrary.getQuestion().add(questionLibrary.getDescription());
}
}*/
AskPatientAnswer askPatientAnswer = answerMap.get(questionLibrary.getId());
if (ObjectUtil.isEmpty(askPatientAnswer)) {
@ -466,7 +473,7 @@ public class VecTest {
}
Map<String, Object> map = new HashMap<>();
map.put("questionCode", questionLibrary.getId());
map.put("questionList", questionLibrary.getQuestion());
map.put("questionList", similarQuestionMap.get(questionLibrary.getId()));
result.add(map);
}
saveVec(result);
@ -591,19 +598,19 @@ public class VecTest {
Map<String, AskPatientAnswer> answerMap = answerList.stream().collect(Collectors.toMap(AskPatientAnswer::getLibraryQuestionId, v -> v));
List<AskTemplateQuestionLibrary> questionLibraries = askTemplateQuestionLibraryService.list();
Map<String, List<String>> similarQuestionMap = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(questionLibraries);
List<Map<String, Object>> result = new ArrayList<>();
for (AskTemplateQuestionLibrary questionLibrary : questionLibraries) {
if (!questionLibrary.getDescription().contains(questionLibrary.getDescription())) {
/*if (!questionLibrary.getDescription().contains(questionLibrary.getDescription())) {
questionLibrary.getQuestion().add(questionLibrary.getDescription());
}
}*/
AskPatientAnswer askPatientAnswer = answerMap.get(questionLibrary.getId());
if (ObjectUtil.isEmpty(askPatientAnswer)) {
log.info("问题id:{} desc:{},未设置回复答案,跳过", questionLibrary.getId(), questionLibrary.getDescription());
continue;
}
for (String question : questionLibrary.getQuestion()) {
for (String question : similarQuestionMap.get(questionLibrary.getId())) {
HashMap<String, Object> map = new HashMap<>();
map.put("Q", question);
map.put("A", askPatientAnswer.getAnswer());
@ -622,11 +629,11 @@ public class VecTest {
@Test
public void questionListClean() {
List<AskTemplateQuestionLibrary> questionLibraries = askTemplateQuestionLibraryService.lambdaQuery().eq(AskTemplateQuestionLibrary::getId, "1761963910199513090").orderByDesc(AskTemplateQuestionLibrary::getId).list();
Map<String, List<String>> similarQuestionMap = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryLists(questionLibraries);
Console console = System.console();
for (AskTemplateQuestionLibrary questionLibrary : questionLibraries) {
String description = questionLibrary.getDescription();
List<String> question = questionLibrary.getQuestion();
List<String> question = similarQuestionMap.get(questionLibrary.getId());
List<String> addList = new ArrayList<>();

Loading…
Cancel
Save