本篇文章会分基于DeepSeek开放平台上的API,以及本地私有化部署DeepSeek R1模型两种方式来整合使用。
本地化私有部署可以参考这篇博文 全面认识了解DeepSeek+利用ollama在本地部署、使用和体验deepseek-r1大模型
Spring版本选择
根据Spring官网的描述
Spring AI是一个人工智能工程的应用框架,旨在为Java开发者提供一种更简洁的方式与AI交互,减轻在Java业务中接入LLM模型应用的学习成本。目前,Spring AI已经上架到Spring Initializr,开发者可以在https://start.spring.io/上使用并构建相关应用。
SpringAI支持接入多种AI服务,如OpenAI、Ollama、Azure OpenAI、Huggingface等,可以实现聊天、embedding、图片生成、语音转文字、向量数据库、function calling、prompt模板、outputparser、RAG等功能。
spring ai框架支持Spring Boot版本为 3.2.x and 3.3.x
从SpringBoot 3.x 开始依赖的JDK版本最低是JDK17,所以这里演示整合的代码都是基于spring boot 3.3.8 以及 JDK17
整合DeepSeek API key
深度求索deepseek开放平台申请自己的API key,新用户注册后会赠送10元余额,有效期为一个月。
创建一个 API key
保存好自己的API KEY 千万别泄露喽
创建API key后我们可以开始构建SpringBoot工程了,基于springboot 3.4.2版本搭建一个工程
自动引入依赖:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo-deepseek</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo-deepseek</name>
<description>demo-deepseek</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
<spring-ai.version>1.0.0-M5</spring-ai.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</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>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
代码
添加了 spring-ai-openai-spring-boot-starter 依赖;Spring AI 为 OpenAI Chat Client 提供了 Spring Boot 自动装配。
OpenAiAutoConfiguration配置类中自动注入了,我们只需要直接注入调用即可
@RestController
public class ChatController {
@Resource
private OpenAiChatModel chatModel;
private final List<Message> chatHistoryList = new ArrayList<>();
@PostConstruct
public void init() {
chatHistoryList.add(new SystemMessage("You are a helpful assistant."));
}
@GetMapping("/chat")
public ChatResponse test(String message) {
chatHistoryList.add(new UserMessage(message));
Prompt prompt = new Prompt(chatHistoryList);
ChatResponse chatResponse = chatModel.call(prompt);
if (chatResponse.getResult() != null && chatResponse.getResult().getOutput() != null) {
chatHistoryList.add(chatResponse.getResult().getOutput());
}
return chatResponse;
}
}
调用接口测试
本地部署调用
修改pom
spring:
ai:
openai:
base-url: http://127.0.0.1:1234
api-key: xxxxxxx
chat:
options:
model: deepseek-r1:1.5b
api-key不需要了但是也不能不填,不填会启动报错,模型就配置本地有的模型即可
如果想像网站那样可以一个字一个字的输出,也可以调用chatModel.stream流式输出