基于Spring Boot 3.x实现大模型SSE流式通信指南
WebClient发送 POST 请求:设置目标 API 地址。:设置 API 认证。:声明期望返回 SSE 数据。:解析 API 返回的流式 JSON 数据。处理流式响应:解析 SSE 数据并返回事件。:监听前端主动断开 SSE 连接。:监听 SSE 连接终止。:异常处理。
在AI 应用开发中,流式输出(SSE,Server-Sent Events) 是一种常见的方式,特别适用于大模型的 API 调用,比如 ChatGPT, DeepSeek, GLM … 接口。SSE 允许服务器向客户端推送数据流,避免长时间阻塞请求,提高用户体验。
本篇文章基于 Spring Boot 3.x,结合 Flux(Spring WebFlux) 和 WebClient,实现 大模型 SSE 调用,并支持 OpenAI 通用格式。
技术栈
- Spring Boot 3.x:现代 Java Web 开发框架
- Spring WebFlux:响应式 Web 框架,支持非阻塞 I/O
- WebClient:Spring WebFlux 提供的 HTTP 客户端,支持异步流式请求
- SSE(Server-Sent Events) :服务器推送技术,适用于流式响应
- Lombok:简化 Java 代码
- Jackson:JSON 解析库
1.项目依赖(pom.xml)
在 pom.xml
文件中,需要引入以下依赖:
2. 控制层(Controller)
ChatController
作为 RESTful API 入口,提供 SSE 方式的聊天接口。
代码解析:
@RestController
:声明该类为 Spring Boot REST 控制器。@RequestMapping("/v1/chat")
:定义 API 路径前缀。@PostMapping("/completions")
:定义 SSE 接口,客户端发送请求后,服务器将持续推送消息。Flux<ServerSentEvent<JSONObject>>
:返回SSE 事件流,适用于流式响应。
3. 业务逻辑层(Service)
ChatCompletionServiceImpl
通过 WebClient
调用大模型 API,并处理 SSE 数据流。
4. 实体类定义
ChatCompletionRequest:
Message:
Tool:
ChatCompletionResponse:
ChatChoice:
MessageResponse:
Usage:
ModelMessageUtils
代码解析:
-
WebClient
发送 POST 请求baseUrl("url")
:设置目标 API 地址。defaultHeader(HttpHeaders.AUTHORIZATION, "Bearer xxx")
:设置 API 认证。defaultHeader(HttpHeaders.ACCEPT, MediaType.TEXT_EVENT_STREAM_VALUE)
:声明期望返回 SSE 数据。bodyToFlux(String.class)
:解析 API 返回的流式 JSON 数据。
-
处理流式响应
flatMap(data -> processResponse(data, contentBuilder, request))
:解析 SSE 数据并返回事件。doOnCancel(() -> onClientCancel(contentBuilder))
:监听前端主动断开 SSE 连接。doOnTerminate(this::onStreamTerminate)
:监听 SSE 连接终止。onErrorResume(this::handleError)
:异常处理。
5. SSE 响应数据处理
代码解析:
-
[DONE]
处理:当 SSE 返回[DONE]
时,说明流式请求结束,保存完整消息到数据库。 -
JSON 解析:
- 如果
request.getStream()
为true
,则获取delta.content
(SSE 方式)。 - 否则,获取
message.content
(普通 JSON 方式)。
- 如果
-
返回 SSE 事件:封装
ServerSentEvent
,前端可实时获取消息。
6. SSE 连接管理
7. SSE 测试示例
CURL:
代码解析:
onClientCancel
:前端主动关闭 SSE 连接时触发,打印已接收内容。onStreamTerminate
:SSE 连接终止时触发,记录日志。
8. 结论
本教程实现了 Spring Boot 3.x + Flux + WebClient 的 SSE 调用,用于对接大模型 API,并支持 OpenAI 格式。核心亮点:
- 基于 WebFlux 的 WebClient 实现非阻塞 SSE 调用。
- 支持 OpenAI 通用格式,适配
stream
和非stream
模式。 - 完整的 SSE 连接管理,支持客户端取消和流终止处理。
- 数据持久化,在流式请求结束后保存完整对话内容。
写在最后:更多AI学习资料请添加学习助手领取资料礼包
视频学习资料:
从0开始开发超级AI智能体,干掉所有重复工作
- 基于字节的coze平台从0到1搭建我们自己的智能体
- 从coze到超级创业个体:2025是AI Agent大爆炸的元年!
- 搭建智能体的七大步骤:需求梳理、软件选型、提示工程、数据库、构建 UI 界面、测试评估、部署
- 你的智能体如何并行调用多个通用AI大模型?
- 实战案例:AI Agent提取小红书文案以及图像进行OCR文字识别并同步写入飞书多维表格
- 实战案例:AI Agent提取抖音爆款短视频链接中的文案,基于大模型和提示词完成符合小红书风格和作者特点的文案仿写
DeepSeek AI Agent +自动化助力企业实现 AI 改造实战
- DeepSeek 大模型的本地部署与客户端chatbox本地知识库
- 程序员的跨时代产品,AI 代码编辑器cursor深入浅出与项目构建
- 软件机器人工具影刀RPA工业化地基本使用
- 影刀RPA WEB自动化采集Boss直聘岗位信息并存储
- 影刀AI Power与DeepSeek 工作流构建影刀AI Agent
- AI HR实战:结合影刀RPA+DeepSeek AI智能体,实现智能自动招聘机器人
大模型技术+ 数字人+混剪造就副业王炸组合
- 数字人的概念与价值
- 当前数字人的时代背景
- 数字人的市场需求
- 数字人与自媒体的关系和发展路径
- 商业化数字人的变现之路
- 基于coze搭建数字人超级智能体
- 大模型技术+数字人+混剪=最强副业方向
- AI大模型与数字人造就3分钟获客300条精准线索
- AI副业接单渠道与流量变现
- 程序员开发的AI数字人实战
更多推荐
所有评论(0)