系列篇章💥

No. 文章
1 大模型之Spring AI实战系列(一):基础认知篇 - 开启智能应用开发之旅
2 大模型之Spring AI实战系列(二):Spring Boot + OpenAI 打造聊天应用全攻略
3 大模型之Spring AI实战系列(三):Spring Boot + OpenAI 实现聊天应用上下文记忆功能
4 大模型之Spring AI实战系列(四):Spring Boot + OpenAI 使用OpenAI Embedding实现文本向量化
5 大模型之Spring AI实战系列(五):Spring Boot + OpenAI 构建带角色设定的智能对话系统
6 大模型之Spring AI实战系列(六):Spring Boot + OpenAI 利用PromptTemplate构建动态提示词系统
7 大模型之Spring AI实战系列(七):Spring Boot + OpenAI 构建结构化输出的AI响应系统
8 大模型之Spring AI实战系列(八):Spring Boot + OpenAI 使用Whisper实现语音转文本功能
9 大模型之Spring AI实战系列(九):Spring Boot + OpenAI 使用TTS实现文本转语音功能
10 大模型之Spring AI实战系列(十):Spring Boot + OpenAI 使用 DALL·E实现文本生成图像功能
11 大模型之Spring AI实战系列(十一):Spring Boot + OpenAI 集成本地向量数据库Chroma
12 大模型之Spring AI实战系列(十二):Spring Boot + OpenAI 构建基于RAG的智能问答系统
13 大模型之Spring AI实战系列(十三):Spring Boot + OpenAI 基于 Tool Calling 实现单个外部工具调用
14 大模型之Spring AI实战系列(十四):Spring Boot + OpenAI 支持多个 Tool 的插件化调用实践
15 大模型之 Spring AI实战系列(十五):Spring AI Tools 初体验——搭建首个可调用工具
16 大模型之 Spring AI实战系列(十六):Spring AI Tools 初级开发——解锁天气查询与数据库操作工具
17 大模型之 Spring AI实战系列(十七):Spring AI Tools 高级技巧——异步调用、事务控制与错误处理攻略
18 大模型之 Spring AI实战系列(十八):Spring AI Tools 进阶实战——深度集成 RESTful API 联通外部服务
19 大模型之Spring AI实战系列(十九):Spring Boot + 智谱AI 一站式开发指南,带你玩转大模型
20 大模型之Spring AI实战系列(二十):Spring AI + MCP + Brave Search 实战指南
21 大模型之Spring AI实战系列(二十一):Spring AI + MCP + 本地文件系统实战指南
22 大模型之Spring AI实战系列(二十二):Spring AI + MCP + SQLite 数据库实战指南
23 大模型之Spring AI实战系列(二十三):Spring AI + MCP + 自定义MCP服务开发实战
24 大模型之Spring AI实战系列(二十四):Spring Boot + OpenAI 集成DeepSeek模型构建智能对话应用


前言

随着大语言模型技术的快速发展,越来越多的企业开始探索如何将高性能、低成本的大模型集成到 Spring 生态中。本文将详细介绍如何使用 Spring AI 快速集成 DeepSeek 提供的 deepseek-chatdeepseek-reasoner 系列模型。

我们将基于 spring-ai-deepseek 示例项目,演示以下核心功能:

  • 使用 ChatClient 实现基础对话与流式输出
  • 自定义模型参数(model / temperature)
  • 支持 OpenAI 特有选项(如 logprobs)
  • 对接 DeepSeek 官方 API 接口

文章内容涵盖从环境搭建到接口测试的完整流程,适合初学者快速上手 Spring AI 与 DeepSeek 的集成开发。


一、开发环境准备

(一)Java 版本要求

本项目采用Java 17进行编译和运行,请务必确保你的开发环境已成功安装JDK 17。你可以在命令行中输入以下命令进行检查:

java -version

输出应类似如下内容:

openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (build 17.0.8+7)
OpenJDK 64-Bit Server VM (build 17.0.8+7, mixed mode, sharing)

(二)Maven 构建工具

确保你已安装 Maven 并配置好环境变量:

mvn -v

输出应类似如下内容:

Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: D:\Program Files (x86)\apache-maven-3.8.8
Java version: 17.0.12, vendor: Oracle Corporation, runtime: D:\Program Files\jdk-17.0.12
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

(三)DeepSeek API Key

你需要注册 DeepSeek 官网 获取 API Key,并设置为环境变量:

export DEEPSEEK_API_KEY="your_deepseek_api_key"

注意:出于安全考虑,不建议将密钥硬编码在代码中,推荐使用环境变量或配置中心进行管理。

二、POM依赖引入

(一)Spring AI与OpenAI集成依赖包

 <dependency>
     <groupId>org.springframework.ai</groupId>
     <artifactId>spring-ai-starter-model-openai</artifactId>
 </dependency>

此依赖包用于实现Spring AI与OpenAI的集成,为后续与OpenAI API进行交互提供了必要的支持。

(二)SpringAI相关依赖包版本管理

版本管理

 <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

部分通过引入spring-ai-bom,实现了对SpringAI相关依赖包版本的统一管理。这样,在项目中使用Spring AI相关依赖时,无需在每个依赖声明中单独指定版本号,只需遵循spring-ai-bom中定义的版本即可,极大地简化了依赖管理工作,同时确保了项目中依赖版本的一致性和稳定性。

三、配置文件详解

在配置文件application.yml中我们需要进行deepseek相关配置:

server:
  port: 8888
spring:
  ai:
    openai:
      api-key: ${DEEPSEEK_API_KEY}
      base-url: https://api.deepseek.com
      chat:
        options:
          model: deepseek-chat
          temperature: 0.7
  • api-key:从环境变量注入;
  • base-url:指定 DeepSeek 官方接口地址;
  • chat.options.model:可切换不同版本的 DeepSeek 模型(如 deepseek-chat, deepseek-reasoner);
  • temperature:控制生成文本的随机性,数值越高越多样化。

四、核心代码详解

(一)启动类:[SpringAiApplication.java]

这是 Spring Boot 的启动类,非常简洁:

@SpringBootApplication
public class SpringAiApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringAiApplication.class, args);
    }
}

Spring Boot会自动扫描并加载所有的Controller、Service等Bean,为项目的启动和运行奠定基础。它通过@SpringBootApplication注解开启了Spring Boot的自动配置功能,使得项目能够快速搭建起一个完整的Spring应用环境。

(二)文本对话控制器(低级封装):[ChatModelController.java]

该类使用 OpenAiChatModel 接口来实现文本生成与流式输出。

@RestController
@RequestMapping("/model")
public class ChatModelController {

    private final OpenAiChatModel chatModel;

    @Autowired
    public ChatModelController(OpenAiChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/chat")
    public Map chat(@RequestParam String message) {
        return Map.of("content", chatModel.call(message));
    }

    @GetMapping("/chat/stream")
    public Flux<ChatResponse> chatStream(@RequestParam String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        return chatModel.stream(prompt);
    }
}

(三)普通文本生成 /model/chat

@GetMapping("/model/chat")
public Map chat(@RequestParam String message) {
    return Map.of("content", chatModel.call(message));
}
  • 调用 DeepSeek 模型进行文本生成;
  • 支持任意自然语言输入;
  • 返回格式为 JSON,便于前端解析。

(四)流式输出 /model/chat/stream

@GetMapping("/chat/stream")
public Flux<ChatResponse> chatStream(@RequestParam String message) {
    Prompt prompt = new Prompt(new UserMessage(message));
    return chatModel.stream(prompt);
}
  • 使用 WebFlux 的 Flux 实现流式输出;
  • 支持 SSE(Server-Sent Events),适合构建聊天机器人、实时问答系统等场景;
  • 可结合前端 EventSource 实现实时交互体验。

(五)通用对话控制器(高级封装):[ChatClientController.java]

该类使用 ChatClient 抽象层提供更灵活的调用方式,适用于多模型适配。

@RestController
@RequestMapping("/client")
class ChatClientController {

    private final ChatClient chatClient;

    ChatClientController(ChatClient.Builder chatClientBuilder) {
        this.chatClient = chatClientBuilder.build();
    }

    @GetMapping("/chat")
    String chat(@RequestParam String question) {
        return chatClient.prompt(question).call().content();
    }

    @GetMapping("/chat/stream")
    Flux<String> chatStream(@RequestParam String question) {
        return chatClient.prompt(question).stream().content();
    }

    @GetMapping("/chat/generic-options")
    String chatGenericOptions(@RequestParam String question) {
        return chatClient
                .prompt(question)
                .options(ChatOptions.builder()
                        .model("deepseek-reasoner")
                        .temperature(0.9)
                        .build())
                .call()
                .content();
    }

    @GetMapping("/chat/provider-options")
    String chatProviderOptions(@RequestParam String question) {
        return chatClient
                .prompt(question)
                .options(OpenAiChatOptions.builder()
                        .logprobs(true)
                        .build())
                .call()
                .content();
    }
}

核心功能说明:

方法 描述
/client/chat 基础对话接口,使用默认模型配置
/client/chat/stream 流式输出接口,支持逐字返回
/client/chat/generic-options 使用通用 ChatOptions 设置模型和温度值
/client/chat/provider-options 使用 OpenAI 特定选项(如 logprobs

五、部署与测试

(一)启动应用

可以直接基于IntelliJ IDEA启动并运行Spring Boot应用程序,也可以进入项目根目录,执行 mvn clean package 进行打包,之后采用 java -jar xxx.jar 命令进行部署运行。运行成功后,应用将在 http://localhost:8888 启动。

(二)测试接口

你可以使用 Postman 或浏览器访问如下接口:

1. 基本对话接口 /client/chat

请求地址:

GET http://localhost:8888/client/chat?question=请介绍下DeepSeek

返回示例:

{
  "content": "DeepSeek 是一家致力于开发先进大语言模型的人工智能公司..."
}

2. 流式输出接口 /client/chat/stream

请求地址:

GET http://localhost:8888/client/chat/stream?question=请介绍下DeepSeek

响应方式:SSE(Server-Sent Events),逐字返回模型生成内容。

3. 自定义模型参数接口 /client/chat/generic-options

请求地址:

GET http://localhost:8888/client/chat/generic-options?question=帮我写一个Java程序

返回结果由 deepseek-reasoner 模型生成,适用于复杂推理任务。

4. OpenAI 特定参数接口 /client/chat/provider-options

请求地址:

GET http://localhost:8888/client/chat/provider-options?question=解释一下Java中的泛型

调用 OpenAI API 专属功能(如 logprobs)。


六、DeepSeek 系列模型简介

(一)deepseek-chat

  • 适用于日常对话、客服、写作辅助等场景;
  • 响应速度快,适合轻量级任务;
  • 默认模型,适合大多数用户。

(二)deepseek-reasoner

  • 专注于逻辑推理、数学计算、编程辅助;
  • 在复杂问题解决方面表现优异;
  • 适合企业级知识问答、代码生成等场景。

(三)deepseek-coder

  • 专为代码理解和生成优化;
  • 支持多种编程语言(Java、Python、C++ 等);
  • 可用于代码补全、错误检测、文档生成等开发辅助任务。

七、进阶实践与优化建议

(一)支持多模型动态切换

通过 @Value 注入当前模型名称,实现运行时动态选择:

@Value("${spring.ai.openai.chat.options.model}")
private String currentModel;

@GetMapping("/chat")
public String chat(@RequestParam String question) {
    return chatClient
            .prompt(question)
            .options(ChatOptions.builder().model(currentModel).build())
            .call()
            .content();
}

(二)封装统一的 PromptTemplate

可以使用 SystemPromptTemplate 构造带上下文的提示词模板:

SystemPromptTemplate template = new SystemPromptTemplate(resource);
Prompt prompt = template.create(Map.of("context", context, "question", question));

便于统一管理业务逻辑中的 Prompt 输入。

(三)引入缓存机制提升性能

对于高频查询关键词,可引入 Redis 缓存,降低 LLM 请求次数。

(四)结合 LangChain4j 实现 Agent 智能体

后续可结合 LangChain4j 实现多轮对话、状态管理、工具调用等功能,打造完整的 AI Agent。


八、结语

通过本文的实践,我们完成了 Spring AI 与 DeepSeek 的集成,掌握了以下关键技能:

  • 如何在 Spring Boot 中集成 DeepSeek 的 deepseek-chatdeepseek-reasoner 模型;
  • 如何实现文本生成、流式输出等基础能力;
  • 如何通过 ChatClient 实现多模型支持与参数定制;
  • 如何通过 application.yml 配置模型参数。

下一篇文章我们将继续深入 Spring AI 集成 DeepSeek 的能力,敬请期待!


若您对本文介绍的技术内容感兴趣,希望进一步探索和实践,欢迎关注我,通过私信的方式与我联系,获取完整的项目代码,开启您的 Spring AI 开发之旅。


在这里插入图片描述

🎯🔖更多专栏系列文章:AI大模型提示工程完全指南AI大模型探索之路(零基础入门)AI大模型预训练微调进阶AI大模型开源精选实践AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

😎 作者介绍:资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索(CSDN博客之星|AIGC领域优质创作者)
📖专属社群:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,回复‘入群’ 即刻上车,获取邀请链接。
💘领取三大专属福利:1️⃣免费赠送AI+编程📚500本,2️⃣AI技术教程副业资料1套,3️⃣DeepSeek资料教程1套🔥(限前500人)
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我们,一起携手同行AI的探索之旅,开启智能时代的大门!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐