文心一言的流式接口數據進行處理 增加屬性

需求:需要對文心一言的流式接口數據進行處理 增加屬性

return ResponseEntity.ok().header("Access-Control-Allow-Origin", "*").contentType(org.springframework.http.MediaType.TEXT_EVENT_STREAM).cacheControl(org.springframework.http.CacheControl.noCache()).body(outputStream -> {try (Response response = client.newCall(request).execute();ResponseBody responseBody = response.body();InputStream inputStream = responseBody.byteStream()) {if (!response.isSuccessful()) {throw new IOException("Failed to fetch streaming data, HTTP error code: " + response.code());}byte[] buffer = new byte[4096];int bytesRead;while ((bytesRead = inputStream.read(buffer)) != -1) {/*outputStream.write(buffer, 0, bytesRead);outputStream.flush();*/String data = new String(buffer, 0, bytesRead, StandardCharsets.UTF_8);String[] lines = data.split("\n");for (String line : lines) {if (line.startsWith("data: ")) {// 記錄流輸出結果,用于后續持久化com.zbIntel.integration.wenxin.entity.ChatResponse bean =JSONUtil.parseObj(line.substring(6).getBytes(StandardCharsets.UTF_8)).toBean(com.zbIntel.integration.wenxin.entity.ChatResponse.class);bean.setSessionId(req.getSessionId());// 序列化bean并發送String serializedBean = JSONUtil.toJsonStr(bean);outputStream.write(("data: " + serializedBean + "\n\n").getBytes(StandardCharsets.UTF_8));outputStream.flush();log.info("返回數據:{}", bean);String content = bean.getResult();if (bean.getIs_end()) {isEndflag.set(Boolean.TRUE);}// 記錄流輸出結果,用于后續持久化respContent.append(content);}}}} catch (IOException e) {log.error("Error during streaming data: ", e);outputStream.write(("{" +"  \"error_code\": 112," +"  \"error_msg\": \"" + e.getMessage() + "\"" +"}").getBytes(StandardCharsets.UTF_8));outputStream.flush();}if(isEndflag.get()) {// 構造回復數據對象,持久化String respContentStr = respContent.toString();SessionChatRecordEntity replyRecord = new SessionChatRecordEntity(finalAskRecord.getSessionId(), Role.ASSISTANT.name,respContentStr, ChatGPTApi.getMessageTokenNum(respContentStr));sessionChatRecordService.saveBatch(ImmutableList.of(finalAskRecord, replyRecord));// 刷新緩存chatService.refreshWindowRecordCache(finalAskRecord.getSessionId());}});

主要時這段:

// 序列化bean并發送
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String serializedBean = JSONUtil.toJsonStr(bean);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? outputStream.write(("data: " + serializedBean + "\n\n").getBytes(StandardCharsets.UTF_8));
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? outputStream.flush();

返回的結果:

增加了 sessionId的屬性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/44198.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44198.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/44198.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python調用串口收發數據

1、確認串口信息 2、安裝pyserial庫 打開終端或命令行,敲入這行命令:pip install pyserial 3、python編程 import serial def main(): #創建串口對象 ser serial.Serial(COM4, 9600, timeout1) if not ser.isOpen(): print("串…

飛睿智能6公里WiFi圖傳接收模塊,低延遲、抗干擾、高速穩定傳輸數據,無人機、農田遠距離WiFi模塊

在科技日新月異的今天,無線通信技術正以前所未有的速度發展,不僅改變了我們的生活方式,還為企業帶來了前所未有的商業機遇。今天,我要向大家介紹一款飛睿智能的產品——6公里WiFi圖傳接收模塊,它以其高性能、穩定的傳輸…

【常見的設計模式】單例模式

參考:【設計模式專題之單例模式】1.小明的購物車 【設計模式專題之單例模式】 1.小明的購物車 時間限制:1.000S 空間限制:256MB ? 題目描述 小明去了一家大型商場,拿到了一個購物車,并開始購物。請你設計一個購物車管…

【React】基礎數據回填--useForm與setFieldsValue詳解

相關屬性 1.form 2.setFieldsValue 代碼 import{Form }from"antd";const Publish =

體積大的快遞怎么寄便宜?如何寄件寄包裹更省錢?

大學畢業了,面對即將到來的工作生活,小李不得不把宿舍里的大包小包打包寄回家。可是,當他真正開始打包行李時,才發現這可不是一件簡單的事:衣服、被子、書籍、雜物……這些東西加起來體積不小,想要省錢寄快…

虛擬化技術 DeskV(或Desktop Virtualization)

DeskV(或Desktop Virtualization),即桌面虛擬化技術,是一種將計算機的桌面系統(包括操作系統、應用程序和用戶數據)進行虛擬化,以實現桌面使用的安全性和靈活性的技術。以下是關于DeskV&#xf…

基于stm32單片機的智能手環的設計

摘 要 隨著科技的飛速發展和人們生活水平的提高,健康與科技日益融合,智能可穿戴設備已成為現代人生活中不可或缺的一部分。智能手環,作為一種便攜、實用且功能豐富的可穿戴設備,受到越來越多用戶的喜愛。它不僅能夠實時監測用戶的…

簡化嵌入式Linux開發:在Ubuntu上安裝和配置交叉編譯環境的高效方法

在嵌入式Linux開發中,我們通常需要在Ubuntu上安裝交叉編譯工具鏈,并配置相關文件。編譯過程中,如果遇到依賴庫問題,還需要手動查找并編譯開源源碼。這些步驟較為繁瑣,為了簡化操作,我們可以嘗試以下方案&am…

深度解析:銀行小額支付與大額支付的關鍵區別與應用場景

一、交易金額 小額支付:通常適用于金額在5萬元以下的支付場景。這種支付方式更適合個人用戶或小額交易場景,如便利店購物、支付停車費、小額匯款等。大額支付:涉及金額較大的支付交易,一般被定義為單筆交易金額超過一定數額&…

特殊的“user profile service服務登錄失”情況

記錄一下比較特殊的user profile service服務登錄失敗情況 公司電腦,某次之后每次來公司電腦開機后就會出現這個情況,后來發現只要是關機后再開機百分百出現,重啟就不會,一開始也百度、google了,網上有很多解決方式&am…

DropNotch for Mac v1.0.1 在 Mac 劉海快速使用 AirDrop

應用介紹 DropNotch 是一款專為Mac設計的應用程序,可以將MacBook的凹口區域(劉海)轉換為文件放置區。 功能特點 文件共享: 用戶可以將文件拖放到MacBook的凹口區域,并通過AirDrop、郵件、消息等方式輕松共享。多顯示器支持: 即…

.Net C#執行JavaScript腳本

文章目錄 前言一、安裝二、執行 JavaScript 腳本三、與腳本交互四、JS 調用 C# 方法五、多線程使用總結 前言 ClearScript 是一個 .NET 平臺下的開源庫,用于在 C# 和其他 .NET 語言中執行腳本代碼。它提供了一種方便和安全的方法來將腳本與應用程序集成,…

PHP酒店賓館民宿多商戶版系統小程序源碼

解鎖酒店新境界!揭秘多商戶版系統的無限可能🏨? 🚀 開篇:酒店業的新革命,多商戶版系統來襲! 你是否夢想過將你的酒店打造成一個集餐飲、娛樂、購物于一體的綜合型休閑空間?現在,這…

【linux】服務器卸載cuda

【linux】服務器卸載cuda 文章目錄 【linux】服務器卸載cuda1、查找已安裝的 CUDA 包:2、卸載 CUDA:3、刪除殘留文件4、更新系統的包索引:5、檢查是否卸載干凈: 1、查找已安裝的 CUDA 包: dpkg -l | grep cuda2、卸載…

【JavaScript】深入理解Promise:從基礎概念到進階用法、手寫promise

🔥 個人主頁:空白詩 文章目錄 一、引言二、Promise概述1. Promise的定義2. Promise的用途3. Promise的三種狀態4. Promise的構造函數和基礎結構5. Promise的優點6. Promise的實例方法7. Promise的靜態方法 三、Promise的基本用法1. 創建一個Promise2. th…

The First項目報告:引領L2解決方案新紀元的模塊化協議AltLayer

在區塊鏈演進中,可擴展性與定制化成為開發者核心訴求。ZK Rollups與Optimistic Rollups雖顯著提升以太坊等區塊鏈性能,卻面臨訪問性、定制難、中心化風險及流動性分散等挑戰。AltLayer以Rollups-as-a-Service創新模式,賦予開發者直接管理roll…

python class

繼承 看下Python中繼承的語法&#xff1a; class DerivedClassName(BaseClassName):<statement-1>...<statement-N>復制代碼 如果基類定義在另一個模塊中的時候&#xff1a; class DerivedClassName(modname.BaseClassName):

【漏洞復現】飛企互聯-FE企業運營管理平臺——uploadAttachmentServlet——文件上傳

聲明&#xff1a;本文檔或演示材料僅供教育和教學目的使用&#xff0c;任何個人或組織使用本文檔中的信息進行非法活動&#xff0c;均與本文檔的作者或發布者無關。 文章目錄 漏洞描述漏洞復現測試工具 漏洞描述 飛企互聯-FE企業運營管理平臺是一個基于云計算、智能化、大數據…

Linux用戶和用戶組的創建和添加

創建用戶組 在Linux中創建用戶組&#xff0c;您可以使用groupadd命令&#xff0c;后跟用戶組名稱。例如&#xff0c;要創建一個名為newgroup的用戶組&#xff0c;您可以執行以下命令&#xff1a; sudo groupadd newgroup創建用戶 創建用戶&#xff0c;您可以使用useradd命令&am…

平安養老險山西分公司開展2024年“7.8全國保險公眾宣傳日”活動

為深入貫徹新發展理念和中央金融工作會議、中央經濟工作會議精神&#xff0c;推動保險行業形象持續向好&#xff0c;根據中保協《關于印發<2024年“7.8全國保險公眾宣傳日”活動方案>的通知》和山西省保險行業協會《山西保險業2024年“7.8全國保險公眾宣傳日”活動方案》…