资讯动态

SpringAi Chat Memory 聊天记忆(五)

发布时间:2026/8/16 15:35:39 来源:尧图企业网站定制
大语言模型LLMs是无状态的即它们不会自动保留先前对话信息。这在需要跨多次交互保持上下文或状态时是一个显著限制。Spring AI 引入 Chat Memory 功能允许你在多轮对话中存储并检索信息以解决这一问题。Spring AI中的Chat Memory可以将最近N次对话上下文信息保存在内存或者外部数据库例如PostgreSQL、MySQL、SQL Server、HSQLDB、Cassandra、Neo4j中以便LLM在同一会话的多轮互动中保持语义连贯默认N为20包括USER、ASSISTANT消息也可以用户来指定超出后按时间顺序清理system 消息一直存在不计入20条内。ChatMemory抽象与使用方式ChatMemory使用中涉及如下两个接口Ø ChatMemory接口提供在指定对话中添加消息、检索记忆内容、以及清理旧消息的能力。Ø ChatMemoryRepository接口负责消息的底层储存与提取。ChatMemory默认实现为MessageWindowChatMemory类如下方式创建ChatMemory:MessageWindowChatMemory memory MessageWindowChatMemory.builder().maxMessages(20).build();以上这种方式创建ChatMemory对象默认将保存最近N条对话信息默认20条超出后按时间顺序清理系统消息不会被清除。最近N条对话消息存储到哪里由ChatMemoryRepository的实现决定存储后端ChatMemoryRepository有如下四种实现InMemoryChatMemoryRepository使用 ConcurrentHashMap 存储消息这种也是默认方式。JdbcChatMemoryRepository基于 JDBC 的关系型数据库PostgreSQL、MySQL、SQL Server、HSQLDB存储数据支持通过 Spring 属性配置 schema 初始化时机与脚本位置。CassandraChatMemoryRepository使用 Cassandra可配置 TTL例如 3 年实现自动过期。Neo4jChatMemoryRepository基于图数据库 Neo4j存储消息。在SpringBoot项目中使用ChatMemory的步骤如下1. 在项目中配置ChatMemory Bean使用示例如下#使用默认内存方式 Bean ChatMemory chatMemory() { // 保留 20条最近消息 return MessageWindowChatMemory.builder() .maxMessages(20) .build(); } #使用JDBC方式 Bean ChatMemory chatMemory(JdbcChatMemoryRepository repo) { return MessageWindowChatMemory.builder() .chatMemoryRepository(repo) .maxMessages(20) .build(); }ChatMemory存储在内存案例以下案例是将ChatMemory存储在内存中按照如下步骤实现即可。1) 创建SpringBoot项目命名为“SpringAIChatMemoryInMemory”2) 配置项目pom.xml?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.5.2/version relativePath/ !-- lookup parent from repository -- /parent groupIdcom.example/groupId artifactIdSpringAIChatMemoryInMemory/artifactId version0.0.1-SNAPSHOT/version nameSpringAIChatMemoryInMemory/name descriptionSpringAIChatMemoryInMemory/description properties java.version17/java.version /properties !-- 导入 Spring AI BOM用于统一管理 Spring AI 依赖的版本 引用每个 Spring AI 模块时不用再写 version只要依赖什么模块 Mavens 自动使用 BOM 推荐的版本 -- dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version1.0.0-SNAPSHOT/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-deepseek/artifactId /dependency /dependencies !-- 声明仓库 用于获取 Spring AI 以及相关预发布版本-- repositories repository idspring-snapshots/id nameSpring Snapshots/name urlhttps://repo.spring.io/snapshot/url releases enabledfalse/enabled /releases /repository repository nameCentral Portal Snapshots/name idcentral-portal-snapshots/id urlhttps://central.sonatype.com/repository/maven-snapshots//url releases enabledfalse/enabled /releases snapshots enabledtrue/enabled /snapshots /repository /repositories /projectChatMemory存储在MySQL案例2) 配置项目pom.xml?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.5.3/version relativePath/ !-- lookup parent from repository -- /parent groupIdcom.example/groupId artifactIdSpringAIChatMemoryInMySQL/artifactId version0.0.1-SNAPSHOT/version nameSpringAIChatMemoryInMySQL/name descriptionSpringAIChatMemoryInMySQL/description properties java.version17/java.version /properties !-- 导入 Spring AI BOM用于统一管理 Spring AI 依赖的版本 引用每个 Spring AI 模块时不用再写 version只要依赖什么模块 Mavens 自动使用 BOM 推荐的版本 -- dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version1.0.0-SNAPSHOT/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-deepseek/artifactId /dependency !--将 ChatMemory 存储到关系数据库 依赖包-- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-chat-memory-repository-jdbc/artifactId /dependency !-- 引入 MySQL 驱动包-- dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId version8.0.33/version /dependency /dependencies !-- 声明仓库 用于获取 Spring AI 以及相关预发布版本-- repositories repository idspring-snapshots/id nameSpring Snapshots/name urlhttps://repo.spring.io/snapshot/url releases enabledfalse/enabled /releases /repository repository nameCentral Portal Snapshots/name idcentral-portal-snapshots/id urlhttps://central.sonatype.com/repository/maven-snapshots//url releases enabledfalse/enabled /releases snapshots enabledtrue/enabled /snapshots /repository /repositories /project

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价