spring-ai-alibaba 1.0.0.2 學習(十二)——聊天記憶擴展包

學習spring-ai時提到過,spring-ai除了內置的InMemoryChatMemoryRepository,還提供jdbc、cassandra、neo4j三個擴展包。

而spring-ai-alibaba則提供了jdbc、redis、elasticsearch三個擴展包。

兩者都提供了jdbc擴展包,有什么區別呢?

spring-ai jdbc和spring-ai-alibaba jdbc對比

spring-ai的jdbc擴展spring-ai-alibaba的jdbc擴展
支持的數據庫

hsql

mysql

postgres

sqlserver

mysql

oracle

postgres

sqlite

sqlserver

JdbcChatMemoryRepository非抽象類抽象類
實現兼容的方式組合模式,內部包含一個dialect,根據數據庫類型不同提供不同sql繼承模式,不同數據庫不同子類
功能查找所有對話id
保存所有
根據對話id查找
根據對話id刪除

查找所有對話id
保存所有
根據對話id查找
根據對話id刪除

初始化時會查看表是否存在,不存在則創建

spring-ai和spring-ai-alibaba都提供了ChatMemoryRepository接口的jdbc實現JdbcChatMemoryRepository,并提供了自動裝配的bean。區別主要在于支持的數據庫和對表的初始化上面。

簡單樣例

以mysql為例,使用分為三步

第一步:添加依賴

		<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-memory</artifactId></dependency>

第二步:添加配置

spring:ai:chat:memory:repository:jdbc:mysql:jdbc-url: your_urlusername: your_usernamepassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Driverenabled: true

第三步:代碼調用

    private final ChatClient chatClient;private final MessageWindowChatMemory messageWindowChatMemory;public MysqlMemoryController(ChatClient.Builder builder, MysqlChatMemoryRepository mysqlChatMemoryRepository) {this.messageWindowChatMemory = MessageWindowChatMemory.builder().chatMemoryRepository(mysqlChatMemoryRepository).maxMessages(100).build();this.chatClient = builder.defaultAdvisors(MessageChatMemoryAdvisor.builder(messageWindowChatMemory).build()).build();}@GetMapping("/call")public String call(@RequestParam(value = "query") String query,@RequestParam(value = "conversation_id") String conversationId) {return chatClient.prompt(query).advisors(a -> a.param(CONVERSATION_ID, conversationId)).call().content();}

內部原理及相關接口和實現類

spring-ai-alibaba-starter-memory:默認會引入jdbc、redis、elasticsearch和自動裝配的jar包,且自動裝配的jar包包含上述三個jar包的自動裝配,不能按需取用,希望后面官方能夠進行拆分管理。

自動裝配包(spring-ai-alibaba-autoconfigure-memory):包含redis、elasticsearch和5種jdbc數據庫的自動裝配的類,是否開啟主要使用spring.ai.memory.數據庫.enabled進行配置,默認為false不開啟。

jdbc擴展包(spring-ai-alibaba-starter-memory-jdbc):主要是抽象類JdbcChatMemoryRepository和5個數據庫的子類。邏輯主要在JdbcChatMemoryRepository中,該類實現了ChatMemoryRepository接口,在構造函數中會查詢是否存在聊天記憶表,若不存在則會創建。子類主要是各個數據庫的語句(是否存在表、創建表、保存聊天記憶、查詢聊天記憶、刪除聊天記憶等)。

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

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

相關文章

c語言-指針(數組)練習2

題目&#xff1a;將數組中n個元素按逆序存放并打印出來&#xff0c;使用函數封裝與指針 思路&#xff1a; 1.定義一個數組arr[5]和用于存放數組大小&#xff08;數組大小通過sizeof關鍵字來進行計算&#xff09;的變量len&#xff1b; 2.創建三個函數initArr、printArr、rev…

Redis服務器

Redis&#xff0c;一款Key-Value型內存數據庫 常用于網站開發場景 Redis服務器只發布了Linux版本 Redis服務器安裝&#xff0c;2種辦法 自動安裝 apt install redis-server手動編譯安裝 從官網下載源碼&#xff0c;編譯&#xff0c;部署 1 安裝redis apt install redis-s…

LeetCode 第91題:解碼方法

題目描述&#xff1a; 一條包含字母A-Z的消息通過以下映射進行了編碼 1-A ...... 26-Z 要特別注意&#xff0c;11106可以映射為AAJF或KJF 06不是一個合法編碼 給你一個只含數字的非空字符串s&#xff0c;請計算并返回解碼方法的總數。如果沒有合法的方法解碼整個字符串&#xf…

Rocky Linux 9 源碼包安裝Mysql8

Rocky Linux 9 源碼包安裝Mysql8 大家好我是星哥&#xff0c;之前介紹了&#xff0c;Rocky Linux 9 源碼包安裝Mysql5.7。 本文將介紹如何在Rocky Linux 9操作系統上&#xff0c;從源碼一步步安裝MySQL 8&#xff0c;為您提供一個穩定、高效且可控的數據庫解決方案。 為什么…

AI小智項目全解析:軟硬件架構與開發環境配置

AI小智項目全解析&#xff1a;軟硬件架構與開發環境配置 一、項目整體架構 AI小智是一款基于ESP32的智能物聯網設備&#xff0c;集成了語音交互、邊緣計算等功能。整體系統架構如下&#xff1a; 終端設備&#xff1a;ESP32模組作為核心通信方式&#xff1a; WebSocket實現實…

設計模式之上下文對象設計模式

目錄 一、模式介紹 二、架構設計 三、Demo 示例 四、總結 一、模式介紹 上下文對象&#xff08;Context Object&#xff09;模式 最早由《Core J2EE Patterns》第二版提出&#xff0c;其核心目標是在多層或多組件間共享與當前作用域&#xff08;如一次請求、一次會話、一次…

@Linux服務器加域退域

文章目錄 **一、加入Active Directory域****1. 準備工作****2. 配置步驟****步驟1&#xff1a;驗證網絡和DNS****步驟2&#xff1a;發現域****步驟3&#xff1a;加入域****步驟4&#xff1a;配置SSSD&#xff08;可選&#xff09;****步驟5&#xff1a;配置sudo權限&#xff08…

鴻蒙系統(HarmonyOS)4.2 設備上實現無線安裝 APK 并調試

在鴻蒙系統&#xff08;HarmonyOS&#xff09;4.2 設備上實現無線安裝 APK 并調試的步驟與 Android 類似&#xff0c;但需注意鴻蒙系統的特殊設置。以下是詳細操作指南&#xff1a; 鴻蒙系統特殊準備 開啟開發者選項&#xff1a; - 設置 > 關于手機 > 連續點擊"H…

MyBatis時間戳查詢實戰指南

在 MyBatis 中通過時間戳&#xff08;Timestamp&#xff09;作為查詢條件&#xff0c;需注意數據庫時間類型與 Java 類型的映射。以下是具體實現方式&#xff1a; 一、Java 實體類與數據庫字段映射 實體類定義 使用 java.sql.Timestamp 或 java.time.LocalDateTime&#xff08;…

【Verilog硬件語言學習筆記4】FPGA串口通信

串口通信是系統設計中比較基部分&#xff0c;其原理其實也很通俗易懂。單次建立通信會傳輸8個bit&#xff0c;其時序也很簡單&#xff0c;這里就不再贅述了。其對應的實例代碼如下所示&#xff1b; 首先是接受部分&#xff08;因為我的變量命名也很規范&#xff0c;通俗易懂&a…

Go 語言安裝教程(Windows 系統)

2025年07月02日 準備工作 確認系統為 Windows 7 及以上版本&#xff08;推薦 Windows 10/11&#xff09;。64 位系統選擇 amd64 版本安裝包&#xff0c;32 位系統選擇 386 版本。確保安裝目錄&#xff08;默認 C:\Program Files\Go\&#xff09;有至少 1GB 空間。 下載安裝包…

接口測試之postman

一、Postman功能簡介 3天精通Postman接口測試&#xff0c;全套項目實戰教程&#xff01;&#xff01; Postman是由Postdot Technologies公司打造的一款功能強大的調試HTTP接口的工具。在做接口測試的時候&#xff0c;Postman相當于一個客戶端&#xff0c;它可以模擬用戶發起的各…

【記錄】Ubuntu安裝Mysql

本文記錄Ubuntu系統下安裝Mysql 1 查看系統信息 lsb_release -a 2 使用apt下載安裝Mysql 1 打開終端,首先更新你的系統包索引,以確保所有包都是最新的 sudo apt update 2 安裝mysql服務器 sudo apt install mysql-server (也可以選擇對應的mysql-server 版本) 3 查看mysql狀…

【深度學習:進階篇】--4.1.循環神經網絡(改進)

RNN存在的問題&#xff1a;梯度爆炸&#xff0c;長期依賴參數量過大等問題 目錄 1.GRU(門控循環單元) 1.1.什么是GRU 1.2.直觀理解 1.3.本質解決問題 2.LSTM(長短記憶網絡) 2.1.作用 3.結構擴展與效率優化? 1.GRU(門控循環單元) 2014年&#xff0c;出現的算法&#x…

中心化錢包安全方案

先來看獨立的密鑰安全技術 1 自建或單租戶 CloudHSM 優點&#xff1a;密鑰永不出硬件&#xff0c;無法導出&#xff0c;只能對外提供公鑰。 交易時&#xff0c;外部應用把消息哈希傳進去簽名&#xff0c;再把簽好名的結果拿出來用。 這種方式安全性拉滿&#xff0c;但成本高、…

Android 實現底部彈窗

文章目錄在 Android 中創建優雅的底部選項彈窗 (BottomSheetDialogFragment) &#x1f4f1;第一步&#xff1a;設計底部彈窗的布局 &#x1f3a8;第二步&#xff1a;創建 BottomSheetDialogFragment 類 ??第三步&#xff1a;觸發并顯示底部彈窗 &#x1f680;在 Android 中創…

LAN8720 寄存器概覽和STM32 HAL庫讀寫測試

目錄 寄存器0x00:Basic Control Register&#xff08;BCR&#xff09;0x01:Basic Status Register&#xff08;BSR&#xff09; 連接測試寄存器讀寫測試 補充 寄存器 // 0x00:Basic Control Register&#xff08;BCR&#xff09; BIT15:Soft Reset 寫1復位&#xff0c;寫1之…

滲透測試深度分析:空密碼Administrator賬戶引發的安全風暴

滲透測試深度分析&#xff1a;空密碼Administrator賬戶引發的安全風暴0x01 測試背景 在內網滲透測試中&#xff0c;對Windows主機 192.168.1.98 使用 enum4linux 進行枚舉&#xff1a; enum4linux -u Administrator -p -a 192.168.1.98關鍵發現&#xff1a;Administrator賬戶空…

OpenCV CUDA模塊設備層-----高效地計算兩個 uint 類型值的帶權重平均值

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 OpenCV 的 CUDA 模塊&#xff08;cudev&#xff09; 中的一個設備端內聯函數&#xff0c;用于高效地計算兩個 uint 類型值的帶權重平均值。 該函…

[學習記錄]Unity毛發渲染[URP]-Shell基礎版

毛發&#xff0c;無論是人類的頭發、動物的皮毛&#xff0c;還是奇幻生物的絨毛&#xff0c;都是構成生命感和真實感不可或缺的元素。它對光線的獨特散射、吸收和反射&#xff0c;賦予了物體柔軟、蓬松、有生命力的質感。它不僅僅是讓角色看起來更“毛茸茸”那么簡單&#xff0…