目录
一、简单构建与大模型对话 <— 你在这里 ( •̀ ω •́ )y

Spring AI(一)简单构建与大模型对话

[!NOTE]

博主前言:最近大模型挺火的,我看 Spring AI 相关应用貌似还没有足够多的教程,特此写一些个人经验供参考。

一、前期准备

要开发 Spring AI 相关应用,首先要准备两件事:

  1. 搭建一个基础 Springboot 应用框架
  2. 准备一个有充值余额的大模型api-key,或者,本地部署大模型(如最近很火的ollama+deepseek

[!WARNING]

悲报!DeepSeek 暂时关闭了充值服务(2025.2.20),虽然api-key还能申请,但是没有余额就用不了(有余额依旧能用,且用且珍惜),这里有几个替代方案供参考(非广,我一分钱没捞着):

  1. siliconflow:模型api中转商,有满血 DeepSeek R1、V3 及其他蒸馏模型,以及其它品牌的模型,注册既有赠送余额足够学习使用,支持文本、图像、语音、视频,但是没有对应的 Spring AI 相关依赖,需要用 OpenAI 接口。
  2. moonshot:国产自研模型,备选方案,有对应的 Spring AI 相关依赖,同样注册既有赠送余额足够学习使用,但是只有文本生成,且价格相比 DeepSeek 较贵(老一辈模型通病,备选学习使用方案,可以不考虑价格,但是不建议作为上线服务使用),能力也不如其他模型。
  3. 本地部署:推荐ollama+deepseek方案,部署教程 b 站到处都是,ollama也有对应的 Spring AI 相关依赖,算力上大多数电脑都可以尝试,只是仅学习使用,即使模型经过蒸馏,本地跑还是太慢了,完全达不到生产力需求。

二、要引入的依赖

引入依赖之前,先确认一下 Spring AI 是否预支持一些大模型或框架的调用,这样就不必都用 OpenAI 接口,能对使用的模型有更好的支持。

[!IMPORTANT]

访问仓库网站,并搜索:spring-ai-【你的模型或框架,如ollama

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<!-- Spring Boot Starter Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>

<!-- Spring OpenAI -->
<!-- 替换为你找到的预支持依赖,要是没找到,就引入这个 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>

<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
</dependency>
</dependencies>

<dependencyManagement>
<dependencies>
<!-- Spring Boot 基础依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.4.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>

<!-- Spring AI 相关-->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0-M6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

三、编辑配置文件

[!TIP]

我个人喜欢分离配置文件,便于维护和隐蔽一些敏感信息

即被 ${} 代替的内容可以直接替换为你相关的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# spring 配置
spring:
profiles:
active: dev # 启用的配置文件
application:
name: spring-ai # 应用的名称
# AI 相关配置
ai:
# 替换为你找到的预支持依赖
openai:
# 你的 api-key
api-key: ${local.ai.openai.api-key}
# 模型地址
# 如果使用 siliconflow,注意末尾不要加 v1,会报 404
base-url: ${local.ai.openai.base-url}
chat:
options:
# 模型类型
model: ${local.ai.openai.model}
# 温度值,参考对应模型官网配置
temperature: ${local.ai.common-options.temperature}
# 最大 token 数,建议 2000
max-tokens: ${local.ai.common-options.max-tokens}

四、准备会话Bean

Spring AI 通过ChatClient类来与大模型会话,需要为其指定具体模型。

对于其类似应用层类的性质,建议封装为Bean以便调用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 大模型会话相关配置
*
* @author Amane64
*/
@Configuration
@RequiredArgsConstructor
public class ChatClientConfig {
// 替换为你使用的 Model,如 ollama
// private final OllamaChatModel ollamaChatModel;
private final OpenAiChatModel openAiChatModel;

@Bean
public ChatClient chatClient() {
return ChatClient.builder(openAiChatModel)
.build();
}
}

五、测试与大模型对话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Slf4j
@SpringBootTest
public class TestApp {

@Autowired
private ChatClient chatClient;

@Test
public void chatTest() {
log.info("生成中,与大模型对话需要较长时间回复,请耐心等待...");
String result = chatClient.prompt()
.user("简单介绍下 Spring AI")
.call().content();
log.info(result);
}
}