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 模型进行推理。最后,我们输出了模型的响应。

完整Demo下载

总结

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

### 如何在本地环境配置和接入 DeepSeek #### 环境准备 为了成功地在本地环境中配置并接入 DeepSeek,需先准备好开发环境。对于不同的集成开发环境 (IDE),准备工作会有所不同。 针对 VSCode 用户而言,在开始之前应确保已安装最新版本的VSCode以及Python扩展[^1]。而对于使用PyCharm作为主要编辑器的研发者,则建议选用 PyCharm 社区版配合 CodeGPT 插件来增强编程体验[^3]。至于 Java 开发者采用 SpringBoot 进行项目构建的情况下,除了常规设置外还需特别注意 JDK 版本兼容性问题;这里推荐使用 jdk1.8 或以上版本,并提前创建好所需的 deepseek API key [^2]。 #### 配置过程详解 ##### 获取API Key 无论哪种 IDE ,第一步都是前往 DeepSeek 官方网站注册账号并获取专属的 API 密钥。这一步骤至关重要,因为后续所有的请求都将依赖于该密钥来进行身份验证。 ##### 设置DeepSeek-R1模型 完成上述操作之后,接下来就是按照官方文档指导下载对应的 SDK 并将其引入至当前工作空间内。例如,在 Python 项目里可以通过 pip 工具快速安装所需库文件 `pip install deepseek` 。而在Java工程中则可能涉及到 Maven 或 Gradle 构建工具的相关配置调整。 ##### 编写测试代码片段 最后编写一段简单的程序用于检验整个流程是否通畅无阻: ```python from deepseek import Client client = Client(api_key='your_api_key_here') response = client.generate(text="解释一下什么是机器学习?") print(response.choices[0].text.strip()) ``` 通过执行这段脚本可以初步判断 DeepSeek 是否能够正常响应来自客户端发出的任务指令。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值