SpringAI —— 接入DeepSeek

前言

伴随着 LLM,Agent,MCP 等词汇在编程界出现得越来越频繁,一个由AI带动开发者效率,甚至取代开发者的时代就要到来了,为了及时地赶上这些大佬的步伐,我最近开始了SpringAI 的研究。

搭建思路

在使用之前需要了解关于SpringAI 的使用方式,以及想去干什么,SpringAI 是为了简化 Java 开发者在与AI交互上的难度。基于此,还有 openAI,alibaba等 对SpringAI做出了优化与适配的依赖库。之后还会涉及Function Calling , MCP , RAG ,知识库等。
所以内容还是非常多的。

这篇文章中,我就先介绍一下 如何正确地接入AI------以DeepSeek 为例

接入AI

这是使用 SpringAI 必须经历的一步,没有接入AI,后续的开发 根本没法继续

申请 DeepSeek Api-Key

  1. 前往 DeepSeek | 深度求索 ,找到产品下的 开放平台,进入后登录,然后充值10块钱,找到API-keys,然后创建 API keys 即可。(不是托)

  2. 感兴趣的小伙伴也可以尝试 访问下面的链接 来注册 硅谷流动的开放平台账号,目前有活动,会送 14¥ 体验额度,不过 API-Keys 可能需要你们自己去摸索一下怎么获取了

    cloud.siliconflow.cn/i/vTuOxzq1

注意

那个 sk-XXXXXX 就是 API keys,千万不要泄露出去,后续的操作中会说怎么在文件中动态配置。

引入依赖

核心依赖

bash 复制代码
<dependencyManagement>
    <dependencies>
 <!--用来弥补 Spring Boot 高版本的部分文件缺失->
     <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-dependencies</artifactId>
           <version>3.2.3</version>
               <type>pom</type>
               <scope>import</scope>
     </dependency>
 </dependencies>
</dependencyManagement>

<dependencies>
 <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter</artifactId>
   <version>3.4.5</version>
 </dependency>

 <dependency>
   <groupId>com.alibaba.cloud.ai</groupId>
   <artifactId>spring-ai-alibaba-bom</artifactId>
   <version>1.0.0.2</version>
   <type>pom</type>
   <scope>import</scope>
 </dependency>

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

由于 spring-ai-openai-spring-boot-starter 这个依赖并不能直接在Maven源仓库中找到,需要在 pom.xml 中额外添加仓库地址:

xml 复制代码
<respositories>
<repository>
    <id>spring-milestones</id>
    <name>Spring Milestones</name>
    <url>https://repo.spring.io/milestone</url>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
</repository>
</respositories>

<!-- 标签放在 project 中 -->

刷新 Maven 之后,应该就能看到成功导入的结果了。如果出现了问题,可以参考后面的 注意事项
顺带一提,这个仓库地址可以点击查看,大部分的非spring官方的库 都能在里面找到。包路径 就是 openai的那个 groupId ( org.springframework.ai )

非关键依赖:主要方便测试

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

注意事项

  1. 如果出现 依赖解析失败,Maven识别不到添加的仓库的问题,参考方案是 调整setting.xml 中的 mirror 配置,在 mirrorOf 中添加 排除。如下所示:以 spring-milestones 为例
bash 复制代码
<mirror>
    <id>nexus-163</id>
    <!-- 添加 ,!仓库id 以排除->
    <mirrorOf>*,!spring-milestones</mirrorOf>
    <name>Nexus 163</name>
    <url>http://mirrors.163.com/maven/repository/maven-public/</url>
</mirror>

Maven 的 mirror 会参考 mirrorOf 中的仓库,将下载地址从本地 代理到 url 中达到加速下载的效果

修改配置

修改配置文件

找到项目的配置文件,修改成如下样子:我这边以 application.yaml 为例

yaml 复制代码
server:
 port: 6666
spring:
 ai:
   openai:
     api-key: ${DEEPSEEK_API_KEY} # 通过环境变量来隐藏 API_KEY
     chat:
       options:
         model: deepseek-chat #还可以选择 deepseek-reasoner,深度思考模型
       base-url: https://api.deepseek.com

添加配置类

创建一个 配置类,用来导入 配置好的内容

java 复制代码
@Configuration
public class ChatBeanConfiguration {
   @Bean
   public ChatMemory chatMemory() {
       return MessageWindowChatMemory.builder().build();// 开启内存 信息存储功能
   }
   @Bean
   public ChatClient chatClient(ChatModel model) {
       return ChatClient.builder(model)
               .build();
   }
}

修改运行配置

编辑项目的运行配置,在 修改选项中 找到 环境变量,添加 DEEPSEEK_API_KEY 为你真实的 Key值,如下图:

创建测试用例

创建Controller:

java 复制代码
@RestController
@RequestMapping("/chat")
public class ChatController {
    @Autowired
    protected ChatClient chatClient;


    @GetMapping("/push")
    public String push(@RequestParam("message") String message) {

        ChatResponse response = chatClient.prompt(message)
                .call().chatResponse();

        return response.getResult().getOutput().getText();
    }
}

项目运行后,向接口 localhost:6666/chat/push 发送请求,我这里的示例message 为

你是谁?

结果如下:

至此就完成了初步的对接

相关问题

  1. 如果在项目启动的时候 报出了 创建不了Bean的问题,且起因是 IllegalArgumentException,则可能是 API-key 没有正确地设置,需要注意的是 yaml 文件中注入 需要 {DEEPSEEK_API_KEY}** ,要有 ** 符号。然后就是环境变量要设置正确。
  2. 如果在运行的时候出现了 404,有可能是模型的名字出现错误 ,目前 deepseek-chat 和 deepseek-resoner是可以用的,deepseek-v1 或者 deepseek-r1 是用不了的,读者千万注意
相关推荐
天南星7 分钟前
java-WebSocket在Java生态中的发展历程
java·后端·websocket
chuanauc29 分钟前
记录一次在 centos 虚拟机 中 安装 Java环境
java·linux·centos
工藤学编程33 分钟前
分库分表之实战-sharding-JDBC绑定表配置实战
数据库·分布式·后端·sql·mysql
写不出来就跑路42 分钟前
SpringBoot静态资源与缓存配置全解析
java·开发语言·spring boot·spring·springboot
墨着染霜华1 小时前
Caffeine的tokenCache与Spring的CaffeineCacheManager缓存区别
java·spring·缓存
fmvrj342021 小时前
云原生:数字化转型的核心引擎
后端
pinlantu1 小时前
Java开发笔记(一百五十五)生成随机数的几种途径
java·eclipse
码出极致1 小时前
Redisson分布式缓存与数据一致性保障
后端
用户790349033711 小时前
springboot集成redisson实现redis分布式锁
后端
陈随易1 小时前
程序员的新玩具,MoonBit(月兔)编程语言科普
前端·后端·程序员