砍材农夫砍材农夫
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 首页

    • 介绍
    • 框架比较
  • spring-ai

    • spring-ai 第一步入门
    • spring-ai 第二提示词介绍
    • spring-ai 第三结构化输出
    • spring-ai 第四多模态API
    • spring-ai 第五模型介绍
    • spring-ai 第六模型介绍-聊天模型
    • spring-ai 第七模型介绍-向量模型
    • spring-ai 第八模型介绍-图像模型
    • spring-ai 第九模型介绍-聊天记录
    • spring-ai 第十tool调用
    • spring-ai 第十一 MCP server 调用入门(stdio协议)
    • spring-ai 第十二 MCP server 调用入门(http协议)
    • spring-ai 第十三 MCP client 调用入门
    • spring-ai 第十四 MCP和tool区别
    • spring-ai 第十五 RAG
    • spring-ai 第十五一节 RAG(加更ETL)
    • spring-ai 第十六 向量数据库
  • spring-ai-alibaba

    • 搭建demo
    • 相关概念
    • demo搭建springAIAlibaba
  • spring-skills

    • 搭建demo
    • 相关概念
    • demo搭建springAIAlibaba
  • AgentScopeJava
    • 搭建demo
    • demo搭建springAIAlibaba
  • langchain

    • v1.0

      • 如何升级版本
      • 环境搭建
      • 架构结构
      • 模型
      • langchain核心
      • langchain-model
      • langchain提示词模板
      • langchain语言模型
      • 调用本地大模型
      • langChain中Chain链使用
      • langChain流程编排
      • langChain服务部署与链路监控
      • langChain消息管理与聊天历史存储
      • langchain_loader
      • langchain中RAG
      • langchain中Agent
  • dify

    • dify入门和安装
    • dify模型配置和验证
  • n8n

    • n8n入门和安装
  • coze

    • coze入门和安装
  • 第九模型介绍-聊天记录
    • 官网
    • 核心架构分为两层
    • 关键差异: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 等

Image text

关键差异:ChatMemory 与 ChatHistory

在使用 Spring AI 的记忆功能时,理解这两个概念的区别至关重要:

  • ChatMemory:

专为维护当前对话的上下文感知而设计,用于提升模型回答质量。

  • ChatHistory:

指代完整的、原始的对话记录。官方文档明确指出,ChatMemory 不适合存储完整历史,如需保存所有记录,应考虑使用 Spring Data 等其他方案。

基于内存存储进行演示

源码示例

https://gitee.com/kcnf_open/spring-ai-sample/tree/master/spring-ai/spring-ai-sample08

  • yaml配置
# 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

  • 测试结果 Image text

数据库查询

  • 本地数据位置 Image text
  • 可视化客户端查询

http://localhost:8082/h2-console

登录信息:
JDBC URL: jdbc:h2:file:./data/chat_memory
Username: sa
Password: (留空,不填)
  • 查询结果
SELECT * FROM SPRING_AI_CHAT_MEMORY;

Image text

最近更新: 2026/4/4 14:24
Contributors: kcnf
Prev
spring-ai 第八模型介绍-图像模型
Next
spring-ai 第十tool调用