在SpringBoot3.4.4项目中,使用JDK17或21,整合Hutool工具类与Knife4j接口文档依赖,通过SpringAI框架配置DeepSeekAPI与ChatClient组件,实现基于内存的会话记忆功能,支持多会话隔离与上下文交互,提升对话连贯性与智能体验,实现高效多轮对话管理,适用于智能客服等场景。
在正式开始之前,需要先准备好基础环境,这直接决定了后续开发的顺畅度。
推荐优先考虑 21 版本。该版本引入了虚拟线程,能够显著提升性能,让并发处理更加轻量高效。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
打开 IDEA,新建一个项目,选择 Spring Initializr 模板。需要注意,确保 Server URL 指向 https://start.spring.io/,避免选择错误导致无法拉取合适的模板。
Java 版本直接选择 21 即可。接下来,Spring Boot 版本选择 3.4.4。在勾选依赖时,可以按需添加,例如 Spring Web 和 Lombok 等常用依赖。如果后续需要修改,直接通过修改 Maven 配置来添加依赖也是完全可行的。
点击创建,一个 Spring Boot 项目就生成了。接下来需要等待 Maven 将依赖下载完毕。如果遇到 Lombok 依赖报错,可以手动在 pom.xml 中指定其版本。
小提示:Lombok 版本可以这样指定:
org.projectlombok lombok 1.18.36 true
项目骨架搭建完成后,可以根据实际需求整合一些常用的开发依赖。这里以 Hutool 工具库和 Knife4j 接口文档为例,将它们集成进来。
Hutool 在 Java 圈中是非常主流的工具类库,几乎涵盖了日常开发中会用到的所有功能,例如字符串处理、日期操作、文件操作、加解密、反射、正则匹配等。引入方式也很简单,在 pom.xml 中添加以下依赖即可:
cn.hutool hutool-all 5.8.37
Knife4j 可以看作是 Swagger 的增强版,它提供了更美观、更易用的 API 文档界面,支持动态参数调试、分组文档等实用功能。引入时需要注意,我们使用的是 Spring Boot 3.x,因此需要使用对应的依赖。
1)在 pom.xml 中添加依赖:
com.github.xiaoymin knife4j-openapi3-jakarta-spring-boot-starter 4.4.0
2)新建一个 controller 包,用于存放 API 接口。先编写一个健康检查接口,方便后续验证接口文档是否正常引入:
@RestController
@RequestMapping("/health")
public class HealthController {
@GetMapping("/check")
public String checkHealth(){
return "OK";
}
}
3)在 application.yml 中配置接口文档,指定扫描 controller 包:
server:
port: 8080
servlet:
context-path: /api
######################################################
############ 接口文档配置 #####################
######################################################
# 访问地址 ${server.servlet.context-path}/doc.html
springdoc:
swagger-ui:
path: /swagger-ui.html
tags-sorter: alpha
operations-sorter: alpha
api-docs:
path: /v3/api-docs
group-configs:
- group: 'default'
paths-to-match: '/**'
packages-to-scan: com.qianliuliang.love.controller # 配置扫描哪些包的接口要加入到文档
# knife4j config
knife4j:
enable: true
setting:
language: zh_cn
4)启动项目,访问 http://localhost:8080/api/doc.html,如果能看到接口文档页面,说明配置成功。
如果是开发一个完整的项目,除了引入依赖,还需要编写一些通用的基础代码,例如自定义异常、响应包装类、全局异常处理器、请求包装类、全局跨域配置等。这些是项目的“骨架”,能让后续开发更规范。
5)最后,在接口文档页面直接发起调试,如果成功返回 “OK”,说明项目初始化没有问题。

这里使用 Spring AI 来对接 DeepSeek 模型,需要提前准备好 DeepSeek 的 ApiKey。
1)在 pom.xml 中引入依赖:
org.springframework.ai spring-ai-openai-spring-boot-starter
2)前往 DeepSeek 官网申请一个 APIKey。官网地址是 https://www.deepseek.com/。操作步骤很直观:
点击 “API开放平台” 进入。

依次点击,找到 “创建API key” 的按钮。

创建好的 API key 务必妥善保管,不要提交到远端仓库,避免泄露。
3)在 application.yml 中添加模型配置:
spring:
application:
name: AI_LOVE
#ds模型配置
ai:
openai:
api-key: 你的apikey
base-url: https://api.deepseek.com
chat:
options:
model: deepseek-chat
将 “你的apikey” 替换成刚才申请到的 key。
4)配置 ChatClient 的 Bean。首先在项目中创建一个名为 config 的包,然后在这个包下新建一个配置类,内容如下:
package com.qianliuliang.love.config;
import com.qianliuliang.love.advisor.MyLoggerAdvisor;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* chatClient bean
*/
@Configuration
public class Client {
/**
* 基于内存会话记忆的 client
*
* @param openAiChatModel
* @return
*/
@Bean
public ChatClient chatClientWithChatMemory(OpenAiChatModel openAiChatModel) {
// 基于内存的会话记忆,可实现上下文记忆会话
ChatMemory chatMemory = new InMemoryChatMemory();
return ChatClient.builder(openAiChatModel)
.defaultSystem("你是一个智能恋爱助手!名字叫LoveDD") // 系统提示词
.defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory),
new MyLoggerAdvisor()) // 自定义日志
.build();
}
}
接下来,创建一个简单的对话类 SimpleChat,用于与大模型进行交互:
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 简单会话
*/
@Slf4j
@Component
public class SimpleChat {
@Autowired
private ChatClient chatClient;
/**
* 普通文本会话
*
* @param msg 用户消息
* @param chatId 会话id
* @return
*/
public String doChatWithString(@RequestParam String msg, String chatId) {
ChatResponse chatResponse = chatClient.prompt()
.advisors(advisorSpec ->
advisorSpec.param("chat_memory_conversation_id", chatId) //会话id/聊天室id
.param("chat_memory_response_size", 10))// 支持10轮会话
.user(msg)
//.advisors(new SimpleLoggerAdvisor())//日志打印
.call()
.chatResponse();
return chatResponse.getResult().getOutput().getText();// 返回与大模型的对话的内容
}
}
然后,创建一个 Controller 来暴露接口:
import com.qianliuliang.love.chat.SimpleChat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/chat")
public class ChatController {
@Autowired
private SimpleChat simpleChat;
/**
* 普通文本会话
*
* @param msg
* @param chatId
* @return
*/
@PostMapping("/doChatWithString")
public String doChatWithString( String msg, String chatId) {
return simpleChat.doChatWithString(msg, chatId);
}
}
最后,重启项目,测试效果。在会话ID为1的聊天室中,告诉大模型 “我是六两”。

接着,切换到会话ID为2的聊天室,询问大模型 “我是谁”。此时大模型会表示不知道,因为这是两个不同的聊天室,信息不互通。

再回到会话ID为1的聊天室,询问同样的问题 “我是谁”。此时大模型会准确回答 “你是六两”,因为在聊天室1中已经告知过它。这说明记忆功能生效,且会话隔离效果良好。

至此,整个接入流程完成。以上便是在SpringBoot项目中接入DeepSeek大模型的完整流程。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述