前言
伴随着 LLM,Agent,MCP 等词汇在编程界出现得越来越频繁,一个由AI带动开发者效率,甚至取代开发者的时代就要到来了,为了及时地赶上这些大佬的步伐,我最近开始了SpringAI 的研究。
搭建思路
在使用之前需要了解关于SpringAI 的使用方式,以及想去干什么,SpringAI 是为了简化 Java 开发者在与AI交互上的难度。基于此,还有 openAI,alibaba等 对SpringAI做出了优化与适配的依赖库。之后还会涉及Function Calling , MCP , RAG ,知识库等。
所以内容还是非常多的。
这篇文章中,我就先介绍一下 如何正确地接入AI------以DeepSeek 为例
接入AI
这是使用 SpringAI 必须经历的一步,没有接入AI,后续的开发 根本没法继续。
申请 DeepSeek Api-Key
-
前往 DeepSeek | 深度求索 ,找到产品下的 开放平台,进入后登录,然后充值10块钱,找到API-keys,然后创建 API keys 即可。(不是托)
-
感兴趣的小伙伴也可以尝试 访问下面的链接 来注册 硅谷流动的开放平台账号,目前有活动,会送 14¥ 体验额度,不过 API-Keys 可能需要你们自己去摸索一下怎么获取了
注意
那个 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>
注意事项
- 如果出现 依赖解析失败,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 为
你是谁?
结果如下:
至此就完成了初步的对接
相关问题
- 如果在项目启动的时候 报出了 创建不了Bean的问题,且起因是 IllegalArgumentException,则可能是 API-key 没有正确地设置,需要注意的是 yaml 文件中注入 需要 {DEEPSEEK_API_KEY}** ,要有 ** 符号。然后就是环境变量要设置正确。
- 如果在运行的时候出现了 404,有可能是模型的名字出现错误 ,目前 deepseek-chat 和 deepseek-resoner是可以用的,deepseek-v1 或者 deepseek-r1 是用不了的,读者千万注意