fix(streaming): 修正流式输出的端点URL和防缓冲header
前端: - 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 <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,7 @@ import com.zbkj.service.service.tool.ToolSora2Service;
|
|||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import io.swagger.annotations.ApiParam;
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -86,7 +87,11 @@ public class KieAIController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping(value = "/gemini/chat/stream", produces = "text/event-stream")
|
@PostMapping(value = "/gemini/chat/stream", produces = "text/event-stream")
|
||||||
@ApiOperation(value = "Gemini 2.5 Flash 流式对话", notes = "使用 SSE 实时推送响应")
|
@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);
|
request.setStream(true);
|
||||||
return toolKieAIService.geminiChatStream(request);
|
return toolKieAIService.geminiChatStream(request);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -457,12 +457,15 @@ function kieaiGeminiChatStream(data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const token = store.state && store.state.app && store.state.app.token
|
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({
|
_task = uni.request({
|
||||||
url: `${API_BASE_URL}/api/front/kieai/gemini/chat`,
|
url: `${API_BASE_URL}/api/front/kieai/gemini/chat/stream`,
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: { messages, stream: true },
|
data: { messages, stream: true },
|
||||||
header: {
|
header: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
|
'Accept': 'text/event-stream',
|
||||||
...(token ? { [TOKENNAME]: token } : {})
|
...(token ? { [TOKENNAME]: token } : {})
|
||||||
},
|
},
|
||||||
enableChunked: true,
|
enableChunked: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user