Spring?AI集成DeepSeek實現(xiàn)流式輸出的操作方法
前面一篇文章我們實現(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)文章
Mybatis數(shù)據(jù)批量插入如何實現(xiàn)
這篇文章主要介紹了Mybatis數(shù)據(jù)批量插入如何實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07java可變參數(shù)當(dāng)做數(shù)組處理的方法示例
這篇文章主要介紹了java可變參數(shù)當(dāng)做數(shù)組處理的方法,結(jié)合實例形式分析了java可變參數(shù)當(dāng)做數(shù)組處理相關(guān)原理、步驟與操作注意事項,需要的朋友可以參考下2019-09-09詳解spring cloud ouath2中的資源服務(wù)器
這篇文章主要介紹了spring cloud ouath2中的資源服務(wù)器的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02