【AI大模型】Spring AI 基于mysql实现对话持久存储详解

【AI大模型】Spring AI 基于mysql实现对话持久存储详解

目录

一、前言

二、Spring AI 记忆功能概述

2.1 Spring AI会话记忆介绍

2.2 常用的会话记忆存储方式

2.2.1 集成数据库持久存储会话实现步骤

三、基于MySql实现会话记忆的实现过程

3.1 ChatMemory 介绍

3.2 ChatMemory的几种实现

3.2.1 InMemoryChatMemory

3.2.2 MessageWindowChatMemory 

3.2.3 MessageChatMemoryAdvisor

3.3 基于mysql实现会话记忆存储思路

四、基于mysql实现会话记忆操作过程

4.1 自定义ChatMemory实现会话记忆存储

4.1.1 创建一张表

4.1.2 导入核心依赖

4.1.3 增加配置信息

4.1.4 添加实体类

4.1.5 增加mapper接口

4.1.6 自定义ChatMemory

4.1.7 配置 ChatClient

4.1.8 增加测试接口

4.1.9 效果验证

4.2 基于JdbcTemplate实现会话记忆存储

4.2.1 前置准备

4.2.2 导入核心依赖

4.2.3 添加配置文件

4.2.4 自定义配置类

4.2.5 添加测试接口

4.2.6 效果验证

1)第一次调用

五、写在文末


一、前言

我们知道,大型语言模型 (LLM) 是无状态的,这就意味着大模型在对话时不会保存之前的交互信息。当我们希望在一次会话中,模型支持多次交互,那么我们该如何实现呢? 在 Spring AI中提供了ChatMemory功能,它允许我们在与LLM的多次交互中存储与检索信息。

二、Spring AI 记忆功能概述

2.1 Spring AI会话记忆介绍

Spring AI 的会话记忆功能是指让智能体(如AI助手、机器人、虚拟角色等)在多次交互中保持上下文或状态,从而提升交互体验和功能性。这种记忆功能使得智能体能够“记

Read more

【数据结构】链表(leetcode)

【数据结构】链表(leetcode)

目录 ① 203.移除链表元素 ② 206.反转链表 ③ 876.链表的中间节点  ④ 返回倒数第k个节点(面试题) ⑤ 21.合并两个有序链表 ⑥ 160.相交链表  ⑦ 138.随机链表的复制(深拷贝) ① 203.移除链表元素   /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode ListNode; struct ListNode* removeElements(struct ListNode* head, int val) { ListNode*newHead = NULL, *newTail = NULL; ListNode*pcur = head; while(

By Ne0inhk
九大排序算法之堆排序

九大排序算法之堆排序

排序算法:堆排序(HeapSort) 关键定义:二叉堆,不稳定的选择排序算法 定义:堆排序 标准定义 堆排序(Heap Sort)是基于二叉堆数据结构实现的一种原地、不稳定的选择排序算法,其核心是利用堆 “父节点与子节点间的大小约束特性”,通过构建初始堆和反复提取堆顶极值 + 重新堆化的操作,将无序序列逐步转换为有序序列。 一 ,前置知识点: 1 二叉堆 堆是一个完全二叉树,主要存在两种类型: 大顶堆:每个父节点的值 ≥ 其左右子节点的值,堆顶(根节点)是整个堆的最大值。 小顶堆:每个父节点的值 ≤ 其左右子节点的值,堆顶是整个堆的最小值。 注:采用大顶堆则堆排序为升序,采用小顶堆位降序 2 链表和数组这两种线性存储结构 堆排序中对于元素的储存大多采用数组结构,原因如下: 特性数组链表(单链表)存储结构连续内存空间非连续节点 + 指针串联访问方式随机访问(O (1))顺序访问(O

By Ne0inhk
【算法通关指南:算法基础篇】二分答案专题:1.木材加工 2.砍树

【算法通关指南:算法基础篇】二分答案专题:1.木材加工 2.砍树

🔥小龙报:个人主页 🎬作者简介:C++研发,嵌入式,机器人方向学习者 ❄️个人专栏:《算法通关指南 》 ✨ 永远相信美好的事情即将发生 文章目录 * 前言 * 一、二分答案 * 二、二分答案经典算题 * 2.1 木材加工 * 2.1.1题目 * 2.1.2 算法原理 * 2.1.3 代码 * 2.2 砍树 * 2.2.1 题目 * 2.2.2 算法原理 * 2.2.3 代码 * 总结与每日励志 前言 二分答案是算法竞赛与笔试中极具技巧性的高分解法,核心思路是将复杂求解转化为简洁的二分+判定,

By Ne0inhk
LeetCode 141题:环形链表的艺术与科学

LeetCode 141题:环形链表的艺术与科学

🌟 LeetCode 141题:环形链表的艺术与科学 * 🌀 环形链表:当数据开始循环舞蹈 * 🔍 解法一:哈希表法 - 记忆的艺术 * 解题思路 * 性能分析 * 🏃‍♂️ 解法二:快慢指针法 - 龟兔赛跑的智慧 * 解题思路 * 性能优势 * 💻 代码实现与调试心得 * 🌈 思维与实现的分离 * 🎯 总结 因为想更好地为义父义母大佬服务,本文 Bilibili 视频地址 🌀 环形链表:当数据开始循环舞蹈 在计算机科学的世界里,链表是一种优雅而基础的数据结构。正常链表如同一条笔直的小路,从起点(head)出发,每个节点指向下一个节点,最终以空指针(nullptr)作为终点,标志着旅程的结束。 Head Node1 Node2 Node3 nullptr 然而,环形链表则打破了这种线性规则,它更像是一个神秘的莫比乌斯环,没有真正的终点。链表的某个节点不再指向空,而是指向链表中已经存在的另一个节点,形成了一个无尽的循环。 Head

By Ne0inhk