diff --git a/src/main/java/com/supervision/utils/DifyApiUtil.java b/src/main/java/com/supervision/utils/DifyApiUtil.java index eb5232e..e6d8640 100644 --- a/src/main/java/com/supervision/utils/DifyApiUtil.java +++ b/src/main/java/com/supervision/utils/DifyApiUtil.java @@ -10,10 +10,10 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.supervision.minio.domain.MinioFile; import com.supervision.minio.service.MinioService; -import com.supervision.police.vo.dify.ChatReqVO; -import com.supervision.police.vo.dify.ChatResVO; import com.supervision.police.vo.dify.DatasetReqVO; import com.supervision.police.vo.dify.DatasetResVO; +import com.supervision.police.vo.dify.DifyChatReqVO; +import com.supervision.police.vo.dify.DifyChatResVO; import lombok.extern.slf4j.Slf4j; import org.apache.hc.client5.http.ClientProtocolException; import org.apache.hc.client5.http.classic.methods.HttpDelete; @@ -31,6 +31,7 @@ import org.springframework.stereotype.Component; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import static com.supervision.common.constant.DifyConstants.*; @@ -49,22 +50,23 @@ public class DifyApiUtil { @Autowired private MinioService minioService; - public void chat(ChatReqVO chatReqVO) { + public DifyChatResVO chat(DifyChatReqVO difyChatReqVO) { + DifyChatResVO difyChatResVO = null; try (CloseableHttpClient httpClient = HttpClients.createDefault()) { HttpPost httpPost = new HttpPost(difyUrl + METHOD_CHAT_MESSAGES); httpPost.setHeader(HttpHeaders.AUTHORIZATION, difyAppAuth); httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); - log.info("发起对话:{}", chatReqVO); - StringEntity entity = new StringEntity(new JSONObject(chatReqVO).toString(), ContentType.APPLICATION_FORM_URLENCODED); + log.info("发起对话:{}", difyChatReqVO); + StringEntity entity = new StringEntity(com.alibaba.fastjson.JSONObject.toJSON(difyChatReqVO).toString(), StandardCharsets.UTF_8); httpPost.setEntity(entity); - ChatResVO chatResVO1 = httpClient.execute(httpPost, response -> { + difyChatResVO = httpClient.execute(httpPost, response -> { final int status = response.getCode(); if (status >= HttpStatus.SC_SUCCESS && status < HttpStatus.SC_REDIRECTION) { final HttpEntity responseEntity = response.getEntity(); try { String responseStr = EntityUtils.toString(responseEntity); - log.info("responseStr:{}", responseStr); - return new ChatResVO(); + log.info("发起对话成功!"); + return new Gson().fromJson(responseStr, DifyChatResVO.class); } catch (final ParseException ex) { throw new ClientProtocolException(ex); } @@ -73,10 +75,10 @@ public class DifyApiUtil { throw new ClientProtocolException("Unexpected response status: " + status); } }); - log.info("chatResVO1:{}", chatResVO1); } catch (Exception e) { - log.error("create dataset error", e); + log.error("发起对话失败", e); } + return difyChatResVO; } /** @@ -104,8 +106,7 @@ public class DifyApiUtil { final HttpEntity responseEntity = response.getEntity(); try { String responseStr = EntityUtils.toString(responseEntity); - Gson gson = new Gson(); - DatasetResVO datasetResVO = gson.fromJson(responseStr, DatasetResVO.class); + DatasetResVO datasetResVO = new Gson().fromJson(responseStr, DatasetResVO.class); log.info("创建知识库成功!ID:【{}】", datasetResVO.getId()); return datasetResVO.getId(); } catch (final ParseException ex) { @@ -225,18 +226,18 @@ public class DifyApiUtil { } } - public DocumentResult queryDocuments(String datasetId, int page, int size){ - cn.hutool.http.HttpRequest request = HttpUtil.createGet(difyUrl+ METHOD_DATASET + "/" + datasetId + METHOD_DOCUMENTS); - request.auth(difyDatasetAuth).form("page",page,"limit",size); + public DocumentResult queryDocuments(String datasetId, int page, int size) { + cn.hutool.http.HttpRequest request = HttpUtil.createGet(difyUrl + METHOD_DATASET + "/" + datasetId + METHOD_DOCUMENTS); + request.auth(difyDatasetAuth).form("page", page, "limit", size); - try (cn.hutool.http.HttpResponse execute = request.execute()){ + try (cn.hutool.http.HttpResponse execute = request.execute()) { String body = execute.body(); - if (200 != execute.getStatus()){ - log.error("queryDocuments:请求知识库文件列表接口出错error:{}",body); - throw new RuntimeException("queryDocuments:请求知识库文件列表接口出错error:"+body); + if (200 != execute.getStatus()) { + log.error("queryDocuments:请求知识库文件列表接口出错error:{}", body); + throw new RuntimeException("queryDocuments:请求知识库文件列表接口出错error:" + body); } DocumentResult documentResult = new Gson().fromJson(body, DocumentResult.class); - if (CollUtil.isNotEmpty(documentResult.getData())){ + if (CollUtil.isNotEmpty(documentResult.getData())) { documentResult.getData().forEach(document -> document.setFileId(decodeDocumentName(document.getName()).getValue())); } return documentResult; @@ -244,12 +245,12 @@ public class DifyApiUtil { } - public List queryDocuments(String datasetId){ + public List queryDocuments(String datasetId) { DocumentResult documentResult = queryDocuments(datasetId, 1, 100); List documents = new ArrayList<>(documentResult.getData()); - while (documentResult.isHas_more()){ - documentResult = queryDocuments(datasetId, documentResult.getPage()+1, 100); + while (documentResult.isHas_more()) { + documentResult = queryDocuments(datasetId, documentResult.getPage() + 1, 100); documents.addAll(documentResult.getData()); } @@ -259,20 +260,18 @@ public class DifyApiUtil { /** * 生成文档名称 + * * @param fileName 文件名 - * @param fileId 文件id + * @param fileId 文件id * @return 一个完整的文档名: 文件名 + "_" + 文件ID +"." + 后缀 */ public String generateDocumentName(String fileName, String fileId) { String[] split = fileName.split("\\."); - List nameTrunk = new ArrayList<>(); - for (int i = 0; i < split.length-1; i++) { - nameTrunk.add(split[i]); - } + List nameTrunk = new ArrayList<>(Arrays.asList(split).subList(0, split.length - 1)); String documentName = StrUtil.join(".", nameTrunk) + "_" + fileId; if (split.length > 1) { - documentName = documentName + "." + split[split.length -1]; + documentName = documentName + "." + split[split.length - 1]; } return documentName; } @@ -280,31 +279,26 @@ public class DifyApiUtil { /** * 解码文档名称 + * * @param documentName 文档名 * @return key:文件名,value:文件id */ - public Pair decodeDocumentName(String documentName){ + public Pair decodeDocumentName(String documentName) { - if (StrUtil.isEmpty(documentName)){ - return Pair.of(null,null); + if (StrUtil.isEmpty(documentName)) { + return Pair.of(null, null); } String[] firstSplit = documentName.split("\\."); - List nameTrunk = new ArrayList<>(); - for (int i = 0; i < firstSplit.length -1; i++) { - nameTrunk.add(firstSplit[i]); - } + List nameTrunk = new ArrayList<>(Arrays.asList(firstSplit).subList(0, firstSplit.length - 1)); String name = StrUtil.join(".", nameTrunk); String[] secondSplit = name.split("_"); - nameTrunk = new ArrayList<>(); - for (int i = 0; i < secondSplit.length -1; i++) { - nameTrunk.add(secondSplit[i]); - } + nameTrunk = new ArrayList<>(Arrays.asList(secondSplit).subList(0, secondSplit.length - 1)); - String completeName = StrUtil.join("_", nameTrunk) + "." + firstSplit[firstSplit.length-1]; - String fileId = secondSplit[secondSplit.length-1]; + String completeName = StrUtil.join("_", nameTrunk) + "." + firstSplit[firstSplit.length - 1]; + String fileId = secondSplit[secondSplit.length - 1]; - return Pair.of(completeName,fileId); + return Pair.of(completeName, fileId); } }