在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 方式的聊天接口。

代码解析:
  1. @RestController:声明该类为 Spring Boot REST 控制器。
  2. @RequestMapping("/v1/chat"):定义 API 路径前缀。
  3. @PostMapping("/completions"):定义 SSE 接口,客户端发送请求后,服务器将持续推送消息。
  4. Flux<ServerSentEvent<JSONObject>>:返回SSE 事件流,适用于流式响应。

3. 业务逻辑层(Service)

ChatCompletionServiceImpl 通过 WebClient 调用大模型 API,并处理 SSE 数据流。

4. 实体类定义

ChatCompletionRequest:

Message:

Tool:

ChatCompletionResponse:

ChatChoice:

MessageResponse:

Usage:

ModelMessageUtils

代码解析:
  1. 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 数据。
  2. 处理流式响应

    • flatMap(data -> processResponse(data, contentBuilder, request)):解析 SSE 数据并返回事件。
    • doOnCancel(() -> onClientCancel(contentBuilder)):监听前端主动断开 SSE 连接。
    • doOnTerminate(this::onStreamTerminate):监听 SSE 连接终止。
    • onErrorResume(this::handleError):异常处理。

5. SSE 响应数据处理

代码解析:
  1. [DONE] 处理:当 SSE 返回 [DONE] 时,说明流式请求结束,保存完整消息到数据库。

  2. JSON 解析

    • 如果 request.getStream() 为 true,则获取 delta.content(SSE 方式)。
    • 否则,获取 message.content(普通 JSON 方式)。
  3. 返回 SSE 事件:封装 ServerSentEvent,前端可实时获取消息。

6. SSE 连接管理

7. SSE 测试示例

CURL:

代码解析:
  • onClientCancel:前端主动关闭 SSE 连接时触发,打印已接收内容。
  • onStreamTerminate:SSE 连接终止时触发,记录日志。

8. 结论

本教程实现了 Spring Boot 3.x + Flux + WebClient 的 SSE 调用,用于对接大模型 API,并支持 OpenAI 格式。核心亮点:

  1. 基于 WebFlux 的 WebClient 实现非阻塞 SSE 调用。
  2. 支持 OpenAI 通用格式,适配 stream 和非 stream 模式。
  3. 完整的 SSE 连接管理,支持客户端取消和流终止处理。
  4. 数据持久化,在流式请求结束后保存完整对话内容。

 写在最后:更多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数字人实战
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐