当前位置: 首页 > news >正文

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.dtcms.com/a/267194.html

相关文章:

  • 深度学习的核心理论与技术
  • 11_架构演进:从单体到云原生的蜕变
  • 炸鸡派例程-ADC
  • RabbitMQ 4.1.1初体验-队列和交换机
  • 【AI论文】WorldVLA:迈向自回归动作世界模型
  • 第二章 简单程序设计
  • 盘式制动器的设计+说明书和CAD)【6张】+绛重
  • 一种结合双阶段注意力循环神经网络(DA-RNN)和卷积块注意力模块(CBAM)的滚动轴承故障诊断方法
  • Rust实用案例解析
  • 后端树形结构
  • Qt处理USB摄像头开发说明与QtMultimedia与V4L2融合应用
  • 【爬虫】逆向爬虫初体验之爬取音乐
  • 408第三季part2 - 计算机网络 - 物理层
  • 由coalesce(1)OOM引发的coalesce和repartition理解
  • 3dmax一键烘焙很多张贴图合并成一张贴图插件支持fbx/obj/blender多材质模型合并为一张贴图
  • OneCode自主UI设计体系:架构解析与核心实现
  • web前端面试-- MVC、MVP、MVVM 架构模式对比
  • Vue.js TDD开发深度指南:工具链配置与精细化测试策略
  • 爬虫工程师Chrome开发者工具简单介绍
  • Kafka消息积压的多维度解决方案:超越简单扩容的完整策略
  • 牛客刷题 — 【排序】[NOIP2010] 导弹拦截(排序枚举)
  • 光伏发电园区管理系统 - Three.js + Django 实现方案
  • React Hooks全面解析:从基础到高级的实用指南
  • 【论文解读】Referring Camouflaged Object Detection
  • SqueezeBERT:计算机视觉能为自然语言处理在高效神经网络方面带来哪些启示?
  • 7月5日星期六今日早报简报微语报早读
  • 在服务器上配置MQ注意的问题
  • Gartner《Stream Processing: 新一代数据处理范式》学习报告
  • Flink-状态恢复-isRestore分析
  • 使用影刀RPA实现每日消防巡检提醒