Merge remote-tracking branch 'origin/dev_1.0.0' into dev_1.0.0

# Conflicts:
#	src/main/java/com/supervision/chat/client/LangChainChatService.java
topo_dev
xueqingkun 9 months ago
commit 1f3bcb3142

@ -15,6 +15,8 @@ import org.springframework.web.service.annotation.GetExchange;
import org.springframework.web.service.annotation.HttpExchange; import org.springframework.web.service.annotation.HttpExchange;
import org.springframework.web.service.annotation.PostExchange; import org.springframework.web.service.annotation.PostExchange;
import java.util.List;
@HttpExchange @HttpExchange
public interface LangChainChatService { public interface LangChainChatService {
@ -23,7 +25,7 @@ public interface LangChainChatService {
* @param createBaseDTO * @param createBaseDTO
* @return * @return
*/ */
@PostExchange(url = "/knowledge_base/create_knowledge_base", contentType = MediaType.APPLICATION_JSON_VALUE) @PostExchange(url = "create_knowledge_base", contentType = MediaType.APPLICATION_JSON_VALUE)
LangChainChatRes createBase(@RequestBody CreateBaseDTO createBaseDTO); LangChainChatRes createBase(@RequestBody CreateBaseDTO createBaseDTO);
/** /**
@ -40,7 +42,7 @@ public interface LangChainChatService {
* @param docs {"test.txt":[{"page_content":"custom doc","metadata":{},"type":"Document"}]} * @param docs {"test.txt":[{"page_content":"custom doc","metadata":{},"type":"Document"}]}
* @return * @return
*/ */
@PostExchange(url = "/knowledge_base/upload_docs", contentType = MediaType.MULTIPART_FORM_DATA_VALUE) @PostExchange(url = "upload_docs", contentType = MediaType.MULTIPART_FORM_DATA_VALUE)
LangChainChatRes uploadFile(@RequestPart String knowledge_base_name, LangChainChatRes uploadFile(@RequestPart String knowledge_base_name,
@RequestPart MultipartFile files, @RequestPart MultipartFile files,
@RequestPart String text_splitter_type, @RequestPart String text_splitter_type,
@ -57,14 +59,14 @@ public interface LangChainChatService {
* @param deleteFileDTO * @param deleteFileDTO
* @return * @return
*/ */
@PostExchange(url = "/knowledge_base/delete_docs", contentType = MediaType.APPLICATION_JSON_VALUE) @PostExchange(url = "delete_docs", contentType = MediaType.APPLICATION_JSON_VALUE)
LangChainChatRes deleteFile(@RequestBody DeleteFileDTO deleteFileDTO); LangChainChatRes<Object> deleteFile(@RequestBody DeleteFileDTO deleteFileDTO);
@GetExchange(url = "/knowledge_base/list_files") @GetExchange(url = "list_files")
LangChainChatRes queryFileList(@RequestParam String knowledge_base_name); LangChainChatRes<List<String>> queryFileList(@RequestParam String knowledge_base_name);
@PostExchange(url = "/knowledge_base/delete_knowledge_base", contentType = MediaType.APPLICATION_JSON_VALUE) @PostExchange(url = "/delete_knowledge_base", contentType = MediaType.APPLICATION_JSON_VALUE)
LangChainChatRes deleteBase(@RequestBody String knowledge_base_name); LangChainChatRes<Object> deleteBase(@RequestBody String knowledge_base_name);
@PostExchange(url = "/comDictionary/queryByType", contentType = MediaType.APPLICATION_JSON_VALUE) @PostExchange(url = "/comDictionary/queryByType", contentType = MediaType.APPLICATION_JSON_VALUE)
R<?> findDictionaryListByType(); R<?> findDictionaryListByType();

@ -3,11 +3,11 @@ package com.supervision.chat.client.dto;
import lombok.Data; import lombok.Data;
@Data @Data
public class LangChainChatRes { public class LangChainChatRes <T> {
private Integer code; private Integer code;
private String msg; private String msg;
private Object data; private T data;
} }

@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.chat.UploadParamEnum;
import com.supervision.chat.client.LangChainChatService; import com.supervision.chat.client.LangChainChatService;
import com.supervision.chat.client.dto.CreateBaseDTO; import com.supervision.chat.client.dto.CreateBaseDTO;
import com.supervision.chat.client.dto.LangChainChatRes; import com.supervision.chat.client.dto.LangChainChatRes;
@ -247,6 +248,7 @@ public class ModelCaseServiceImpl extends ServiceImpl<ModelCaseMapper, ModelCase
if (update){ if (update){
caseStatusManageService.whenSaveCasePeople(person.getCaseId(), person); caseStatusManageService.whenSaveCasePeople(person.getCaseId(), person);
} }
return update; return update;
} }

@ -51,11 +51,11 @@ public class NoteRecordServiceImpl extends ServiceImpl<NoteRecordMapper, NoteRec
return; return;
} }
// 查询知识库中已经存在的文件 // 查询知识库中已经存在的文件
LangChainChatRes queryFileListRes = langChainChatService.queryFileList(modelCase.getCaseNo()); LangChainChatRes<List<String>> queryFileListRes = langChainChatService.queryFileList(modelCase.getCaseNo());
if (!queryFileListRes.getCode().equals(200)) { if (!queryFileListRes.getCode().equals(200)) {
log.info("获取知识库已存在的文件失败"); log.info("获取知识库已存在的文件失败");
} }
HashSet<String> knowledgeFileNameSet = new HashSet<>(JSONUtil.toList((String) queryFileListRes.getData(), String.class)); HashSet<String> knowledgeFileNameSet = new HashSet<>(queryFileListRes.getData());
Set<String> databaseFileNameSet = new HashSet<>(); Set<String> databaseFileNameSet = new HashSet<>();
for (NoteRecord record : recordList) { for (NoteRecord record : recordList) {
for (String fileId : record.getFileIds().split(",")) { for (String fileId : record.getFileIds().split(",")) {

@ -1,6 +1,7 @@
package com.supervision.police.service.impl; package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -31,6 +32,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -107,6 +111,7 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
} }
String context = WordReadUtil.readWord(inputStream); String context = WordReadUtil.readWord(inputStream);
List<QARecordNodeDTO> qaList = RecordRegexUtil.recordRegex(context, record.getName()); List<QARecordNodeDTO> qaList = RecordRegexUtil.recordRegex(context, record.getName());
log.info("拆分问答对:{}",qaList.size());
List<NoteRecordSplit> splitList = new ArrayList<>(); List<NoteRecordSplit> splitList = new ArrayList<>();
for (QARecordNodeDTO qa : qaList) { for (QARecordNodeDTO qa : qaList) {
try { try {
@ -126,7 +131,7 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
} }
} }
// 创建任务之后,再开始 // 创建任务之后,再开始
boolean taskStatus = saveRecordProcessTask(record.getCaseId(), record.getId()); boolean taskStatus = saveRecordProcessTask(record.getCaseId(), record.getId(), qaList.size());
// 如果校验结果为true,则说明需要进行分类以及三元组操作 // 如果校验结果为true,则说明需要进行分类以及三元组操作
if (taskStatus) { if (taskStatus) {
// 对笔录进行分类,并对笔录进行提取三元组 // 对笔录进行分类,并对笔录进行提取三元组
@ -147,7 +152,7 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
* @param recordId * @param recordId
* @return , true, , false * @return , true, , false
*/ */
private boolean saveRecordProcessTask(String caseId, String recordId) { private boolean saveRecordProcessTask(String caseId, String recordId,Integer splitSize) {
// 首先查询是否存在任务,如果不存在,就新建 // 首先查询是否存在任务,如果不存在,就新建
Optional<CaseTaskRecord> caseTaskRecordOpt = caseTaskRecordService.lambdaQuery() Optional<CaseTaskRecord> caseTaskRecordOpt = caseTaskRecordService.lambdaQuery()
.eq(CaseTaskRecord::getCaseId, caseId).eq(CaseTaskRecord::getRecordId, recordId).oneOpt(); .eq(CaseTaskRecord::getCaseId, caseId).eq(CaseTaskRecord::getRecordId, recordId).oneOpt();
@ -158,7 +163,16 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
newCaseTaskRecord.setStatus(1); newCaseTaskRecord.setStatus(1);
newCaseTaskRecord.setSubmitTime(LocalDateTime.now()); newCaseTaskRecord.setSubmitTime(LocalDateTime.now());
return caseTaskRecordService.save(newCaseTaskRecord); return caseTaskRecordService.save(newCaseTaskRecord);
} else { } else if (0 == splitSize) {
// 如果笔录对为0,就直接不需要拆分,直接认为任务成功
CaseTaskRecord newCaseTaskRecord = new CaseTaskRecord();
newCaseTaskRecord.setCaseId(caseId);
newCaseTaskRecord.setRecordId(recordId);
newCaseTaskRecord.setStatus(2);
newCaseTaskRecord.setSubmitTime(LocalDateTime.now());
caseTaskRecordService.save(newCaseTaskRecord);
return false;
}else {
// 如果存在,则校验时间是否已经超过1天,如果超过了1天还没有执行完毕,就重新提交这个任务 // 如果存在,则校验时间是否已经超过1天,如果超过了1天还没有执行完毕,就重新提交这个任务
CaseTaskRecord caseTaskRecord = caseTaskRecordOpt.get(); CaseTaskRecord caseTaskRecord = caseTaskRecordOpt.get();
// 如果未执行,则提交执行 // 如果未执行,则提交执行

@ -15,7 +15,10 @@ import java.util.regex.Pattern;
public class RecordRegexUtil { public class RecordRegexUtil {
// 创建正则表达式Pattern对象允许问题和答案之间有任意数量的换行符 // 创建正则表达式Pattern对象允许问题和答案之间有任意数量的换行符
private static final Pattern pattern = Pattern.compile("(问:)(.*?)(答:)(.*?)(?=问:|\n$)", Pattern.DOTALL); // private static final Pattern pattern = Pattern.compile("(问:| 问:)(.*?)(答:|答:)(.*?)(?=问:|问:| \n$)", Pattern.DOTALL);
private static final Pattern pattern = Pattern.compile("(问[:](.*?))\\s*答[:](.*?)(?=(问[:]|$))", Pattern.DOTALL);
public static List<QARecordNodeDTO> recordRegex(String content, String answerName) { public static List<QARecordNodeDTO> recordRegex(String content, String answerName) {

@ -63,7 +63,7 @@ public class WordReadUtil {
List<XWPFParagraph> paragraphs = document.getParagraphs(); List<XWPFParagraph> paragraphs = document.getParagraphs();
// 遍历所有段落并打印文本 // 遍历所有段落并打印文本
for (XWPFParagraph paragraph : paragraphs) { for (XWPFParagraph paragraph : paragraphs) {
stringBuilder.append(paragraph.getText()); stringBuilder.append(paragraph.getText()).append("\n");
} }
} catch (Exception e) { } catch (Exception e) {
log.error("获取笔录内容失败",e); log.error("获取笔录内容失败",e);

Loading…
Cancel
Save