1811872455@163.com 3 долоо хоног өмнө
parent
commit
4977c4d6f8

+ 13 - 0
storlead-ai-api/src/main/java/com/storlead/ai/websocket/AiChatWebSocketHandler.java

@@ -14,6 +14,7 @@ import reactor.core.Disposable;
 import java.io.IOException;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 
 /**
@@ -135,6 +136,7 @@ public class AiChatWebSocketHandler implements WebSocketHandler {
 
             // 构建聊天请求
             ChatRequest.Builder requestBuilder = ChatRequest.builder().message(message);
+            // ChatRequest.Builder requestBuilder = ChatRequest.builder().systemPrompt(message);
 
 //            // 可选参数
 //            if (messageNode.has("systemPrompt") && !messageNode.get("systemPrompt").asText().trim().isEmpty()) {
@@ -215,6 +217,7 @@ public class AiChatWebSocketHandler implements WebSocketHandler {
     private void startStreamChatNoStruct(WebSocketSession session, String sessionId,
                                  AiProviderType providerType, ChatRequest chatRequest) {
 
+        AtomicBoolean inThinkBlock = new AtomicBoolean(false); // 标记是否在 <think> 区块中
 //        logger.debug("开始流式聊天: {} - 提供商: {}", sessionId, providerType.getDisplayName());
         // 订阅流式响应 - 修复方法调用
         Disposable subscription = aiChatService.chatStream(providerType, chatRequest)
@@ -222,12 +225,22 @@ public class AiChatWebSocketHandler implements WebSocketHandler {
 //                    logger.debug("流式聊天订阅成功: {}", sessionId);
 //                })
                 .subscribe(
+
                         // 处理每个数据块 - 修复方法调用
                         chunk -> {
                             if (chunk != null && !chunk.trim().isEmpty()) {
+                                if (chunk.equals("<think>")) {
+                                    inThinkBlock.set(true);
+                                }
+                                if (chunk.equals("</think>")) {
+                                    inThinkBlock.set(false);
+                                }
                                 if (chunk.equals("<think>") || chunk.equals("</think>")) {
                                     return;
                                 }
+                                if (inThinkBlock.get()) {
+                                    return;
+                                }
                                 sendMessage(session,chunk);
                             }
                         },