SpringBoot快速接入DeepSeek-R1大模型(JDK1.8)

06-01 1270阅读

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 :


    io.github.lnyo-cly
    ai4j-spring-boot-starter
    1.3.0



    io.github.lnyo-cly
    ai4j
    1.3.0

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=你是谁

SpringBoot快速接入DeepSeek-R1大模型(JDK1.8)

在这个示例中,我们首先配置了 Ollama 客户端,然后使用该客户端调用 DeepSeek-r1:7b 模型进行推理。最后,我们输出了模型的响应。

完整Demo下载

总结

虽然 JDK 1.8 可以用于对接 DeepSeek-R1,但如果你计划使用 Spring AI,则需要升级到 JDK 11 或更高版本。ai4j 提供了一个简单的方式来集成 AI 模型,使得 Java 开发者可以轻松地在应用程序中使用 AI 功能。通过上述代码示例,你可以快速上手并使用 ai4j 调用 Ollama 并集成 DeepSeek-R1:7b 模型。

ai4j GitHub

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码