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 是用不了的,读者千万注意
相关推荐
xcLeigh37 分钟前
Python操作国产金仓数据库(KingbaseES)全流程:搭建连接数据库的API接口
后端
深思慎考43 分钟前
【新版】Elasticsearch 8.15.2 完整安装流程(Linux国内镜像提速版)
java·linux·c++·elasticsearch·jenkins·框架
今天头发还在吗1 小时前
【Docker】在项目中如何实现Dockerfile 文件编写
java·docker·容器
1710orange1 小时前
java设计模式:动态代理
java·开发语言·设计模式
聪明的笨猪猪2 小时前
Java “并发工具类”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
whltaoin2 小时前
Spring Boot 常用注解分类整理(含用法示例)
java·spring boot·后端·注解·开发技巧
唐叔在学习2 小时前
【Git神技】三步搞定指定分支克隆,团队协作效率翻倍!
git·后端
咸菜一世2 小时前
Scala的while语句循环
后端
嚴寒2 小时前
Halo 博客系统部署配置
后端
卷Java3 小时前
用户权限控制功能实现说明
java·服务器·开发语言·数据库·servlet·微信小程序·uni-app