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

南京网站建设招聘城乡建设杂志官方网站

南京网站建设招聘,城乡建设杂志官方网站,wordpress手动更新视频,黄埔网站建设优化seo文章目录 1、需求2、ChatMemory中消息的存储位置3、实现步骤1、引入依赖2、配置Spring AI3、配置chatmemory4、java层传递conversaionId 4、验证5、完整代码6、参考文档 1、需求 我们知道大型语言模型 (LLM) 是无状态的,这就意味着他们不会保…

文章目录

  • 1、需求
  • 2、ChatMemory中消息的存储位置
  • 3、实现步骤
    • 1、引入依赖
    • 2、配置Spring AI
    • 3、配置chatmemory
    • 4、java层传递conversaionId
  • 4、验证
  • 5、完整代码
  • 6、参考文档

1、需求

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

    1. 集成ollama部署的本地模型
    1. 使用jdbc存储聊天历史信息(保存到mysql中)

2、ChatMemory中消息的存储位置

ChatMemory中消息的存储位置
默认情况下是存储在内存中,但是它也提供了JDBCCassandraNeo4j的实现。

如果我们想自定义实现存储该如何实现呢? 需要实现ChatMemoryRepository接口。此处我们不自己实现,使用Spring AI 提供的 JDBC存储实现。

注意:使用Spring AI 提供的JDBC实现需要引入 spring-ai-starter-model-chat-memory-repository-jdbc 包
ChatMemoryRepository

3、实现步骤

1、引入依赖

<properties><spring-ai.version>1.0.0</spring-ai.version><java.version>17</java.version><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target>        <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
</properties>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 集成ollama --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-ollama</artifactId></dependency><!-- 使用jdbc存储模型的聊天记录 --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-chat-memory-repository-jdbc</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency>
</dependencies>
<dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

2、配置Spring AI

spring:application:name: spring-ai-advisor-chat-memoryai:ollama:base-url: http://localhost:11434 # 配置ollama的地址chat:model: deepseek-r1:14b  # 配置模型的名称options:temperature: 0.7 # 配置模型温度chat:memory:repository:jdbc:initialize-schema: always# 配置初始化脚本的位置schema: classpath:org/springframework/ai/chat/memory/repository/jdbc/schema-mariadb.sqlplatform: mariadbdatasource:url: jdbc:mysql://127.0.0.1:3306/temp_work?useUnicode=true&characterEncoding=utf8&autoReconnectForPools=true&useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driverlogging:level:# 用于支持llm模型输入前和输入后的日志打印org.springframework.ai.chat.client.advisor: debug

指定脚本的位置

3、配置chatmemory

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.ChatMemoryRepository;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;
import org.springframework.ai.chat.memory.repository.jdbc.JdbcChatMemoryRepository;
import org.springframework.ai.chat.memory.repository.jdbc.JdbcChatMemoryRepositoryDialect;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;import javax.sql.DataSource;/*** ai 配置* @author huan.fu* @date 2025/6/8 - 08:44*/
@Configuration
public class AiConfiguration {@Beanpublic JdbcChatMemoryRepository jdbcChatMemoryRepository(JdbcTemplate jdbcTemplate, DataSource dataSource) {JdbcChatMemoryRepositoryDialect dialect = JdbcChatMemoryRepositoryDialect.from(dataSource);return JdbcChatMemoryRepository.builder().jdbcTemplate(jdbcTemplate).dialect(dialect).build();}@Beanpublic ChatMemory chatMemory(ChatMemoryRepository jdbcChatMemoryRepository){return MessageWindowChatMemory.builder().chatMemoryRepository(jdbcChatMemoryRepository)// 每个会话最多记录20条信息.maxMessages(20).build();}@Beanpublic ChatClient chatClient(OllamaChatModel ollamaChatModel, ChatMemory chatMemory){// 配置模型 (因为我们使用的是 ollama, 所以此处写的是 OllamaChatModel)return ChatClient.builder(ollamaChatModel)// 默认系统提示词.defaultSystem("你是一个拥有丰富经验的编程小助手,擅长编写各种程序。")// 添加模型输入前和输入后日志打印.defaultAdvisors(new SimpleLoggerAdvisor(),// 配置 chat memory advisorMessageChatMemoryAdvisor.builder(chatMemory).build()).build();}
}

注入到advisor中

4、java层传递conversaionId

java层传递conversaionId
java层传递conversaionId

4、验证

依次访问如下2个http请求

http://localhost:8080/blockChat?prompt=介绍一下你自己&conversationId=123456789
http://localhost:8080/blockChat?prompt=我刚刚问的问题是什么&conversationId=123456789

验证结果
会话id需保持一致
从上图中可以,在第二次询问模型时,模型知道上次的问题是什么。

5、完整代码

https://gitee.com/huan1993/spring-cloud-parent/tree/master/spring-ai/spring-ai-advisor-chat-memory

6、参考文档

1、https://docs.spring.io/spring-ai/reference/api/chat-memory.html

http://www.dtcms.com/wzjs/565288.html

相关文章:

  • 最常见企业网站公司有哪些获取网站访问量
  • 做电销有什么资料网站简述网页建站流程
  • c 网站开发视频郓城住房和城乡建设厅网站
  • 苏州制作手机网站html5手机网站开发区别
  • 网站不用域名com域名注册查询
  • 网站改版会影响收录吗电商网站建设优化
  • 关于网站建设方案的案例中国台州网
  • 专门做游戏交易的网站h5 网站模板
  • 做盗版网站会坐牢吗东莞营销网站建设推广
  • 国内优秀网站设计欣赏广告公司赚钱吗
  • 给女友做的网站 源码网站返回404是什么意思
  • 怎么制作钓鱼网站链接陕西省建设监理协会官方网站
  • 云梦网络建站网站建设海报素材图片
  • 网站开发流程可规划为哪三个阶段网站建设很简单
  • ftp网站建立wordpress 调用 页眉
  • 如何判断网站seo做的好坏房产网站推广方法
  • 购物商场网站开发过程详细说明网站正在建设中页面 英文翻译
  • 牛皮纸东莞网站建设技术支持电子商务网站开发平台图
  • 西安网站有哪些手续费广告支持模式的网站
  • 网站建设项目网络图建筑设计网站排行榜
  • 成都市网站建设公wordpress前台发视频图片
  • 深圳电子商务网站有哪些网络优化策划书
  • 有哪些做软件的网站公示专家的定义
  • 瑞昌建站公司官网网站备案
  • 帝国cms小说网站模板下载地址wordpress编辑文章更新失败
  • 建站用哪个模板好温州网站建设哪家公司好
  • 哪些网站可以做微课天元建设集团有限公司滨州分公司
  • iis 如何搭建网站苏州和城乡建设局网站首页
  • 个人博客网站的设计与实现网易企业邮箱 登录
  • 怎么判断网站优化过度南宁设计网站