Spring AI集成DeepSeek实现流式输出的操作方法

2025-03-06 17:50

本文主要是介绍Spring AI集成DeepSeek实现流式输出的操作方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S...

前面一篇文章我们实现了《Spring AI集成DeepSeek:三步搞定Java智能应用》,大模型的响应速度是很慢的,为了提升用户体验,我们通常会使用流式输出一点点将结果输出给用户。先看下效果:

Spring AI集成DeepSeek实现流式输出的操作方法

在 SpringBoot 中实现流式输出可以使用 Sse(Server-SentEvents,服务器发送事件)技术来实现,它China编程是一种服务器推送技术,适合单向实时数据流,我们使用 SpringMVC(基于Servlet)中的SseEmitter对象来实现流式输出。

一、后端代码

/**
 * 流式调用
 */
@GetMapping("/generateStream")
public SseEmitter streamChat(@RequestParam String message) {
    // 创建 SSE 发射器,设置超时时间(例如 1 分钟)
    SseEmitter emitter = new SseEmitter(60_000L);
    // 创建 Prompt 对象
    Prompt prompt = new Prompt(new UserMessage(message));
    // 订阅流式响应
    // 完成处理
    // 异常处理
    openAiChatModel.stream(prompt).subscribe(response -> {
                try {
                    String content = response.getResult().getOutput().getContent();
China编程                    System.out.print(content);
                    // 发送 SSE 事件
                    emitter.send(SseEmitter.event()
         android                   .data(content)
                            .id(String.valueOf(System.currentTimeMillis()))
                            .build());
                } catch (Exception e) {
                    emitter.completeWithError(e);
                }
            },
            emitter::completeWithError,
            emitter::complete
    );
    // 处理客户端断开连接
    emitter.onCompletion(() -> {
        // 可在此处释放资源
        System.out.println("SSE connection completed");
    });
    emitter.onTimeout(() -> {
        emitter.complete();
        System.out.println("SSE connection timed out");
    });
    return emitter;
}

二、前端代码

前端接受数据流也比较简单,不需要在使用传统 AJAX 技术了,只需要创建一个 EventSource 对象,监听后端 SSE 接口,然后将接收到的数据流展示出来即可,如下代码所示:

$('#send-button').click(function () {
  const message = $('#chat-input').val();
  // 立即清空输入框
  $('#chat-input').val('');
  // 用户消息(保持原有样式)
  var userMessage = $('<div class="message user"></div>');
  userMessage.append('<img class="avatar" src="/images/user.png" alt="Spring AI集成DeepSeek实现流式输出android的操作方法">');
  userMessage.append(`<div class="content"><span class="nickname">你</sChina编程pan><div class="text">${message}</div></div>`);
  // 机器人消息容器(先创建空容器)
  var botMessage = $('<div class="message bot"></div>');
  botMessage.append('<img class="avatar" src="/images/robot.png" alt="Spring AI集成DeepSeek实现流式输出的操作方法">');
  botMessage.append('<div class="content"><span class="nickname">助手</span><div class="text"></div></div>');
  // 按顺序添加消息
  $('#chat-messages').append(userMessage, botMessage);
  // 流式处理
  const eventSource = new EventSource(`/ai/generateStream?message=` + message);
  eventSource.onmessage = function (event) {
  botMessage.find('.text').append(event.data);  // 追加到机器人消息内容区
  };
  // 错误处理
  eventSource.onerror = function (err) {
  $('#chat-input').val(''); // 确保网络异常时也清空
  console.error("连接错误:", err);
  eventSource.close();
  };
});

完整代码可查看:

Gitee:https://gitee.com/tyronchen/spring-boot-learn/tree/master/Spring-AI

github:https://github.com/tyronczt/spring-boot-learning/tree/master/Spring-AI

三、运行项目

运行项目测试结果:

  • 启动 Spring Boot 项目。
  • 在浏览器中访问地址 http://localhost:8888/index.html,即可看到流式输出的内容逐渐显示在页面上。

小天有话说

此文参考居多,html页面是使用idea中的通义插件所写,Demo之作,样式相对粗糙,如页面的markdown样式显示支持不完善,显示屏幕较小等。样式并非重点,后续将继续学习Spring Ai相关技术;

题外话

AI技术的应用早已突破简单的API调用阶段,唯有深耕深度学习领域,方能在技术迭代的浪潮中保持竞争力。这一规律不仅适用于个人发展,更是企业生存的必然选择。DeepSeek的崛起犹如一剂强心针,彻底激活了开源大模型领域的竞争格局——据不完全统计,已有超过200家头部企业完成DeepSeek技术接口的集成部署,涵盖华为、腾讯、百度、阿里、京东、字节等科技巨头,以及微软、英伟达、AWS等国际厂商。

对于开发者而言,**Spring AI Alibaba **作为阿里云推出的AI应用开发框架,提供了从模型部署到智能体开发的完整解决方案。该框架支持40+插件集成,可实现RAG增强生成与工具调用等核心功能,显著降低AI应用开发门槛。接下来也会更新一些学习文章:如DeepSeek接入Spring Cloud Alibaba AI完成智能化实战等,尽情期待!

参考资料

磊哥聊编程:https://segmentfault.com/a/1190000046109605

Spring AI Alibaba:https://java2ai.com/

到此这篇关于Spring AI集成DeepSeek实现流式输出的操作方法的文章就介绍到这了,更多相关Spring AI DeepSeek流式输出内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Spring AI集成DeepSeek实现流式输出的操作方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153659

相关文章

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle