Java后端对接AI大模型 SSE流式输出实战|实现打字机效果、实时流式问答(可直接商用) Java后端对接AI大模型 SSE流式输出实战实现打字机效果、实时流式问答可直接商用一、前言为什么 AI 问答必须用 SSE 流式输出现在所有 AI 对话产品ChatGPT、DeepSeek、文心一言、通义千问都是流式输出也就是后端不用等 AI 全部回答完毕而是返回一个字、推一个字前端实时渲染打字机效果。传统接口存在致命问题大模型回答 3000 字需要 3~5 秒前端长时间空白、用户以为卡死超时熔断、响应超时、体验极差而SSEServer-Sent Events是目前 AI 问答的工业标准基于 HTTP 长连接服务端主动持续推送数据无需 WebSocket 复杂握手天然适合 AI 流式问答场景本文带你从零实现Java SpringBoot3 AI大模型 SSE 流式问答代码可直接商用。二、SSE 核心原理面试必问1. 普通接口一次请求 → 一次完整响应 → 连接关闭2. SSE 流式接口一次请求 →服务端持续分片推送→ 前端逐字渲染 → 对话结束关闭连接响应头关键标识Content-Type: text/event-stream Cache-Control: no-cache Connection: keep-alive三、项目依赖SpringBoot3 最新稳定版无需特殊依赖SpringBoot 原生支持 SSE。dependencies!-- Web核心 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Http工具调用大模型接口 --dependencygroupIdcom.squareup.okhttp3/groupIdartifactIdokhttp/artifactIdversion4.12.0/version/dependency!-- JSON解析 --dependencygroupIdcom.alibaba.fastjson2/groupIdartifactIdfastjson2/artifactIdversion2.0.52/version/dependency/dependencies四、核心工具类SSE 流式推送工具封装通用 SSE 推送、关闭、异常处理工具类全局复用。importorg.springframework.http.MediaType;importorg.springframework.web.servlet.mvc.method.annotation.SseEmitter;/** * SSE 流式推送工具类 * 用于AI大模型流式输出、实时消息推送 */publicclassSseUtil{/** * 创建SSE发射器超时3分钟 */publicstaticSseEmittercreateEmitter(){// 设置超时时间 3分钟returnnewSseEmitter(1000L*60*3);}/** * 推送消息 */publicstaticvoidsend(SseEmitteremitter,Stringcontent){try{emitter.send(content,MediaType.TEXT_PLAIN);}catch(Exceptione){// 客户端断开连接emitter.complete();}}/** * 结束推送 */publicstaticvoidcomplete(SseEmitteremitter){if(emitter!null){emitter.complete();}}}五、AI大模型流式问答核心接口可直接商用适配DeepSeek、GPT、通义千问、智谱通用流式返回格式。importcom.alibaba.fastjson2.JSON;importcom.alibaba.fastjson2.JSONObject;importokhttp3.*;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importorg.springframework.web.servlet.mvc.method.annotation.SseEmitter;importjava.io.BufferedReader;importjava.io.InputStreamReader;RestControllerRequestMapping(/ai)publicclassAiStreamController{// 大模型API密钥替换自己的privatestaticfinalStringAPI_KEYsk-xxxx;privatestaticfinalStringAI_URLhttps://api.deepseek.com/v1/chat/completions;GetMapping(value/chat/stream,producestext/event-stream;charsetUTF-8)publicSseEmitteraiChatStream(RequestParamStringprompt){// 1. 创建SSE推送器SseEmitteremitterSseUtil.createEmitter();// 2. 异步调用大模型防止阻塞主线程newThread(()-{OkHttpClientclientnewOkHttpClient();try{// 构建请求参数JSONObjectjsonnewJSONObject();json.put(model,deepseek-chat);json.put(stream,true);// 开启流式输出核心json.put(temperature,0.7);// 构建对话消息JSONObjectmessagenewJSONObject();message.put(role,user);message.put(content,prompt);json.put(messages,newObject[]{message});// 构建请求RequestBodybodyRequestBody.create(json.toString(),MediaType.get(application/json; charsetutf-8));RequestrequestnewRequest.Builder().url(AI_URL).addHeader(Authorization,Bearer API_KEY).post(body).build();// 流式读取返回内容Responseresponseclient.newCall(request).execute();BufferedReaderreadernewBufferedReader(newInputStreamReader(response.body().byteStream()));Stringline;while((linereader.readLine())!null){// 过滤空行和结束标识if(line.startsWith(data: )!line.contains([DONE])){Stringdataline.substring(6);JSONObjectresJsonJSON.parseObject(data);// 逐字获取AI返回内容StringcontentresJson.getJSONArray(choices).getJSONObject(0).getJSONObject(delta).getString(content);// 逐字推送给前端SseUtil.send(emitter,content);}}// 流式结束SseUtil.complete(emitter);}catch(Exceptione){SseUtil.complete(emitter);}}).start();returnemitter;}}六、前端测试极简页面可直接运行前端使用EventSource监听流式响应实现打字机效果。!DOCTYPEhtmlhtmlbodydividresultstylewhite-space:pre-wrap;/divscript// 建立SSE连接constsourcenewEventSource(http://localhost:8080/ai/chat/stream?prompt用Java写一个冒泡排序);letresDomdocument.getElementById(result);// 接收流式数据source.onmessagefunction(e){resDom.innerHTMLe.data;};// 连接关闭source.onclosefunction(){source.close();};/script/body/html七、运行效果\1. 页面不会等待秒级出现第一个字\2. AI 内容逐字弹出完美打字机效果\3. 全部输出完毕自动关闭连接\4. 不会超时、不会断流八、生产环境高频坑点2026最新坑1忘记设置 streamtrue大模型默认一次性返回全部内容不会流式推送。坑2主线程阻塞必须异步请求大模型否则 SSE 推送卡死。坑3前端跨域SSE 属于跨域请求后端必须配置跨域放行。坑4连接不关闭导致内存泄漏必须捕获异常、手动 complete 关闭连接。坑5中文乱码接口必须指定produces text/event-stream;charsetUTF-8九、拓展升级企业级功能上下文记忆拼接 history 对话记录实现连续对话用户限流防止恶意刷接口消耗AI额度异常重连断网自动重连 SSE敏感词过滤AI输出内容风控对话日志入库记录问答、耗时、Token消耗十、总结SSE 流式输出是 AI 产品的标配技术相比 WebSocket 更轻量、更简单、更适合问答场景。本文代码是2026 年最新企业通用方案SpringBoot3 原生支持零冗余、可直接上线商用适配所有国产大模型解决超时、空白、卡顿等用户体验问题现在绝大多数 AI 客服、AI 助手、智能问答后台全部采用这套架构

本月热点