diff --git a/src/main/java/com/supervision/thread/TripleExtractThread.java b/src/main/java/com/supervision/thread/TripleExtractThread.java index 6048fbe..231b6d5 100644 --- a/src/main/java/com/supervision/thread/TripleExtractThread.java +++ b/src/main/java/com/supervision/thread/TripleExtractThread.java @@ -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 { 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()) {