From 51877df13075ad10ef51107f15bcd21f1661febe Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期二, 17 三月 2026 09:48:01 +0800
Subject: [PATCH] #AI

---
 rsf-server/src/main/java/com/vincent/rsf/server/ai/service/AiGatewayClient.java |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/AiGatewayClient.java b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/AiGatewayClient.java
index b41bb2d..53c9066 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/AiGatewayClient.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/AiGatewayClient.java
@@ -8,6 +8,7 @@
 
 import javax.annotation.Resource;
 import java.io.BufferedReader;
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
@@ -24,11 +25,20 @@
     private ObjectMapper objectMapper;
 
     public interface StreamCallback {
+        /**
+         * 澶勭悊缃戝叧杩斿洖鐨勪竴鏉� NDJSON 浜嬩欢銆�
+         * 杩斿洖 true 琛ㄧず缁х画娑堣垂鍚庣画浜嬩欢锛岃繑鍥� false 琛ㄧず涓诲姩鍋滄鏈娴佽鍙栥��
+         */
         boolean handle(JsonNode event) throws Exception;
     }
 
+    /**
+     * 璋冪敤 AI 缃戝叧鐨勫唴閮ㄦ祦寮忔帴鍙o紝骞跺皢缃戝叧杩斿洖鐨勪簨浠堕�愭潯鍥炶皟缁欎笂灞傜紪鎺掗�昏緫銆�
+     * 杩欓噷灞忚斀浜� HTTP 缁嗚妭锛岃皟鐢ㄦ柟鍙渶瑕佸叧娉� delta / done / error 浜嬩欢鏈韩銆�
+     */
     public void stream(GatewayChatRequest request, StreamCallback callback) throws Exception {
         HttpURLConnection connection = null;
+        boolean terminalEventReceived = false;
         try {
             String url = aiProperties.getGatewayBaseUrl() + "/internal/chat/stream";
             connection = (HttpURLConnection) new URL(url).openConnection();
@@ -53,10 +63,17 @@
                         continue;
                     }
                     JsonNode event = objectMapper.readTree(line);
+                    String type = event.path("type").asText();
+                    if ("done".equals(type) || "error".equals(type)) {
+                        terminalEventReceived = true;
+                    }
                     if (!callback.handle(event)) {
                         break;
                     }
                 }
+            }
+            if (!terminalEventReceived) {
+                throw new IOException("AI缃戝叧娴佸紓甯镐腑鏂�");
             }
         } finally {
             if (connection != null) {
@@ -66,3 +83,4 @@
     }
 
 }
+

--
Gitblit v1.9.1