当前位置: 首页 > 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.mrgr.cn/news/90617.html

相关文章:

  • 【H5自适应】响应式金融理财网站模板 – pbootcms财务管理机构源码下载
  • Seaweedfs(master volume filer) docker run参数帮助文档
  • 【前端开发学习笔记16】Vue_9
  • flink判断两个事件之间有没有超时(不使用CEP)
  • 【工业场景】用YOLOv8实现火灾识别
  • 八.springboot集成mybatis+druid数据库连接池
  • 2025-2-13-4.5 二分法(基础题)
  • 文字转语音(三)FreeTTS实现
  • macOS部署DeepSeek-r1
  • 使用HX搭建UNI-APP云开发项目(适合新手小白与想学云开发的宝子)
  • 【FastAPI 使用FastAPI和uvicorn来同时运行HTTP和HTTPS的Python应用程序】
  • DeepSeek AI 满血版功能集成到WPS或Microsoft Office中
  • cap1:TensorRT介绍及CUDA环境安装
  • 解决QPixmap报“QPixmap::grabWindow(): Unable to copy pixels from framebuffer“问题
  • 【云安全】云原生- K8S etcd 未授权访问
  • 20250212:sigmastar系列2-获取UUID进行授权
  • Radius协议详解
  • Qt的isVisible ()函数介绍和判断窗口是否在当前界面显示
  • Word 公式转 CSDN 插件 发布
  • deepseek本地部署
  • 【地理坐标Geo】——8
  • AI前端开发:蓬勃发展的机遇与挑战
  • 【Pandas】pandas Series drop
  • CZML 格式详解,javascript加载导出CZML文件示例
  • HR告诉你,机器视觉公司招聘真相!
  • AI前端开发:跨领域合作的新引擎