当前位置: 首页 > news >正文

Spring Boot整合DeepSeek实现AI对话(API调用和本地部署)

本篇文章会分基于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版本搭建一个工程。
spring-ai-openai starter:伪装成 OpenAI,DeepSeek 提供了 OpenAI 兼容模式。
,引入以下依赖:

自动引入依赖:

<?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配置类中自动注入了,我们只需要直接注入调用即可。

DeepSeek 其实提供了 OpenAI 兼容模式,只要在请求头里加个api_key,就能假装自己在调 OpenAI。Spring AI 的 openai starter 本质上是通过 RestTemplate 发请求,我们只需要改改 URL 和认证方式。
在这里插入图片描述


@RestController
public class ChatController {@Resourceprivate OpenAiChatModel chatModel;private final List<Message> chatHistoryList = new ArrayList<>();@PostConstructpublic 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;}}

修改配置文件

spring:ai:openai:base-url: https://api.deepseek.com/v1  # DeepSeek的OpenAI式端点api-key: sk-your-deepseek-key-herechat.options:model: deepseek-chat  # 指定DeepSeek的模型名称

调用接口测试
在这里插入图片描述

本地部署调用

如果想要把 DeepSeek 部署在内网服务器,或者你想在本地跑个小模型,可以采用这种方式来在本地部署一个 DeepSeek R1 蒸馏版。

spring-ai-ollama-spring-boot-starter:通过 Ollama 本地部署一个 DeepSeek R1 蒸馏版。

下载并安装

从官方网站下载并安装 Ollama:https://ollama.com

Ollama 可以让你轻松在自己的电脑上运行各种强大的 AI 模型,就像运行普通软件一样简单。

ollama pull deepseek-r1:8b
ollama list deepseek

更多版本可以在这里查看:https://ollama.com/library/deepseek-r1
在这里插入图片描述

修改pom,添加依赖

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId><version>0.8.1</version>
</dependency>

修改配置文件

spring:ai:ollama:base-url: http://localhost:11434chat:model: deepseek-r1:8b  # 与本地模型名称对应

实现代码

@RestController
@RequestMapping("/ai")
public class ChatController {private final ChatClient chatClient;// 构造方法注入 ChatClient.Builder,用于构建 ChatClient 实例public ChatController(ChatClient.Builder chatClient) {this.chatClient = chatClient.build();}@GetMapping("/chat")public ResponseEntity<Flux<String>> chat(@RequestParam(value = "message") String message) {try {// 调用 ChatClient 生成响应,并以 Flux<String>(响应流)形式返回Flux<String> response = chatClient.prompt(message).stream().content();return ResponseEntity.ok(response);} catch (Exception e) {return ResponseEntity.badRequest().build();}}
}

api-key不需要了但是也不能不填,不填会启动报错,模型就配置本地有的模型即可
如果想像网站那样可以一个字一个字的输出,也可以调用chatModel.stream流式输出

http://www.lryc.cn/news/536328.html

相关文章:

  • DeepSeek 的 API 服务引入 WPS Office
  • 在Vue中,JavaScript数组常用方法,添加,插入,查找,删除等整理
  • 树莓派上 基于Opencv 实现人脸检测与人脸识别
  • Unity 接入Tripo 文生模型,图生模型
  • Redis常见数据结构
  • fps动作系统9:动画音频
  • 十四、GitLab 流水线自动化部署之 Windows Server
  • 数据库数据恢复—MongoDB丢失_mdb_catalog.wt文件导致报错的数据恢复案例
  • mysql8.0使用MGR实现高可用与利用MySQL Router构建读写分离MGR集群
  • 基于Ubuntu2404搭建k8s-1.31集群
  • Golang的图形编程应用案例
  • PostgreSQL 错误代码 23505 : ERROR: duplicate key value violates unique constraint
  • 基于SpringBoot和PostGIS的省域“地理难抵点(最纵深处)”检索及可视化实践
  • MySQL InnoDB引擎 MVCC
  • 服务器使用centos7.9操作系统前需要做的准备工作
  • 【Prometheus】prometheus结合cAdvisor监控docker容器运行状态,并且实现实时告警通知
  • 【Stable Diffusion模型测试】测试ControlNet,没有线稿图?
  • 算法刷题-数组系列-卡码网.区间和
  • Druid GetConnectionTimeoutException解决方案之一
  • 【JavaScript爬虫记录】记录一下使用JavaScript爬取m4s流视频过程(内含ffmpeg合并)
  • CSDN2024年度总结|乾坤未定你我皆是黑马|2025一起为了梦想奋斗加油少年!!!
  • 【前端】 react项目使用bootstrap、useRef和useState之间的区别和应用
  • 联想电脑如何进入BIOS?
  • 蓝桥杯单片机大模板(西风)
  • 20250213刷机飞凌的OK3588-C_Linux5.10.209+Qt5.15.10_用户资料_R1
  • 2.13学习记录
  • 【DeepSeek】Deepseek辅组编程-通过卫星轨道计算终端距离、相对速度和多普勒频移
  • JavaEE架构
  • Docker 网络的几种常见类型
  • C++ 常用的设计模式