| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- package com.seeckg.knowledgegraph_backend.service;
- import com.seeckg.knowledgegraph_backend.enums.ReturnCode;
- import com.seeckg.knowledgegraph_backend.enums.questionAnsweringType;
- import com.seeckg.knowledgegraph_backend.pojo.Knowledge;
- import com.seeckg.knowledgegraph_backend.pojo.Response;
- import com.seeckg.knowledgegraph_backend.remote.GPTRemoteService;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.ArrayList;
- import java.util.List;
- @Service
- @Slf4j
- public class QuestionAnsweringService {
- @Resource
- GPTRemoteService gptRemoteService;
- KnowledgeService knowledgeService;
- /**
- * 选择本地问答或在线问答
- * 返回的数据格式是String
- * @return 包含上述数据的Response
- */
- public Response getAnswer(int type, String question) {
- if (type == questionAnsweringType.OFFLINE.ordinal()) {
- return getOfflineAnswer(question);
- }
- else if (type == questionAnsweringType.ONLINE.ordinal()) {
- return getOnlineAnswer(question);
- }
- return Response.buildFailed(ReturnCode.PARAM_ERROR.getCode(), "问答类型不存在!");
- }
- /**
- * 获取本地问答结果
- * 返回的数据格式是String
- * @return 包含上述数据的Response
- */
- public Response getOfflineAnswer(String question) {
- String answer = "";
- List<Knowledge> allKnowledge = knowledgeService.getAllKnowledge();
- List<String> allKnowledgeText = new ArrayList<>();
- for (Knowledge knowledge : allKnowledge) {
- String context = knowledge.getContext().replace('\n', ' ');
- allKnowledgeText.add(context);
- }
- String contexts = String.join(" ", allKnowledgeText);
- try {
- String[] args1 = new String[] { "python", "..\\util\\OfflineQuestionAnsweringServive.py", question, contexts};
- Process proc = Runtime.getRuntime().exec(args1);
- BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
- String line = null;
- while ((line = in.readLine()) != null) {
- answer = line;
- // System.out.println(line);
- }
- in.close();
- proc.waitFor();
- } catch (IOException | InterruptedException e) {
- e.printStackTrace();
- return Response.buildFailed(ReturnCode.SERVER_ERROR.getCode(), "答案生成出错!");
- }
- return Response.buildSuccess(answer);
- }
- /**
- * 获取在线问答结果
- * 返回的数据格式是String
- * @return 包含上述数据的Response
- */
- public Response getOnlineAnswer(String question) {
- String answer = null;
- try {
- answer = gptRemoteService.getGPTAnswer(question);
- } catch (IOException e) {
- e.printStackTrace();
- return Response.buildFailed(ReturnCode.SERVER_ERROR.getCode(), "答案生成出错!");
- }
- return Response.buildSuccess(answer);
- }
- }
|