随着大模型技术的快速发展,如何高效集成AI能力到企业级应用中成为开发者关注的重点。本文将手把手教你使用Spring AI框架调用OpenAI API部署的DeepSeek模型,实现从零搭建、接口调用到实战落地的全流程。通过清晰的代码示例、性能优化技巧和避坑指南,读者将掌握如何利用Spring生态快速构建可扩展的AI应用,解决文本生成、数据分析等复杂场景问题。
在本地部署中,我们由于设备的限制,无法使用较多参数的模型进行推理生成,deepseek开放平台提供了API调用的方法,来实现快捷的调用式开发
快捷跳转
- 一、环境准备与资源配置
- 1. 开发环境搭建
- 2. DeepSeek开放平台配置
- 3. 设置yml配置文件
- 二、Spring AI项目调用API模型
- 1. 创建配置类,配置对话客户端类
- 2. 编写Controller层代码
- 3.效果展示
- 阻塞式调用 call
- 流式调用 stream ,未配置字符集的效果
- 流式调用 stream ,配置字符集的效果
一、环境准备与资源配置
开发环境搭建
JDK 17+与Spring Boot 3.x基础环境
申请OpenAI API Key与DeepSeek模型权限
Spring AI项目初始化
通过Spring Initializr添加spring-ai-openai-spring-boot-starter依赖
配置文件详解:application.yml中API密钥与模型参数设置
1. 开发环境搭建
创建一个springboot项目,选择Maven,指定JDK17以上的版本,JDK版本太低可以去官网下一个 JDK17下载链接
这里使用的springboot3.4.4的版本进行
勾选
- Web 下 的 Spring Web 我们需要一个tomcat服务器,测试的时候要用
- SQL 下的 MySQL Driver 后面要用
- AI 下的 OpenAI
打开pom.xml可以看到我们本次用到springAI的依赖坐标
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId></dependency>
项目搭建初步完成
2. DeepSeek开放平台配置
打开deepseek官网, 点击上方API开放平台 deepseek官方网址
点击API keys
点击创建API key, 进行API的创建,记得保存好自己的Key
完成后我们点击充值按钮,按照要求实名认证并充值一点钱
假如不充值的话服务端会报错的
充值完毕后,我们就完成了对开放平台的配置。
3. 设置yml配置文件
配置文件如下:
spring:ai:openai:api-key: ${你的api-key}base-url: https://api.deepseek.comchat:options:model: deepseek-chat
这里说明一下:
- api-key : DeepSeek 官网注册后获取的密钥
- base-url : DeepSeek API 的服务地址
- model :指定使用的模型版本 deepseek-chat是 DeepSeek-v3的模型
deepseek-reasoner 是DeepSeek-R1模型
两个模型的异同,具体参考此图
二、Spring AI项目调用API模型
1. 创建配置类,配置对话客户端类
package com.springai.config;import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class CommonConfiguration {@Bean public ChatClient chatClient(ChatModel chatModel) {return ChatClient.builder(chatModel).build();}
}
2. 编写Controller层代码
package com.springai.controller;import org.springframework.ai.chat.client.ChatClient; // 导入用于与聊天模型交互的 ChatClient 类
import org.springframework.web.bind.annotation.RequestMapping; // 导入用于映射 HTTP 请求的注解
import org.springframework.web.bind.annotation.RestController; // 导入用于定义 RESTful 控制器的注解
import reactor.core.publisher.Flux; // 导入用于处理响应式流的 Flux 类/*** ChatController 是一个 RESTful 控制器,用于处理与聊天模型相关的 HTTP 请求。* 它通过依赖注入的方式使用 ChatClient 来实现与聊天模型的交互。*/
@RestController
@RequestMapping("/chat") // 将该控制器的所有接口映射到 "/chat" 路径下
public class ChatController {private final ChatClient chatClient; // 用于与聊天模型交互的客户端实例/*** 构造函数,通过依赖注入初始化 ChatClient 实例。** @param chatClient 由 Spring 容器提供的 ChatClient 实例*/public ChatController(ChatClient chatClient) {this.chatClient = chatClient;}/*** 处理 "/call" 请求,返回聊天模型对用户输入的单次响应。** @param prompt 用户输入的提示文本* @return 聊天模型生成的响应内容*/@RequestMapping("/call") // 映射 GET /chat/call 请求public String call(String prompt) {return chatClient.prompt() // 创建一个新的提示构建器.user(prompt) // 设置用户输入的提示文本.call() // 调用聊天模型生成响应.content(); // 获取并返回响应内容}/*** 处理 "/stream" 请求,以流的形式返回聊天模型对用户输入的响应。** @param prompt 用户输入的提示文本* @return 包含聊天模型生成的响应内容的响应式流*/@RequestMapping("value="/stream",produces="text/html;charset=utf-8") // 映射 GET /chat/stream 请求public Flux<String> stream(String prompt) {return chatClient.prompt() // 创建一个新的提示构建器.user(prompt) // 设置用户输入的提示文本.stream() // 以流的形式调用聊天模型生成响应.content(); // 获取并返回响应内容的流}
}
3.效果展示
阻塞式调用 call
服务器会等待所有语句生成完毕后,然后在打印显示在web页面上
流式调用 stream ,未配置字符集的效果
这个问题是由于我们流式生成字符时未能正确的读取汉字,我们需要在RequestMapping上配置一下指定字符集
@RequestMapping(value = "/stream",produces="text/html;charset=utf-8" )
流式调用 stream ,配置字符集的效果
服务器会采用流式传输,动态生成语句,直到结束
到此为止,我们就完成了对deepseek的集成,但还是有好多的功能没有使用到,在接下来的博客中,我们还会讲到更多的使用案例