|
@@ -1,25 +1,35 @@
|
|
package com.example.demo.service;
|
|
package com.example.demo.service;
|
|
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.example.demo.model.DifyChatMessageDTO;
|
|
import com.example.demo.model.DifyChatMessageDTO;
|
|
import com.example.demo.model.DifyGetNumVO;
|
|
import com.example.demo.model.DifyGetNumVO;
|
|
|
|
+import com.example.demo.model.common.ChatMessageDTO;
|
|
|
|
+import com.example.demo.model.common.DifyHistoryMessageDTO;
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.JsonArray;
|
|
import com.google.gson.JsonArray;
|
|
-import okhttp3.MediaType;
|
|
|
|
-import okhttp3.OkHttpClient;
|
|
|
|
-import okhttp3.Request;
|
|
|
|
-import okhttp3.RequestBody;
|
|
|
|
|
|
+import okhttp3.*;
|
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
|
+import org.springframework.http.HttpHeaders;
|
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
+import reactor.core.publisher.Flux;
|
|
|
|
|
|
|
|
+import java.io.BufferedReader;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
|
+import java.io.Reader;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
@Service
|
|
@Service
|
|
public class DifyService {
|
|
public class DifyService {
|
|
|
|
+ private final String url = "http://192.168.2.24/v1/";
|
|
|
|
+ private final String apiKey="app-ekzGTtvRnSq2aSqwZqKG5EH3";
|
|
|
|
+ @Value("${FileDownloadUrl}")
|
|
|
|
+ private String filePath;
|
|
public String chatMessage(DifyChatMessageDTO difyChatMessageDTO, String key) throws IOException {
|
|
public String chatMessage(DifyChatMessageDTO difyChatMessageDTO, String key) throws IOException {
|
|
- String url = "https://ai.xsip.cn/v1/";
|
|
|
|
|
|
+ String url = "http://192.168.2.24/v1/";
|
|
String param = new Gson().toJson(difyChatMessageDTO);
|
|
String param = new Gson().toJson(difyChatMessageDTO);
|
|
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
|
|
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
|
|
OkHttpClient okHttpClient = new OkHttpClient.Builder()
|
|
OkHttpClient okHttpClient = new OkHttpClient.Builder()
|
|
@@ -74,4 +84,148 @@ public class DifyService {
|
|
vos = JSONArray.parseArray(answer, DifyGetNumVO.class);
|
|
vos = JSONArray.parseArray(answer, DifyGetNumVO.class);
|
|
return vos;
|
|
return vos;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public Flux<String> getOkhttp(ChatMessageDTO chatMessageDTO) {
|
|
|
|
+
|
|
|
|
+ String conversationId = chatMessageDTO.getConversationId();
|
|
|
|
+ if(conversationId!=null&&conversationId.equals("null")){
|
|
|
|
+ conversationId=null;
|
|
|
|
+ }
|
|
|
|
+ String userId = "1";
|
|
|
|
+ String query = chatMessageDTO.getQuery();
|
|
|
|
+ String fileGuid =chatMessageDTO.getFileId();
|
|
|
|
+ String temConversationId = conversationId;
|
|
|
|
+ String askType =chatMessageDTO.getAskType();
|
|
|
|
+ String dataResult=chatMessageDTO.getDataResult();
|
|
|
|
+ OkHttpClient client = new OkHttpClient.Builder()
|
|
|
|
+ .connectTimeout(600, TimeUnit.SECONDS)
|
|
|
|
+ .writeTimeout(600, TimeUnit.SECONDS)
|
|
|
|
+ .readTimeout(600, TimeUnit.SECONDS)
|
|
|
|
+ .build();
|
|
|
|
+
|
|
|
|
+ DifyChatMessageDTO difyChatMessageDTO = new DifyChatMessageDTO();
|
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
|
+ String fileContent = filePath +fileGuid ;
|
|
|
|
+ map.put("data_result",dataResult);
|
|
|
|
+ map.put("file_path", fileContent);
|
|
|
|
+ map.put("ask_type", askType);
|
|
|
|
+ difyChatMessageDTO.setInputs(map);
|
|
|
|
+ difyChatMessageDTO.setConversationId(conversationId);
|
|
|
|
+ difyChatMessageDTO.setResponseMode("streaming");
|
|
|
|
+ difyChatMessageDTO.setUser(userId);
|
|
|
|
+ difyChatMessageDTO.setQuery(query);
|
|
|
|
+ difyChatMessageDTO.setFiles(new ArrayList<>());
|
|
|
|
+
|
|
|
|
+ String param = new Gson().toJson(difyChatMessageDTO);
|
|
|
|
+ RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
|
|
|
|
+ Request request = this.getChatMessageRequest(requestBody);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ return Flux.create(emitter -> {
|
|
|
|
+ client.newCall(request).enqueue(new Callback() {
|
|
|
|
+ @Override
|
|
|
|
+ public void onFailure(Call call, IOException e) {
|
|
|
|
+ emitter.error(e);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void onResponse(Call call, Response response) throws IOException {
|
|
|
|
+
|
|
|
|
+ if (!response.isSuccessful()) {
|
|
|
|
+ emitter.error(new IOException("Unexpected code: " + response));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ try (Reader reader = response.body().charStream()) {
|
|
|
|
+ BufferedReader bufferedReader = new BufferedReader(reader);
|
|
|
|
+ String line;
|
|
|
|
+ String temConversationId2 = temConversationId;
|
|
|
|
+ String prefixToRemove = "data: ";
|
|
|
|
+ while ((line = bufferedReader.readLine()) != null) {
|
|
|
|
+ if (line.isEmpty()) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (line.startsWith(prefixToRemove)) {
|
|
|
|
+ line = line.substring(prefixToRemove.length());
|
|
|
|
+ }
|
|
|
|
+ emitter.next(line); // 将每行数据发送到 Flux
|
|
|
|
+ }
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ emitter.error(e);
|
|
|
|
+ } finally {
|
|
|
|
+ emitter.complete();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+// return Flux.create(eimtter->{
|
|
|
|
+// new Thread(()->{
|
|
|
|
+// eimtter.next("{\"content\":\"\",\"event\":\"all_start\",\"field\":\"\",\"id\":2142}\t\n");
|
|
|
|
+// eimtter.next("你好");
|
|
|
|
+// try {
|
|
|
|
+// Thread.sleep(10000);
|
|
|
|
+// }
|
|
|
|
+// catch (Exception e){
|
|
|
|
+//
|
|
|
|
+// }
|
|
|
|
+// eimtter.next("你好2");
|
|
|
|
+// eimtter.complete();
|
|
|
|
+// }).start();
|
|
|
|
+//
|
|
|
|
+//
|
|
|
|
+// });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public Request getChatMessageRequest(RequestBody requestBody) {
|
|
|
|
+ Request request = new Request.Builder()
|
|
|
|
+ .url(url + "chat-messages")
|
|
|
|
+ .addHeader("Authorization", "Bearer " + apiKey)
|
|
|
|
+ .addHeader("Accept", org.springframework.http.MediaType.TEXT_EVENT_STREAM_VALUE )
|
|
|
|
+ .post(requestBody)
|
|
|
|
+ .build();
|
|
|
|
+ return request;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public JSONObject stopMessage(String taskId) throws IOException {
|
|
|
|
+ OkHttpClient client = new OkHttpClient.Builder()
|
|
|
|
+ .connectTimeout(60, TimeUnit.SECONDS)
|
|
|
|
+ .writeTimeout(60, TimeUnit.SECONDS)
|
|
|
|
+ .readTimeout(60, TimeUnit.SECONDS)
|
|
|
|
+ .build();
|
|
|
|
+ DifyChatMessageDTO difyChatMessageDTO = new DifyChatMessageDTO();
|
|
|
|
+ difyChatMessageDTO.setUser("1");
|
|
|
|
+ String param = new Gson().toJson(difyChatMessageDTO);
|
|
|
|
+ RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
|
|
|
|
+ Request request = new Request.Builder()
|
|
|
|
+ .url(url + "chat-messages/" + taskId + "/stop")
|
|
|
|
+ .addHeader("Authorization", "Bearer " + apiKey).addHeader(HttpHeaders.CONTENT_TYPE, "application/json")
|
|
|
|
+ .post(requestBody)
|
|
|
|
+ .build();
|
|
|
|
+ String json = Objects.requireNonNull(client.newCall(request).execute().body()).string();
|
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(json);
|
|
|
|
+ return jsonObject;
|
|
|
|
+ }
|
|
|
|
+ public String queryHistoryMessage(DifyHistoryMessageDTO difyChatMessageDTO) throws IOException {
|
|
|
|
+ difyChatMessageDTO.setUser("1");
|
|
|
|
+ OkHttpClient okHttpClient = new OkHttpClient.Builder()
|
|
|
|
+ .connectTimeout(600, TimeUnit.SECONDS)
|
|
|
|
+ .writeTimeout(600, TimeUnit.SECONDS)
|
|
|
|
+ .readTimeout(600, TimeUnit.SECONDS)
|
|
|
|
+ .build();
|
|
|
|
+ String path = "messages?conversation_id=" + difyChatMessageDTO.getConversationId() + "&user=" + difyChatMessageDTO.getUser() + "&limit=" + difyChatMessageDTO.getLimit();
|
|
|
|
+ if (difyChatMessageDTO.getFirstId() != null) {
|
|
|
|
+ path += "&first_id=" + difyChatMessageDTO.getFirstId();
|
|
|
|
+ }
|
|
|
|
+ Request request = new Request.Builder()
|
|
|
|
+ .url(url + path)
|
|
|
|
+ .get()
|
|
|
|
+ .addHeader("Authorization", "Bearer " + apiKey)
|
|
|
|
+ .build();
|
|
|
|
+ return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
|
|
|
|
+ }
|
|
}
|
|
}
|