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 助手、智能问答后台全部采用这套架构

相关新闻

408-C语言入门基础4

408-C语言入门基础4

目录 一、数组的概念 二、一维数组 三、二维数组 四、字符数组与字符串 一、数组的概念 数组可以对大量的同类型数据进行处理,是若干个具有相同类型的数据的有序集合。根据存储的数据类型,可将数组分为数值数组、字符串数组、指针数组、结构数组等。…

2026/7/24 20:51:10 阅读更多 →
如何在普通PC上免费解锁VMware的macOS支持?解锁器全攻略揭秘

如何在普通PC上免费解锁VMware的macOS支持?解锁器全攻略揭秘

如何在普通PC上免费解锁VMware的macOS支持?解锁器全攻略揭秘 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/un/unlocker 你知道吗?作为开发者,你是否曾梦想在Windows或Linux系统上运…

2026/7/24 20:50:10 阅读更多 →
6. 召回:在知识海洋里捞出最相关的片段

6. 召回:在知识海洋里捞出最相关的片段

文章目录 一、引言 二、召回的核心目标 三、范式一:稀疏检索(Sparse Retrieval) 3.1 思想:关键词匹配 3.2 BM25 公式 3.3 BM25 的优点 3.4 BM25 的致命缺陷 四、范式二:稠密检索(Dense Retrieval) 4.1 思想:语义匹配 4.2 稠密检索的优点 4.3 稠密检索的致命缺陷 五、范…

2026/7/24 20:50:10 阅读更多 →

最新新闻

AI医疗影像项目中的专利风险防控与工程实践

AI医疗影像项目中的专利风险防控与工程实践

1. 项目背景与核心痛点去年在帮某医疗影像团队做AI项目交付时,我们遇到了一个典型困境:算法准确率明明达到98%的实验室指标,但在实际部署时却因为专利壁垒和工程化瓶颈,导致整个项目延期4个月。这让我意识到,AI从业者正…

2026/7/24 20:59:13 阅读更多 →
DLSS Swapper:5个核心模块解析,打造跨平台游戏性能优化方案

DLSS Swapper:5个核心模块解析,打造跨平台游戏性能优化方案

DLSS Swapper:5个核心模块解析,打造跨平台游戏性能优化方案 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 你是否厌倦了游戏更新后DLSS版本不兼容的问题?是否想要在不同游戏间灵活切…

2026/7/24 20:59:13 阅读更多 →
JetBrains IDE试用期重置:3种方法轻松延长30天免费使用

JetBrains IDE试用期重置:3种方法轻松延长30天免费使用

JetBrains IDE试用期重置:3种方法轻松延长30天免费使用 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 还在为JetBrains IDE试用期到期而烦恼吗?每次项目进行到关键时刻,突然弹…

2026/7/24 20:59:13 阅读更多 →
CNN-RNN混合模型在时间序列预测中的实践与优化

CNN-RNN混合模型在时间序列预测中的实践与优化

1. 项目概述:CNN-RNN混合模型在时间序列预测中的应用这个项目实现了一个结合卷积神经网络(CNN)和循环神经网络(RNN)的混合模型,专门用于解决时间序列预测问题。我在能源行业做数据分析时发现,传…

2026/7/24 20:59:13 阅读更多 →
终极鸣潮工具箱WaveTools完整指南:3步解锁120FPS高帧率与抽卡分析

终极鸣潮工具箱WaveTools完整指南:3步解锁120FPS高帧率与抽卡分析

终极鸣潮工具箱WaveTools完整指南:3步解锁120FPS高帧率与抽卡分析 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 还在为《鸣潮》游戏的60FPS限制感到困扰吗?想要让你的高端显卡发挥…

2026/7/24 20:59:13 阅读更多 →
SV2A-PET能否成为捕捉阿尔茨海默病前驱期突触异常的有效影像学标志物?

SV2A-PET能否成为捕捉阿尔茨海默病前驱期突触异常的有效影像学标志物?

SV2A-PET能否成为捕捉阿尔茨海默病前驱期突触异常的有效影像学标志物?本研究利用APPSL70转基因小鼠模型,通过多靶点PET纵向追踪,系统比较了AD前驱期SV2A-PET信号与Aβ沉积、小胶质细胞及星形胶质细胞激活的时空关联。研究发现SV2A表达与Aβ病…

2026/7/24 20:58:13 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻