SpringBoot快速接入DeepSeek-R1大模型(JDK1.8)
JDK 1.8 与 DeepSeek-R1 的对接
JDK 1.8 是一个广泛使用的 Java 开发工具包版本,虽然它已经有些年头,但仍然可以用于许多现代应用程序的开发。对于对接 DeepSeek-R1,JDK 1.8 是足够的,但需要注意一些依赖库的兼容性问题。
ai4j 简介
ai4j
是一个用于在 Java 应用程序中集成人工智能模型的库。它提供了简单的 API,使得开发者可以轻松地调用各种 AI 模型,包括自然语言处理、图像识别等。ai4j
的设计目标是让 Java 开发者能够在不深入了解 AI 底层技术的情况下,快速集成 AI 功能。用于快速接入 AI 大模型应用。它能整合多平台大模型,如 OpenAI、Ollama、智谱 Zhipu(ChatGLM)、深度求索 DeepSeek、月之暗面 Moonshot(Kimi)、腾讯混元 Hunyuan、零一万物(01)等,为用户提供快速整合 AI 的能力。其特点包括提供统一的输入输出(对齐 OpenAI)以消除差异化,优化函数调用(Tool Call)和 RAG 调用,支持向量数据库(如 Pinecone),并且支持 JDK1.8,能满足很多仍在使用 JDK8 版本的应用需求。
Spring AI 的最低 JDK 版本
看过上一篇使用SpringAI
的都知道,SpringAI对JDK的要求非常高。
Spring AI 是 Spring 生态系统中的一个模块,旨在简化 AI 模型的集成。Spring AI 的最低 JDK 版本要求是 JDK 11
。这是因为 Spring AI 使用了一些在 JDK 11 中引入的新特性,这些特性在 JDK 1.8 中是不可用的。
使用 ai4j 调用 Ollama 并集成 DeepSeek-r1:7b 模型
以下是一个使用 ai4j
调用 Ollama 并集成 DeepSeek-R1:7b 模型的示例代码。我们将逐步解释代码的每一部分。
1. 添加依赖
首先,你需要在 pom.xml
中添加目前最新版本的 ai4j
:
<!-- Spring应用 -->
<dependency>
<groupId>io.github.lnyo-cly</groupId>
<artifactId>ai4j-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<!-- 非Spring应用 -->
<dependency>
<groupId>io.github.lnyo-cly</groupId>
<artifactId>ai4j</artifactId>
<version>1.3.0</version>
</dependency>
YAML
配置
ai:
ollama:
api-host: http://localhost:11434
我们依旧是写两个接口,一个直接返回,一个流式返回。
IChatService chatService = aiService.getChatService(PlatformType.OLLAMA);
通过getChatService的方式,选择是用本地ollama还是其他平台。
它一共支持以下平台。
@AllArgsConstructor
@Getter
public enum PlatformType {
OPENAI("openai"),
ZHIPU("zhipu"),
DEEPSEEK("deepseek"),
MOONSHOT("moonshot"),
HUNYUAN("hunyuan"),
LINGYI("lingyi"),
OLLAMA("ollama"),
MINIMAX("minimax"),
BAICHUAN("baichuan");
}
2. 调用模型进行推理
现在,你可以使用配置好的客户端调用模型进行推理。
流式的话他是以SSE端点的形式去获取数据,所以需要你实现一个SSE监听器去打印和发送数据给前端。
package com.example.demo.controller;
import io.github.lnyocly.ai4j.listener.SseListener;
import io.github.lnyocly.ai4j.platform.openai.chat.entity.ChatCompletion;
import io.github.lnyocly.ai4j.platform.openai.chat.entity.ChatCompletionResponse;
import io.github.lnyocly.ai4j.platform.openai.chat.entity.ChatMessage;
import io.github.lnyocly.ai4j.service.IChatService;
import io.github.lnyocly.ai4j.service.PlatformType;
import io.github.lnyocly.ai4j.service.factor.AiService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
@RestController
@RequestMapping("/ai")
@Slf4j
public class OllamChatController {
//注入Ai服务
@Autowired
private AiService aiService;
@GetMapping("/chat")
public String getChatMessage(@RequestParam String question)throws Exception {
//获取OLLAMA的聊天服务
IChatService chatService = aiService.getChatService(PlatformType.OLLAMA);
//创建请求参数
ChatCompletion chatCompletion = ChatCompletion.builder()
.model("deepseek-r1:7b")
.message(ChatMessage.withUser(question))
.build();
System.out.println(chatCompletion);
//发送chat请求
ChatCompletionResponse chatCompletionResponse = chatService.chatCompletion(chatCompletion);
//获取聊天内容和token消耗
String content = chatCompletionResponse.getChoices().get(0).getMessage().getContent().getText();
long totalTokens = chatCompletionResponse.getUsage().getTotalTokens();
System.out.println("总token消耗:" + totalTokens);
return content;
}
@GetMapping("/chatStream")
public void getChatMessageStream(@RequestParam String question, HttpServletResponse response) throws Exception {
// 中文乱码问题
response.setCharacterEncoding("UTF-8");
// 获取OpenAi的聊天服务
IChatService chatService = aiService.getChatService(PlatformType.OPENAI);
// 创建请求参数
ChatCompletion chatCompletion = ChatCompletion.builder()
.model("deepseek-r1:7b")
.message(ChatMessage.withUser(question))
.build();
PrintWriter writer = response.getWriter();
// 发送chat请求
SseListener sseListener = new SseListener() {
@Override
protected void send() {
writer.write(this.getCurrStr());
writer.flush();
System.out.println(this.getCurrStr());
}
};
chatService.chatCompletionStream(chatCompletion, sseListener);
writer.close();
System.out.println(sseListener.getOutput());
}
}
输入
curl http://localhost:8080/ai/chat?question=你是谁
在这个示例中,我们首先配置了 Ollama 客户端,然后使用该客户端调用 DeepSeek-r1:7b
模型进行推理。最后,我们输出了模型的响应。
总结
虽然 JDK 1.8 可以用于对接 DeepSeek-R1,但如果你计划使用 Spring AI,则需要升级到 JDK 11 或更高版本。ai4j
提供了一个简单的方式来集成 AI 模型,使得 Java 开发者可以轻松地在应用程序中使用 AI 功能。通过上述代码示例,你可以快速上手并使用 ai4j
调用 Ollama 并集成 DeepSeek-R1:7b 模型。
ai4j
GitHub