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,