第九模型介绍-聊天记录官网核心架构分为两层关键差异ChatMemory 与 ChatHistory基于内存存储进行演示源码示例数据库查询第九模型介绍-聊天记录官网大型语言模型LLMs是无状态的这意味着它们不会保留之前交互的信息。当您希望在多次交互中保持上下文或状态时这可能是一个限制。为了解决这个问题Spring AI 提供了聊天记忆功能使您能够存储和检索在与 LLM 的多次交互中的信息。spring-ai网址【https://docs.spring.io/spring-ai/reference/api/chat-memory.html】核心架构分为两层ChatMemory记忆管理层如果您需要维护所有消息交换的完整记录您应该考虑使用其他方法例如依赖于Spring Data以高效地存储和检索完整的聊天历史记录Spring AI自动配置一个ChatMemory bean您可以在应用程序中直接使用。默认情况下它使用内存中的仓库来存储消息策略类型实现类描述消息窗口MessageWindowChatMemory维护一个固定大小的消息窗口当消息数超过设定值默认为20时自动移除最旧的消息。摘要记忆ConversationSummaryChatMemory对超过Token限制的历史对话进行摘要将摘要作为后续对话的上下文节省Token用量。时间窗口需自定义根据时间戳只保留最近一段时间内的消息作为上下文。ChatMemoryRepository存储层存储层负责将消息存储在持久化存储中例如数据库或文件系统。Spring AI 提供了以下几种开箱即用的实现InMemoryChatMemoryRepository:默认实现消息存储在内存中适合开发或测试重启即丢失。JdbcChatMemoryRepository:用于关系型数据库持久化。官方支持 MySQL、PostgreSQL、SQL Server、HSQLDB 等关键差异ChatMemory 与 ChatHistory在使用 Spring AI 的记忆功能时理解这两个概念的区别至关重要ChatMemory专为维护当前对话的上下文感知而设计用于提升模型回答质量。ChatHistory指代完整的、原始的对话记录。官方文档明确指出ChatMemory 不适合存储完整历史如需保存所有记录应考虑使用 Spring Data 等其他方案。基于内存存储进行演示源码示例https://gitee.com/kcnf_open/spring-ai-sample/tree/master/spring-ai/spring-ai-sample08yaml配置# In application.yml spring: ai: zhipuai: api-key: ${ZHIPUAI_API_KEY} chat: options: model: glm-4v-flash datasource: url: jdbc:h2:file:./data/chat_memory username: sa password: driver-class-name: org.h2.Driver h2: console: enabled: true path: /h2-console sql: init: mode: always schema-locations: classpath:schema.sql测试代码http://127.0.0.1:8082/index.html测试结果数据库查询本地数据位置可视化客户端查询http://localhost:8082/h2-console登录信息 JDBC URL: jdbc:h2:file:./data/chat_memory Username: sa Password: 留空不填查询结果SELECT * FROM SPRING_AI_CHAT_MEMORY;