SpringAi版本1.0.0结合Redis实现上下文记忆对话(详细)
版本
在文章开始之前我们需要弄清楚几个依赖,目前springchat对话的依赖包括
目前需要引入必须保证jdk17 和springboot在3.xx以上,目前提供了springboot 和springai相关版本最新版本,可以直接去中央参考查看
springboot最新支持版本1.0.0-M6

spring-ai最新支持版本 1.0.0

目前如果仅使用chat功能 使用spring-boot-ai对应的依赖帮助我们快速开发
引入依赖(此处直接省略创建idea-springboot项目过程)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 继承 Spring Boot 父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.5</version>
</parent>
<groupId>cn.itcast</groupId>
<artifactId>my-spring-ai</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-ai.version>1.0.0-M6</spring-ai.version>
<org.projectlombok.version>1.18.36</org.projectlombok.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring AI BOM -->
<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>
<dependencies>
<!-- lombok 管理 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${org.projectlombok.version}</version>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--单元测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.34</version>
</dependency>
<!-- Spring AI OpenAI 依赖 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<source>17</source> <!-- depending on your project -->
<target>17</target> <!-- depending on your project -->
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
官方文档对应的示列-提示我们需要通过ChatClient 的实列对应进行访问操作,也就是说底层以及集成访问大模型对应连接地址

配置类
server:
port: 8099 #端口
tomcat:
uri-encoding: UTF-8 #服务编码
spring:
application:
name: spring-ai
ai:
openai: #openai配置
base-url: #api地址
api-key: #OPENAI_API_KEY key
chat:
options:
model: gpt-3.5-turbo #模型名称
如果有翻墙,直接申请openai的api直接使用OpenAI官网地址,没有对应的key申请地址,使用国内的通义千问也行,需要修改具体直接创建对应实列,直接上官网申请即可通义千问
package cn.itcast.config;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringAIConfig {
/**
* 创建并返回一个ChatClient的Spring Bean实例。
*
* @param builder 用于构建ChatClient实例的构建者对象
* @return 构建好的ChatClient实例
*/
@Bean
public ChatClient chatClient(ChatClient.Builder builder) {
return builder.build();
}
}
服务接口
package cn.itcast.service;
public interface ChatService {
/**
* 普通聊天
*
* @param question 用户提问
* @return 大模型的回答
*/
String chat(String question);
}
服务层
package cn.itcast.service.impl;
import cn.itcast.service.ChatService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.stereotype.Service;
@Slf4j
@Service
@RequiredArgsConstructor
public class ChatServiceImpl implements ChatService {
private final ChatClient chatClient;
/**
* 与聊天客户端进行交互,发送用户问题并获取响应内容。
*
* @param question 用户输入的问题内容
* @return 聊天客户端返回的响应内容
*/
@Override
public String chat(String question) {
// 调用聊天客户端处理用户问题并获取响应内容
String content = chatClient.prompt()
.user(question)
.call()
.content();
log.info("question: {}, content: {}", question, content);
return content;
}
}
测试
package cn.itcast.service;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ChatServiceTest {
@Resource
ChatService chatService;
@Test
public void chat() {
chatService.chat("讲一篇文章");
}
}
目前当前只是简单对话,记忆不存在连贯性。
下篇文章我将整合redis+spring-ai 1.0.0实现我们上下文记忆对话的过程
1183

被折叠的 条评论
为什么被折叠?



