package com.supervision.handler.gpt; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.supervision.ai.AiUtil; import com.supervision.ai.dto.MessageDTO; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; import java.util.Map; @Slf4j @Component public class AnswerQuestionHandler { public String answerQuestion(String question, List detailList, Map talkRecord) { List messageList = new ArrayList<>(); messageList.add(new MessageDTO("system", "现在你是一个政务事项领域的问答大模型.\n" + "现在有一个问题,根据这个问题我查到了政策内容,并提供了用户问询过程中的对话记录,可供参考;\n" + "请你根据政策内容回答这个问题,请不要有文件内容之外的内容或加入你自己的话")); messageList.add(new MessageDTO("assistant", "好的")); messageList.add(new MessageDTO("user", StrUtil.format("政务文件内容:[{}]", CollUtil.join(detailList, ";")))); messageList.add(new MessageDTO("assistant", "继续")); messageList.add(new MessageDTO("user", StrUtil.format("问题:{}", question))); messageList.add(new MessageDTO("assistant", "继续")); if (CollUtil.isNotEmpty(talkRecord)) { List record = new ArrayList<>(); for (Map.Entry entry : talkRecord.entrySet()) { record.add("询问用户:" + entry.getKey()); record.add("用户回答:" + entry.getValue()); } messageList.add(new MessageDTO("user", "下面是用户回答过程中的对话记录,可供参考,并提供更精确的回答:{" + CollUtil.join(record, ";") + "}")); messageList.add(new MessageDTO("assistant", "继续")); } messageList.add(new MessageDTO("user", StrUtil.format("现在你可以回答了,如果你从文件内容中,没有提取到回答,你就回复:我暂时还不会这个问题哦!"))); log.info("answerQuestion的prompt是:{}", JSONUtil.toJsonStr(messageList)); String answer = AiUtil.chatByMessage(messageList); log.info("answerQuestion的答案是:{}", answer); return answer; } }