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 8010a1258..b377ce8c6 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 @@ -462,14 +462,28 @@ private SseEmitter chatWithBaichuanAi(ChatQueryRequest queryRequest, SseEmitter * @return */ private List getFastChatMessage(String uid, String prompt) { - List messages = (List)LocalCache.CACHE.get(uid); + List messages = null; + Object cachedItem = LocalCache.CACHE.get(uid); + + if (cachedItem instanceof List) { + try { + messages = (List) cachedItem; + } catch (ClassCastException e) { + // 处理类型转换异常,创建新的消息列表 + log.warn("Error casting cached item to List: {}", e.getMessage()); + messages = Lists.newArrayList(); + } + } else { + // 如果缓存项不是List类型,创建新的消息列表 + messages = Lists.newArrayList(); + } + if (CollectionUtils.isNotEmpty(messages)) { if (messages.size() >= contextLength) { messages = messages.subList(1, contextLength); } - } else { - messages = Lists.newArrayList(); } + FastChatMessage currentMessage = new FastChatMessage(FastChatRole.USER).setContent(prompt); messages.add(currentMessage); return messages; diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/rest/listener/RestAIEventSourceListener.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/rest/listener/RestAIEventSourceListener.java index 0509ac6fe..13acc5598 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/rest/listener/RestAIEventSourceListener.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/rest/listener/RestAIEventSourceListener.java @@ -77,14 +77,16 @@ public void onEvent(EventSource eventSource, String id, String type, String data public void onClosed(EventSource eventSource) { log.info("REST AI close sse connection..."); try { - sseEmitter.send(SseEmitter.event() + // 使用 try-catch 直接尝试发送事件,如果已完成会抛出异常被捕获 + this.sseEmitter.send(SseEmitter.event() .id("[DONE]") .data("[DONE]") .reconnectTime(3000)); - } catch (IOException e) { - throw new RuntimeException(e); + this.sseEmitter.complete(); + } catch (Exception e) { + // 可能是 SseEmitter 已经完成状态,记录日志但不重新抛出异常 + log.info("SseEmitter may already be completed: {}", e.getMessage()); } - sseEmitter.complete(); } @Override