diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/ChatController.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/ChatController.java index 6227f488..49e8f03a 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/ChatController.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/ChatController.java @@ -29,6 +29,7 @@ import ai.chat2db.server.web.api.controller.ai.config.LocalCache; import ai.chat2db.server.web.api.controller.ai.converter.ChatConverter; import ai.chat2db.server.web.api.controller.ai.dify.client.DifyChatAIClient; import ai.chat2db.server.web.api.controller.ai.dify.listener.DifyChatAIEventSourceListener; +import ai.chat2db.server.web.api.controller.ai.dify.model.DifyChatConstant; import ai.chat2db.server.web.api.controller.ai.enums.PromptType; import ai.chat2db.server.web.api.controller.ai.fastchat.client.FastChatAIClient; import ai.chat2db.server.web.api.controller.ai.fastchat.embeddings.FastChatEmbeddingResponse; @@ -273,8 +274,8 @@ public class ChatController { messages.add(currentMessage); buildSseEmitter(sseEmitter, uid); - DifyChatAIEventSourceListener eventSourceListener = new DifyChatAIEventSourceListener(sseEmitter); - String conversationId = uid + "-" + queryRequest.getDataSourceId(); + DifyChatAIEventSourceListener eventSourceListener = new DifyChatAIEventSourceListener(sseEmitter, uid); + String conversationId = (String) LocalCache.CACHE.get(DifyChatConstant.CONVERSATION_CACHE_PREFIX + uid); DifyChatAIClient.getInstance().streamCompletions(messages, eventSourceListener, uid, conversationId); LocalCache.CACHE.put(uid, JSONUtil.toJsonStr(messages), LocalCache.TIMEOUT); return sseEmitter; diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/dify/client/DifyChatAiStreamClient.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/dify/client/DifyChatAiStreamClient.java index 34af1ec9..4751406a 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/dify/client/DifyChatAiStreamClient.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/dify/client/DifyChatAiStreamClient.java @@ -135,7 +135,7 @@ public class DifyChatAiStreamClient { DifyChatCompletionsOptions chatCompletionsOptions = new DifyChatCompletionsOptions(); chatCompletionsOptions.setQuery(lastMessage); chatCompletionsOptions.setResponseMode("streaming"); - //chatCompletionsOptions.setConversationId(conversationId); + chatCompletionsOptions.setConversationId(conversationId); chatCompletionsOptions.setUser(uid); EventSource.Factory factory = EventSources.createFactory(this.okHttpClient); diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/dify/listener/DifyChatAIEventSourceListener.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/dify/listener/DifyChatAIEventSourceListener.java index 604828c4..5ac98c65 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/dify/listener/DifyChatAIEventSourceListener.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/dify/listener/DifyChatAIEventSourceListener.java @@ -5,6 +5,8 @@ import ai.chat2db.server.web.api.controller.ai.azure.model.AzureChatChoice; import ai.chat2db.server.web.api.controller.ai.azure.model.AzureChatCompletions; import ai.chat2db.server.web.api.controller.ai.azure.model.AzureChatMessage; import ai.chat2db.server.web.api.controller.ai.azure.model.AzureCompletionsUsage; +import ai.chat2db.server.web.api.controller.ai.config.LocalCache; +import ai.chat2db.server.web.api.controller.ai.dify.model.DifyChatConstant; import ai.chat2db.server.web.api.controller.ai.dify.model.DifyChatStreamEvent; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; @@ -29,11 +31,14 @@ public class DifyChatAIEventSourceListener extends EventSourceListener { private SseEmitter sseEmitter; + private String uid; + private ObjectMapper mapper = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); - public DifyChatAIEventSourceListener(SseEmitter sseEmitter) { + public DifyChatAIEventSourceListener(SseEmitter sseEmitter, String uid) { this.sseEmitter = sseEmitter; + this.uid = uid; } @Override @@ -54,7 +59,7 @@ public class DifyChatAIEventSourceListener extends EventSourceListener { public void onEvent(@NotNull EventSource eventSource, @Nullable String id, @Nullable String type, @NotNull String data) { log.info("DifyChatAI:{}", data); DifyChatStreamEvent event = mapper.readValue(data, DifyChatStreamEvent.class); - if ("message_end".equals(event.getEvent())) { + if (DifyChatConstant.EVENT_END_TAG.equals(event.getEvent())) { log.info("DifyChatAI返回数据结束了"); sseEmitter.send(SseEmitter.event() .id("[DONE]") @@ -64,6 +69,7 @@ public class DifyChatAIEventSourceListener extends EventSourceListener { } String text = event.getAnswer(); + LocalCache.CACHE.put(DifyChatConstant.CONVERSATION_CACHE_PREFIX + uid, event.getConversationId()); log.info("Model ID={} is created at {}.", event.getId(), event.getCreatedAt()); Message message = new Message(); message.setContent(text); diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/dify/model/DifyChatConstant.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/dify/model/DifyChatConstant.java new file mode 100644 index 00000000..29c5cf7f --- /dev/null +++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/dify/model/DifyChatConstant.java @@ -0,0 +1,8 @@ +package ai.chat2db.server.web.api.controller.ai.dify.model; + +public interface DifyChatConstant { + + String CONVERSATION_CACHE_PREFIX="CONVERSATION:"; + + String EVENT_END_TAG="message_end"; +}