|
|
@@ -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);
|
|
|
}
|
|
|
},
|