Merge branch 'dev_1.0.0' into ocr_branch

topo_dev
xueqingkun 9 months ago
commit 4279a55f59

@ -3,7 +3,11 @@ package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.supervision.police.domain.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.supervision.police.domain.CasePerson;
import com.supervision.police.domain.NotePrompt;
import com.supervision.police.domain.NoteRecordSplit;
import com.supervision.police.domain.TripleInfo;
import com.supervision.police.service.*; import com.supervision.police.service.*;
import com.supervision.thread.TripleExtractTask; import com.supervision.thread.TripleExtractTask;
import com.supervision.thread.TripleExtractTaskPool; import com.supervision.thread.TripleExtractTaskPool;
@ -11,11 +15,13 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.ollama.OllamaChatClient; import org.springframework.ai.ollama.OllamaChatClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -33,6 +39,8 @@ public class ExtractTripleInfoServiceImpl implements ExtractTripleInfoService {
private final OllamaChatClient chatClient; private final OllamaChatClient chatClient;
private final CasePersonService casePersonService;
@Autowired @Autowired
private NoteRecordSplitService noteRecordSplitService; private NoteRecordSplitService noteRecordSplitService;
@ -58,6 +66,10 @@ public class ExtractTripleInfoServiceImpl implements ExtractTripleInfoService {
log.warn("extractTripleInfo:笔录片段:{},笔录分类:{} 不属于任何提示词,不进行后续操作...", recordSplit.getId(), recordSplit.getRecordType()); log.warn("extractTripleInfo:笔录片段:{},笔录分类:{} 不属于任何提示词,不进行后续操作...", recordSplit.getId(), recordSplit.getRecordType());
return; return;
} }
QueryWrapper<CasePerson> wrapper = new QueryWrapper<>();
wrapper.eq("case_id", caseId);
wrapper.eq("case_actor_flag", 1);
CasePerson mainActor = casePersonService.getOne(wrapper);
List<TripleExtractTask> taskList = notePromptList.stream() List<TripleExtractTask> taskList = notePromptList.stream()
.filter(prompt -> StrUtil.isNotBlank(prompt.getPrompt())) .filter(prompt -> StrUtil.isNotBlank(prompt.getPrompt()))
@ -65,7 +77,7 @@ public class ExtractTripleInfoServiceImpl implements ExtractTripleInfoService {
caseTaskRecordService.taskCountIncrement(caseId, recordSplit.getNoteRecordId()); caseTaskRecordService.taskCountIncrement(caseId, recordSplit.getNoteRecordId());
log.info("extractTripleInfo:三元组抽取任务数量加1,笔录片段id:{}", prompt.getId()); log.info("extractTripleInfo:三元组抽取任务数量加1,笔录片段id:{}", prompt.getId());
}) })
.map(prompt -> new TripleExtractTask(chatClient, prompt, recordSplit,postExtractTriple())).toList(); .map(prompt -> new TripleExtractTask(chatClient, prompt, recordSplit, postExtractTriple(), mainActor)).toList();
if (CollUtil.isEmpty(taskList)) { if (CollUtil.isEmpty(taskList)) {
log.info("extractTripleInfo:笔录片段:{} 没有可用的提示词,不提交任何任务...", recordSplit.getId()); log.info("extractTripleInfo:笔录片段:{} 没有可用的提示词,不提交任何任务...", recordSplit.getId());

@ -117,12 +117,17 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
if (caseTaskRecordOpt.isEmpty()) { if (caseTaskRecordOpt.isEmpty()) {
log.info("recordProcessTaskStatusCheck:recordId:{}未查询到任务记录, 新建任务记录...",recordId);
CaseTaskRecord newCaseTaskRecord = new CaseTaskRecord(); CaseTaskRecord newCaseTaskRecord = new CaseTaskRecord();
newCaseTaskRecord.setCaseId(caseId); newCaseTaskRecord.setCaseId(caseId);
newCaseTaskRecord.setRecordId(recordId); newCaseTaskRecord.setRecordId(recordId);
newCaseTaskRecord.setStatus(1);
newCaseTaskRecord.setStatus(splitSize > 0 ? 1 : 2);
newCaseTaskRecord.setSubmitTime(LocalDateTime.now()); newCaseTaskRecord.setSubmitTime(LocalDateTime.now());
return caseTaskRecordService.save(newCaseTaskRecord); caseTaskRecordService.save(newCaseTaskRecord);
return newCaseTaskRecord.getStatus().equals(1);
} }
if (0 == splitSize) { if (0 == splitSize) {

@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
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 cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.supervision.police.domain.CasePerson;
import com.supervision.police.domain.NotePrompt; import com.supervision.police.domain.NotePrompt;
import com.supervision.police.domain.NoteRecordSplit; import com.supervision.police.domain.NoteRecordSplit;
import com.supervision.police.domain.TripleInfo; import com.supervision.police.domain.TripleInfo;
@ -22,6 +23,7 @@ import java.util.function.Consumer;
@Slf4j @Slf4j
public class TripleExtractTask implements Callable<TripleInfo> { public class TripleExtractTask implements Callable<TripleInfo> {
private static final String HEAD_ENTITY_TYPE_ACTOR = "行为人";
private final OllamaChatClient chatClient; private final OllamaChatClient chatClient;
@ -31,12 +33,15 @@ public class TripleExtractTask implements Callable<TripleInfo> {
private final Consumer<NoteRecordSplit> consumer; private final Consumer<NoteRecordSplit> consumer;
private final CasePerson mainActor;
public TripleExtractTask(OllamaChatClient chatClient, NotePrompt prompt, NoteRecordSplit noteRecordSplit, Consumer<NoteRecordSplit> consumer) {
public TripleExtractTask(OllamaChatClient chatClient, NotePrompt prompt, NoteRecordSplit noteRecordSplit, Consumer<NoteRecordSplit> consumer, CasePerson mainActor) {
this.chatClient = chatClient; this.chatClient = chatClient;
this.noteRecordSplit = noteRecordSplit; this.noteRecordSplit = noteRecordSplit;
this.prompt = prompt; this.prompt = prompt;
this.consumer = consumer; this.consumer = consumer;
this.mainActor = mainActor;
} }
@ -48,7 +53,7 @@ public class TripleExtractTask implements Callable<TripleInfo> {
* 3. * 3.
* 4. !! * 4. !!
* 5. ,, * 5. ,,
* * <p>
* "{headEntityType}";"{tailEntityType}","{relation}" * "{headEntityType}";"{tailEntityType}","{relation}"
* json:{"result":[]} * json:{"result":[]}
* --- * ---
@ -61,7 +66,7 @@ public class TripleExtractTask implements Callable<TripleInfo> {
* {question} * {question}
* {answer} * {answer}
* --- * ---
* * <p>
* json: * json:
* {"result":[{"headEntity": {"type": "{headEntityType}","name":"提取到的头实体内容1"},"relation": "{relation}","tailEntity": {"type": "{tailEntityType}","name": "提取到的尾实体内容1"}}]} * {"result":[{"headEntity": {"type": "{headEntityType}","name":"提取到的头实体内容1"},"relation": "{relation}","tailEntity": {"type": "{tailEntityType}","name": "提取到的尾实体内容1"}}]}
*/ */
@ -116,6 +121,9 @@ public class TripleExtractTask implements Callable<TripleInfo> {
paramMap.put("tailEntityType", prompt.getEndEntityType()); paramMap.put("tailEntityType", prompt.getEndEntityType());
paramMap.put("question", noteRecordSplit.getQuestion()); paramMap.put("question", noteRecordSplit.getQuestion());
paramMap.put("answer", noteRecordSplit.getAnswer()); paramMap.put("answer", noteRecordSplit.getAnswer());
if (mainActor != null && HEAD_ENTITY_TYPE_ACTOR.equals(prompt.getStartEntityType())) {
paramMap.put("requirement", "当前案件的行为人是" + mainActor.getName() + ",只尝试提取" + mainActor.getName() + "为头结点的三元组。");
}
String format = StrUtil.format(prompt.getPrompt(), paramMap); String format = StrUtil.format(prompt.getPrompt(), paramMap);
log.info("提示词内容:{}", format); log.info("提示词内容:{}", format);
@ -127,7 +135,8 @@ public class TripleExtractTask implements Callable<TripleInfo> {
return new TripleRecord(format, content); return new TripleRecord(format, content);
} }
record TripleRecord(String question, String answer){} record TripleRecord(String question, String answer) {
}
@Data @Data
public static class TripleExtractResult { public static class TripleExtractResult {

Loading…
Cancel
Save