|
|
|
@ -1,5 +1,6 @@
|
|
|
|
|
package com.supervision.thread;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
|
@ -8,12 +9,14 @@ import com.supervision.police.domain.TripleInfo;
|
|
|
|
|
import lombok.Data;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.ai.chat.ChatResponse;
|
|
|
|
|
import org.springframework.ai.chat.messages.SystemMessage;
|
|
|
|
|
import org.springframework.ai.chat.messages.UserMessage;
|
|
|
|
|
import org.springframework.ai.chat.prompt.Prompt;
|
|
|
|
|
import org.springframework.ai.ollama.OllamaChatClient;
|
|
|
|
|
import org.springframework.util.StopWatch;
|
|
|
|
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.concurrent.Callable;
|
|
|
|
@ -83,15 +86,20 @@ public class TripleExtractThread implements Callable<TripleInfo> {
|
|
|
|
|
paramMap.put("tailEntityType", prompt.getEndEntityType());
|
|
|
|
|
paramMap.put("question", question);
|
|
|
|
|
paramMap.put("answer", answer);
|
|
|
|
|
Prompt ask = new Prompt(new UserMessage(StrUtil.format(prompt.getPrompt(), paramMap)));
|
|
|
|
|
String format = StrUtil.format(prompt.getPrompt(), paramMap);
|
|
|
|
|
// 对format进行切分,把前面两个---作为systemPrompt
|
|
|
|
|
String[] split = format.split("---");
|
|
|
|
|
SystemMessage systemMessage = new SystemMessage(split[0]);
|
|
|
|
|
UserMessage userMessage = new UserMessage(split[1]);
|
|
|
|
|
Prompt ask = new Prompt(List.of(systemMessage, userMessage));
|
|
|
|
|
ChatResponse call = chatClient.call(ask);
|
|
|
|
|
stopWatch.stop();
|
|
|
|
|
String content = call.getResult().getOutput().getContent();
|
|
|
|
|
log.info("耗时:{},分析的结果是:{}", stopWatch.getTotalTimeSeconds(), content);
|
|
|
|
|
// 获取从提示词中提取到的三元组信息
|
|
|
|
|
TripleExtractResult extractResult = JSONUtil.toBean(content, TripleExtractResult.class);
|
|
|
|
|
if (ObjectUtil.isEmpty(extractResult) || extractResult.result.isEmpty()) {
|
|
|
|
|
log.info("提取三元组信息为空,忽略");
|
|
|
|
|
if (ObjectUtil.isEmpty(extractResult) || CollUtil.isEmpty(extractResult.getResult())) {
|
|
|
|
|
log.info("提取三元组信息为空,忽略.提取的内容为:{}",content);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
for (TripleExtractNode tripleExtractNode : extractResult.getResult()) {
|
|
|
|
|