Spring 项目接入 DeepSeek,分享两种超简单的方式!

news/2025/2/12 21:32:11/文章来源:https://www.cnblogs.com/javaguide/p/18712169

DeepSeek 作为一款卓越的国产 AI 模型,越来越多的公司考虑在自己的应用中集成。对于 Java 应用来说,我们可以借助 Spring AI 集成 DeepSeek,非常简单方便!

相关文章推荐:

  • DeepSeek 的这波回答我给满分!
  • IDEA 接入 DeepSeek,太酷了!

Spring AI 是什么?

Spring AI 从著名的 Python 项目(例如 LangChain 和 LlamaIndex)中汲取灵感,解决了 AI 集成中的核心挑战:将企业数据和 API 与 AI 模型连接起来。

你可以将 Spring AI 看作是一个适配器或者高层封装,用来帮你更方便地集成和使用不同的 AI 模型。它的核心目标是简化开发流程,降低使用多种 AI 服务时的复杂性,同时提升代码的可维护性和灵活性。

Spring AI 的主要功能包括:

  • 统一 API: Spring AI 提供了一套统一的接口,用来调用不同的 AI 模型(例如 OpenAI、Hugging Face、DeepSeek、Gemini 等)。开发者只需要学习 Spring AI 的 API,就能无缝对接各种 AI 服务,而无需深入了解各家服务的底层实现和差异。
  • 简化配置: Spring AI 提供了自动化的配置管理,例如 API 密钥、模型参数等。你只需要简单地在配置文件中定义所需的参数,Spring AI 就会自动完成初始化和连接,避免繁琐的手动配置。
  • 易于切换: Spring AI 的抽象设计使得更换 AI 提供商变得非常简单。开发者只需要修改少量配置,而不用修改业务代码,从而实现灵活的 AI 服务切换,适应不同场景需求。

Spring AI 集成 DeepSeek

这里介绍两种方式:

  1. spring-ai-openai starter:伪装成 OpenAI,DeepSeek 提供了 OpenAI 兼容模式。
  2. spring-ai-ollama-spring-boot-starter:通过 Ollama 本地部署一个 DeepSeek R1 蒸馏版。

伪装成 OpenAI

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

1、添加依赖:

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

2、修改配置文件 application.yml

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

3、DeepSeek API KEY 可以在 DeepSeek 开放平台中自行创建,地址:https://platform.deepseek.com/api_keys

4、在代码中调用:

@RestController
@RequestMapping("/ai")
@Slf4j
public class ChatController {private final ChatClient chatClient;// 构造方法注入 ChatClient.Builder,用于构建 ChatClient 实例public ChatController(ChatClient.Builder chatClientBuilder) {this.chatClient = chatClientBuilder.build();}@GetMapping("/chat")public String generate(@RequestParam(value = "message") String message) {log.info("Generating response");// 调用 ChatClient 的 prompt 方法生成响应// 1. prompt(message): 创建一个包含用户输入消息的 Prompt 对象// 2. call(): 调用 ChatClient 与 AI 模型交互以获取响应// 3. content(): 提取响应的内容部分return chatClient.prompt(message).call().content();}}

在运行时,你可以通过在 Prompt 调用中添加新的、针对请求的选项来覆盖默认配置。例如,要为特定请求覆盖默认模型和温度,可以这样实现:

ChatResponse response = chatModel.call(new Prompt("Generate the names of 5 famous pirates.",OpenAiChatOptions.builder().withModel("deepseek-chat").withTemperature(0.4).build()));

本地化部署

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

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

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

2、通过 Ollama 拉取 DeepSeek 模型:

ollama pull deepseek-r1:1.5b
ollama list deepseek

更多版本可以在这里查看:https://ollama.com/library/deepseek-r1

3、添加依赖:

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

4、修改配置:

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

4、在代码中调用:

@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();}}
}

Spring Cloud Alibaba AI 中也支持这种方式,并且官网上提供了详细的方法:https://java2ai.com/blog/spring-ai-alibaba-ollama-deepseek/

总结

这篇文章主要介绍了 Spring AI 以及如何通过 Spring AI 集成 DeepSeek:

  1. 伪装成 OpenAI: DeepSeek 可以假装自己是 OpenAI,直接用 Spring AI 的 OpenAI starter 就行,改改配置就好,就像换个链接一样简单。
  2. 本地部署: 如果你想把 DeepSeek 放在自己服务器上,或者想在电脑上跑个小模型玩玩,可以用 Ollama。先下载 Ollama,再下载 DeepSeek 模型,然后用 Spring AI 的 Ollama starter,也超级简单。Spring Cloud Alibaba AI 也支持这种玩法,官网有教程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/882746.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我命由我不由天?

作为一名大一学生,还有几天就下学期开学了,至今还感到迷茫,不知道这个被迫选择的专业应该怎么学,回头看看高中的同学虽然与我专业不同,但是却自学这门让我逃之不及的一门课,并且人家也有着明确的目标与计划,而我确是一个普普通通的二本学生,并不知道应该如何做,也没有…

是“陷阱”还是“机遇”,怎么办?

作为一名大一学生,还有几天就下学期开学了,至今还感到迷茫,不知道这个被迫选择的专业应该怎么学,回头看看高中的同学虽然与我专业不同,但是却自学这门让我逃之不及的一门课,并且人家也有着明确的目标与计划,而我确是一个普普通通的二本学生,并不知道应该如何做,也没有…

C#/.NET/.NET Core技术前沿周刊 | 第 24 期(2025年1.27-1.31)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

deepseek-v3 论文阅读

deepseek-v3论文中 AIInfra相关的技术学习模型结构 MLA(Multi-Head Latent Attention) 主要作用是在保证效果的基础上, 利用低秩压缩的原理优化kvCache, 加速推理, 同时节省训练显存. 先回忆下MHA, 在每个head上, 分别经过K, V生成 $ attnweights=(W_Qh_i)^T∗(W_Kh_j) $, 然后…

大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!

1 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来! 1.1 背景目前AI已经大行其道,chatGPT、DeepSeek等如雨后春笋般涌现出来,笔者做为一个守旧派和顽固派,一直认为AI只是雕虫小技,根本没有办法和人写的代码相提并论,在chatGPT已经大火几年之后仍然一直无动于衷…

【洛谷P1196】银河英雄传说[NOI2002]

今天学习提高版的并查集 洛谷200题纪念! 首先我们看题目 P1196 [NOI2002] 银河英雄传说 题目背景 公元 \(5801\) 年,地球居民迁至金牛座 \(\alpha\) 第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展。 宇宙历 \(799\) 年,银河系的两大…

P3826 [NOI2017] 蔬菜 题解

Description 有 \(n\) 种蔬菜,对于所有的满足条件 \(d\times x_i \leq c_i\) 的正整数 \(d\) ,有 \(x_i\) 个单位的蔬菜将在 第 \(d\) 天结束时变质。 特别地,若 \((d - 1)\times x_i \leq c_i < d\times x_i\) ,则有 \(c_i - (d - 1)\times x_i\) 单位的蔬菜将在第 \(d…

什么是token?token是用来干嘛的?

从事计算机行业的朋友都听说过token这么个东西,尤其是deepseek爆火后api(大家都知道什么意思吧),但是其他行业的人就很少了解到token,下面就给大家来详细介绍一下token是什么意思?token是用来干嘛的这一块的内容,希望能帮助到大家。token是什么意思? 作为计算机术语时,…

uniapp 开发app流程

准备: DCLOUD开发者账号、IOS开发者账号、高德地图开发者账号 1、在DCLOUD平台创建【应用】在应用中设置【各平台信息】,安卓的包名自己写一个,ios BundleId在ios开发者账号中获取,本教程以安卓为主,ios方面的问题暂时忽略记住这个列表中的 安卓的包名 和 ISO的域名/Bundl…

智能驾驶中的 感知 模块介绍

在自动驾驶系统中,感知技术是核心基础之一。感知技术为车辆提供环境信息,使其能够实现对周围环境的理解、分析与决策,从而保证安全性和高效性。通常大家对感知的介绍停留在“眼睛”的作用,但这样的解释太宽泛了例如感知到底是什么?由哪些模块组成?输入输出有什么含义?数…

AI行为识别摄像机

AI行为识别摄像机具备24小时不间断的视频监控能力,可以随时捕捉现场动态,确保无死角覆盖。通过训练好的模型,该设备能够对不同的人类活动进行分类和判断,从而有效区分正常与异常行为。例如,在商场中,当检测到顾客有异常举动时,系统会立即发出警报。相比于传统监控设备,…

【笔记】多项式Ⅰ:

前言 这一节用于讲解拉格朗日插值法(Lagrange Polynomial)和快速傅里叶变换(Fast Fourier Transform),但是含有前置知识,因此有大量学过的知识可以直接跳过,存在大量证明会放出相应的链接。 多项式 基本概念 我们将形如 \(\textstyle{\sum a_nx^n}\) 的有限项相加式子成…