From 58ea76498f2e63a52cfdf637009b76c57905e310 Mon Sep 17 00:00:00 2001 From: msh-agent Date: Sat, 11 Apr 2026 15:51:32 +0800 Subject: [PATCH] =?UTF-8?q?fix(streaming):=20=E4=BF=AE=E6=AD=A3=E6=B5=81?= =?UTF-8?q?=E5=BC=8F=E8=BE=93=E5=87=BA=E7=9A=84=E7=AB=AF=E7=82=B9URL?= =?UTF-8?q?=E5=92=8C=E9=98=B2=E7=BC=93=E5=86=B2header?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前端: - kieaiGeminiChatStream URL 从 /gemini/chat 改为 /gemini/chat/stream (后者声明了 produces=text/event-stream,nginx 不会缓冲) - 请求 header 增加 Accept: text/event-stream 后端: - KieAIController.geminiChatStream 补充防缓冲 header: X-Accel-Buffering: no + Cache-Control: no-cache (与 CozeController.chatStream 对齐,防止 nginx 缓冲 SSE) Co-Authored-By: Claude Opus 4.6 --- .../java/com/zbkj/front/controller/KieAIController.java | 7 ++++++- msh_single_uniapp/api/models-api.js | 5 ++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/msh_crmeb_22/crmeb-front/src/main/java/com/zbkj/front/controller/KieAIController.java b/msh_crmeb_22/crmeb-front/src/main/java/com/zbkj/front/controller/KieAIController.java index 70f4f6c..63402bd 100644 --- a/msh_crmeb_22/crmeb-front/src/main/java/com/zbkj/front/controller/KieAIController.java +++ b/msh_crmeb_22/crmeb-front/src/main/java/com/zbkj/front/controller/KieAIController.java @@ -17,6 +17,7 @@ import com.zbkj.service.service.tool.ToolSora2Service; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; +import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -86,7 +87,11 @@ public class KieAIController { */ @PostMapping(value = "/gemini/chat/stream", produces = "text/event-stream") @ApiOperation(value = "Gemini 2.5 Flash 流式对话", notes = "使用 SSE 实时推送响应") - public SseEmitter geminiChatStream(@RequestBody @Validated KieAIGeminiChatRequest request) { + public SseEmitter geminiChatStream(@RequestBody @Validated KieAIGeminiChatRequest request, + HttpServletResponse response) { + // 防止 nginx 缓冲 SSE 响应(与 CozeController.chatStream 对齐) + response.setHeader("X-Accel-Buffering", "no"); + response.setHeader("Cache-Control", "no-cache"); request.setStream(true); return toolKieAIService.geminiChatStream(request); } diff --git a/msh_single_uniapp/api/models-api.js b/msh_single_uniapp/api/models-api.js index 1a9e1c6..2e0fea6 100644 --- a/msh_single_uniapp/api/models-api.js +++ b/msh_single_uniapp/api/models-api.js @@ -457,12 +457,15 @@ function kieaiGeminiChatStream(data) { } const token = store.state && store.state.app && store.state.app.token + // 使用专用流式端点 /chat/stream(声明了 produces=text/event-stream), + // 而非 /chat + stream=true,避免 nginx 缓冲 SSE 响应导致流式失效 _task = uni.request({ - url: `${API_BASE_URL}/api/front/kieai/gemini/chat`, + url: `${API_BASE_URL}/api/front/kieai/gemini/chat/stream`, method: 'POST', data: { messages, stream: true }, header: { 'Content-Type': 'application/json', + 'Accept': 'text/event-stream', ...(token ? { [TOKENNAME]: token } : {}) }, enableChunked: true,