欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?AI集成DeepSeek實現(xiàn)流式輸出的操作方法

 更新時間:2025年03月06日 14:37:32   作者:小天努力學(xué)java  
本文介紹了如何在SpringBoot中使用Sse(Server-SentEvents)技術(shù)實現(xiàn)流式輸出,后端使用SpringMVC中的SseEmitter對象,前端使用EventSource對象監(jiān)聽SSE接口并展示數(shù)據(jù)流,通過這種方式可以提升用戶體驗,避免大模型響應(yīng)速度慢的問題,感興趣的朋友一起看看吧

前面一篇文章我們實現(xiàn)了《Spring AI集成DeepSeek:三步搞定Java智能應(yīng)用》,大模型的響應(yīng)速度是很慢的,為了提升用戶體驗,我們通常會使用流式輸出一點點將結(jié)果輸出給用戶。先看下效果:

在 SpringBoot 中實現(xiàn)流式輸出可以使用 Sse(Server-SentEvents,服務(wù)器發(fā)送事件)技術(shù)來實現(xiàn),它是一種服務(wù)器推送技術(shù),適合單向?qū)崟r數(shù)據(jù)流,我們使用 SpringMVC(基于Servlet)中的SseEmitter對象來實現(xiàn)流式輸出。

一、后端代碼

/**
 * 流式調(diào)用
 */
@GetMapping("/generateStream")
public SseEmitter streamChat(@RequestParam String message) {
    // 創(chuàng)建 SSE 發(fā)射器,設(shè)置超時時間(例如 1 分鐘)
    SseEmitter emitter = new SseEmitter(60_000L);
    // 創(chuàng)建 Prompt 對象
    Prompt prompt = new Prompt(new UserMessage(message));
    // 訂閱流式響應(yīng)
    // 完成處理
    // 異常處理
    openAiChatModel.stream(prompt).subscribe(response -> {
                try {
                    String content = response.getResult().getOutput().getContent();
                    System.out.print(content);
                    // 發(fā)送 SSE 事件
                    emitter.send(SseEmitter.event()
                            .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;
}

二、前端代碼

前端接受數(shù)據(jù)流也比較簡單,不需要在使用傳統(tǒng) Ajax 技術(shù)了,只需要創(chuàng)建一個 EventSource 對象,監(jiān)聽后端 SSE 接口,然后將接收到的數(shù)據(jù)流展示出來即可,如下代碼所示:

$('#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="用戶頭像">');
  userMessage.append(`<div class="content"><span class="nickname">你</span><div class="text">${message}</div></div>`);
  // 機器人消息容器(先創(chuàng)建空容器)
  var botMessage = $('<div class="message bot"></div>');
  botMessage.append('<img class="avatar" src="/images/robot.png" alt="助手頭像">');
  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);  // 追加到機器人消息內(nèi)容區(qū)
  };
  // 錯誤處理
  eventSource.onerror = function (err) {
  $('#chat-input').val(''); // 確保網(wǎng)絡(luò)異常時也清空
  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

三、運行項目

運行項目測試結(jié)果:

  • 啟動 Spring Boot 項目。
  • 在瀏覽器中訪問地址 http://localhost:8888/index.html,即可看到流式輸出的內(nèi)容逐漸顯示在頁面上。

小天有話說

此文參考居多,html頁面是使用idea中的通義插件所寫,Demo之作,樣式相對粗糙,如頁面的markdown樣式顯示支持不完善,顯示屏幕較小等。樣式并非重點,后續(xù)將繼續(xù)學(xué)習(xí)Spring Ai相關(guān)技術(shù);

題外話

AI技術(shù)的應(yīng)用早已突破簡單的API調(diào)用階段,唯有深耕深度學(xué)習(xí)領(lǐng)域,方能在技術(shù)迭代的浪潮中保持競爭力。這一規(guī)律不僅適用于個人發(fā)展,更是企業(yè)生存的必然選擇。DeepSeek的崛起猶如一劑強心針,徹底激活了開源大模型領(lǐng)域的競爭格局——據(jù)不完全統(tǒng)計,已有超過200家頭部企業(yè)完成DeepSeek技術(shù)接口的集成部署,涵蓋華為、騰訊、百度、阿里、京東、字節(jié)等科技巨頭,以及微軟、英偉達、AWS等國際廠商。

對于開發(fā)者而言,**Spring AI Alibaba **作為阿里云推出的AI應(yīng)用開發(fā)框架,提供了從模型部署到智能體開發(fā)的完整解決方案。該框架支持40+插件集成,可實現(xiàn)RAG增強生成與工具調(diào)用等核心功能,顯著降低AI應(yīng)用開發(fā)門檻。接下來也會更新一些學(xué)習(xí)文章:如DeepSeek接入Spring Cloud Alibaba AI完成智能化實戰(zhàn)等,盡情期待!

參考資料

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

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

到此這篇關(guān)于Spring AI集成DeepSeek實現(xiàn)流式輸出的操作方法的文章就介紹到這了,更多相關(guān)Spring AI DeepSeek流式輸出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • intellij idea查看方法被哪些類引用過(推薦)

    intellij idea查看方法被哪些類引用過(推薦)

    這篇文章主要介紹了intellij idea查看方法被哪些類引用過,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • JavaWeb實現(xiàn)自動登錄功能

    JavaWeb實現(xiàn)自動登錄功能

    這篇文章主要為大家詳細介紹了JavaWeb實現(xiàn)自動登錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Mybatis數(shù)據(jù)批量插入如何實現(xiàn)

    Mybatis數(shù)據(jù)批量插入如何實現(xiàn)

    這篇文章主要介紹了Mybatis數(shù)據(jù)批量插入如何實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Java中ThreadLocal的用法和原理詳解

    Java中ThreadLocal的用法和原理詳解

    這篇文章主要為大家詳細介紹了Java中ThreadLocal的用法和原理,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,感興趣的可以了解一下
    2023-04-04
  • 全面解析SpringBoot配置文件

    全面解析SpringBoot配置文件

    這篇文章主要為大家全面的解析SpringBoot-配置文件,文中附含詳細的圖文示例代碼,以便同學(xué)們能更好的理解,有需要的同學(xué)可以借鑒參考下
    2021-09-09
  • java可變參數(shù)當(dāng)做數(shù)組處理的方法示例

    java可變參數(shù)當(dāng)做數(shù)組處理的方法示例

    這篇文章主要介紹了java可變參數(shù)當(dāng)做數(shù)組處理的方法,結(jié)合實例形式分析了java可變參數(shù)當(dāng)做數(shù)組處理相關(guān)原理、步驟與操作注意事項,需要的朋友可以參考下
    2019-09-09
  • Spring 注解編程模型相關(guān)知識詳解

    Spring 注解編程模型相關(guān)知識詳解

    這篇文章主要介紹了Spring 注解編程模型相關(guān)知識詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 詳解spring cloud ouath2中的資源服務(wù)器

    詳解spring cloud ouath2中的資源服務(wù)器

    這篇文章主要介紹了spring cloud ouath2中的資源服務(wù)器的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • java圖形界面之布局設(shè)計

    java圖形界面之布局設(shè)計

    這篇文章主要介紹了java圖形界面之布局設(shè)計的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • 深入理解框架背后的原理及源碼分析

    深入理解框架背后的原理及源碼分析

    這篇文章來為大家深入的介紹了框架背后的原理及源碼分析,希望大家能夠更深層次的理解并使用好框架,在此與君共勉,框架雖好,但不要丟了其背后的原理
    2022-01-01

最新評論