带你玩转springboot 集成deepseek AI

193 阅读3分钟

前言导读

前几天有一个朋友找到我需要做一个ai 的展示项目,客户端使用arkts 后端使用java来编写,之前有写过一些springboot 的项目。就想着把ai集成进来即可。那么废话不多说我们正式开始。这里只演示服务端效果

效果图

image.png

image.png

具体实现

在idea 里面创建spingboot 项目 jdk 版本选择17 因为spirngboot 集成ai 3.5版本最低Java版本需要jdk17 image.png 勾上我们的 springboot web 的依赖和Lombok 的依赖 image.png

添加springboot 需要的依赖

<dependencyManagement>
   <dependencies>
      <dependency>
         <groupId>org.springframework.ai</groupId>
         <artifactId>spring-ai-bom</artifactId>
         <version>1.0.0</version>
         <type>pom</type>
         <scope>import</scope>
      </dependency>
   </dependencies>
</dependencyManagement>
<repositories>
   <repository>
      <id>spring-snapshots</id>
      <name>Spring Snapshots</name>
      <url>https://repo.spring.io/snapshot</url>
      <releases>
         <enabled>false</enabled>
      </releases>
   </repository>
   <repository>
      <name>Central Portal Snapshots</name>
      <id>central-portal-snapshots</id>
      <url>https://central.sonatype.com/repository/maven-snapshots/</url>
      <releases>
         <enabled>false</enabled>
      </releases>
      <snapshots>
         <enabled>true</enabled>
      </snapshots>
   </repository>
</repositories>
<dependency>
   <groupId>org.springframework.ai</groupId>
   <artifactId>spring-ai-starter-model-deepseek</artifactId>
</dependency>

同步拉取依赖,然后我们在 resources 目录下面的application.yml 目录下面添加我们的配置

# In application.yml
spring:
  ai:
    deepseek:
      api-key: XXXXXXXXXXXXX  这里需要改成你自己的appkey  

打开deepseek 的官网

www.deepseek.com/

image.png

创建一个属于自己的apikey

这里注意这个apikey 只能复制一次 并且需要充值才会生效大家可以自己充值再去创建 image.png

编写我们的charController 代码

创建我们的 DeepSeekChatModel 实例 并编写我们的ChatController 构造方法

private final DeepSeekChatModel chatModel;

@Autowired
public ChatController(DeepSeekChatModel chatModel) {
    this.chatModel = chatModel;
}
  • 普通的get请求并返回结果

@GetMapping("/ai/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
    return Map.of("generation", chatModel.call(message));
}
  • 流式get 请求返回结果

这里我们需要注意 设置编码为utf-8 编码不然会出现乱码

@GetMapping( value = "/ai/generateStreamio",produces ="text/html;charset=UTF-8")
public Flux<String> generateStreamio(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
    var prompt = new Prompt(new UserMessage(message));
    return chatModel.stream(prompt).map(chatResponse -> chatResponse.getResult().getOutput().getText());
}

完整代码

package com.example.springai.controller;

import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.deepseek.DeepSeekChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

import java.util.Map;

@RestController
public class ChatController {

    private final DeepSeekChatModel chatModel;

    @Autowired
    public ChatController(DeepSeekChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", chatModel.call(message));
    }

    @GetMapping("/ai/generateStream")
    public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        var prompt = new Prompt(new UserMessage(message));
        return chatModel.stream(prompt);
    }


    @GetMapping( value = "/ai/generateStreamio",produces ="text/html;charset=UTF-8")
    public Flux<String> generateStreamio(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        var prompt = new Prompt(new UserMessage(message));
        return chatModel.stream(prompt).map(chatResponse -> chatResponse.getResult().getOutput().getText());
    }
}

最后总结。

整个的springboot 项目集成deepseek ai 相对来说很简单 过程也比较顺利,如果你需要部署到阿里云服务器或者让腾讯云服务器,只需要把项目打包成jar 然后部署到远程服务器并 启动然后设置成后台启动即可。今天的文章就讲到这里有兴趣的同学可以继续研究 如果你觉得文章还不错麻烦给我三连 关注点赞和转发 如果了解更多鸿蒙开发的知识 可以关注坚果派公众号 。 谢谢

团队介绍

团队介绍:坚果派由坚果等人创建,团队由12位华为HDE以及若干热爱鸿蒙的开发者和其他领域的三十余位万粉博主运营。专注于分享 HarmonyOS/OpenHarmony,ArkUI-X,元服务,仓颉,团队成员聚集在北京,上海,南京,深圳,广州,宁夏等地,目前已开发鸿蒙 原生应用,三方库60+,欢迎进行课程,项目等合作。

坚果派官网地址 :

www.nutpi.net/

如果需要学习更多鸿蒙的知识可以关注我B站教程

课程地址

B站课程地址:www.bilibili.com/cheese/play…

项目内容:

  • 1 常用布局组件的学习

  • 2 网络请求工具类封装

  • 3 arkui 生命周期启动流程

  • 4 日志工具类的封装

  • 5 自定义组合组件的封装

  • 6 路由导航跳转的使用

  • 7 本地地数据的缓存 以及缓存工具类的封装

  • 8 欢迎页面的实现

  • 9 登录案例和自动登录效果实现

  • 10 请求网络数据分页上拉加载 下拉刷新的实现

  • 11 list数据懒加载实现

  • 12 webview组件的使用