













请关注微信公众号:阿呆-bot
Spring AI 通过 Spring Boot Starter 和 Auto Configuration 机制,实现了零配置的 AI 应用开发。开发者只需要添加依赖和配置属性,就能使用各种 AI 能力。
spring-ai-spring-boot-starters/ # Starter 模块
├── spring-ai-starter-model-openai/ # OpenAI Starter
├── spring-ai-starter-model-ollama/ # Ollama Starter
├── spring-ai-starter-vector-store-pgvector/ # PGVector Starter
└── ... (50+ 个 Starter)
auto-configurations/ # 自动配置模块
├── models/ # 模型自动配置
│ ├── spring-ai-autoconfigure-model-openai/
│ ├── spring-ai-autoconfigure-model-ollama/
│ └── ...
├── vector-stores/ # 向量存储自动配置
│ ├── spring-ai-autoconfigure-vector-store-pgvector/
│ └── ...
├── common/ # 通用自动配置
│ ├── spring-ai-autoconfigure-retry/
│ └── spring-ai-autoconfigure-model-tool/
└── mcp/ # MCP 自动配置
Spring Boot 集成采用 Starter + Auto Configuration 模式:

只需要添加依赖和配置:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-4
@RestController
public class ChatController {
@Autowired
private ChatModel chatModel; // 自动注入
@GetMapping("/chat")
public String chat(String message) {
return chatModel.call(message);
}
}
所有配置都通过 application.yml 或 application.properties:
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
base-url: https://api.openai.com
chat:
options:
model: gpt-4
temperature: 0.7
max-tokens: 1000
embedding:
options:
model: text-embedding-3-small
自动配置会根据条件决定是否启用:
@AutoConfiguration
@ConditionalOnClass(OpenAiChatModel.class)
@ConditionalOnProperty(
prefix = "spring.ai.openai.chat",
name = "enabled",
havingValue = "true",
matchIfMissing = true
)
public class OpenAiChatAutoConfiguration {
// ...
}
可以覆盖自动配置的 Bean:
@Configuration
public class CustomConfig {
@Bean
@Primary
public ChatModel customChatModel() {
// 自定义实现
return new CustomChatModel();
}
}


Starter 是一个空的 Maven 模块,只包含依赖:
<dependencies>
<!-- 核心实现 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai</artifactId>
</dependency>
<!-- 自动配置 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-autoconfigure-model-openai</artifactId>
</dependency>
<!-- 通用自动配置 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-autoconfigure-retry</artifactId>
</dependency>
</dependencies>
Starter 的优势:
自动配置类使用条件注解:
@AutoConfiguration
@ConditionalOnClass(OpenAiChatModel.class)
@ConditionalOnProperty(
prefix = "spring.ai.openai.chat",
name = "enabled",
havingValue = "true",
matchIfMissing = true
)
@EnableConfigurationProperties(OpenAiChatProperties.class)
public class OpenAiChatAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public OpenAiChatModel chatModel(
OpenAiChatProperties properties,
RetryTemplate retryTemplate,
RestClient.Builder restClientBuilder
) {
// 1. 构建 API 客户端
OpenAiApi openAiApi = new OpenAiApi(
properties.getBaseUrl(),
properties.getApiKey(),
restClientBuilder,
retryTemplate
);
// 2. 创建 ChatModel
return new OpenAiChatModel(
openAiApi,
properties.getChat().getOptions()
);
}
@Bean
@ConditionalOnMissingBean
public OpenAiChatOptions chatOptions(OpenAiChatProperties properties) {
return properties.getChat().getOptions();
}
}
关键注解说明:
@AutoConfiguration:标记为自动配置类@ConditionalOnClass:只有当类路径存在指定类时才启用@ConditionalOnProperty:只有当配置属性满足条件时才启用@ConditionalOnMissingBean:只有当容器中不存在指定 Bean 时才创建@EnableConfigurationProperties:启用配置属性绑定配置属性类使用 @ConfigurationProperties:
@ConfigurationProperties(prefix = "spring.ai.openai")
public class OpenAiChatProperties {
private String apiKey;
private String baseUrl = "https://api.openai.com";
private Chat chat = new Chat();
public static class Chat {
private boolean enabled = true;
private OpenAiChatOptions options = new OpenAiChatOptions();
// getters and setters
}
// getters and setters
}
配置属性支持:
spring-boot-configuration-processor 生成元数据自动配置类通过 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 注册:
org.springframework.ai.model.openai.autoconfigure.OpenAiChatAutoConfiguration
org.springframework.ai.model.openai.autoconfigure.OpenAiEmbeddingAutoConfiguration
org.springframework.ai.model.openai.autoconfigure.OpenAiImageAutoConfiguration
Spring Boot 3.x 使用 AutoConfiguration.imports 文件(替代了之前的 spring.factories)。
Spring AI 使用多种条件注解:
// 1. 类路径条件
@ConditionalOnClass(OpenAiChatModel.class)
// 2. 配置属性条件
@ConditionalOnProperty(
prefix = "spring.ai.openai.chat",
name = "enabled",
havingValue = "true"
)
// 3. Bean 存在条件
@ConditionalOnMissingBean(ChatModel.class)
// 4. 资源条件
@ConditionalOnResource(resources = "classpath:openai-config.properties")
这些条件让自动配置变得智能:
重试是 AI 应用的重要能力:
@AutoConfiguration
@ConditionalOnClass(RetryUtils.class)
@EnableConfigurationProperties(SpringAiRetryProperties.class)
public class SpringAiRetryAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public RetryTemplate retryTemplate(SpringAiRetryProperties properties) {
return RetryTemplate.builder()
.maxAttempts(properties.getMaxAttempts())
.retryOn(TransientAiException.class)
.retryOn(ResourceAccessException.class)
.exponentialBackoff(
properties.getBackoff().getInitialInterval(),
properties.getBackoff().getMultiplier(),
properties.getBackoff().getMaxInterval()
)
.build();
}
}
配置示例:
spring:
ai:
retry:
max-attempts: 3
backoff:
initial-interval: 1s
multiplier: 2.0
max-interval: 10s
工具调用自动配置:
@AutoConfiguration
@ConditionalOnClass({ToolCallingManager.class, ChatModel.class})
public class ToolCallingAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public ToolCallingManager toolCallingManager(
ObservationRegistry observationRegistry,
ToolCallbackResolver toolCallbackResolver
) {
return new DefaultToolCallingManager(
observationRegistry,
toolCallbackResolver,
new DefaultToolExecutionExceptionProcessor()
);
}
@Bean
@ConditionalOnMissingBean
public ToolCallbackResolver toolCallbackResolver(ApplicationContext context) {
return new DelegatingToolCallbackResolver(
new SpringBeanToolCallbackResolver(context),
new StaticToolCallbackResolver()
);
}
}
Spring AI 的配置属性采用层次结构:
spring:
ai:
openai: # 提供商级别
api-key: xxx
chat: # 功能级别
enabled: true
options: # 选项级别
model: gpt-4
temperature: 0.7
支持 JSR-303 验证:
@ConfigurationProperties(prefix = "spring.ai.openai")
@Validated
public class OpenAiChatProperties {
@NotBlank
private String apiKey;
@Min(0)
@Max(2)
private Double temperature;
}
通过 additional-spring-configuration-metadata.json 提供 IDE 提示:
{
"properties": [{
"name": "spring.ai.openai.chat.options.model",
"type": "java.lang.String",
"description": "The model to use for chat completions.",
"defaultValue": "gpt-3.5-turbo"
}]
}
自动配置的 Bean 创建顺序:
用户可以通过 @Primary 或 @ConditionalOnMissingBean 覆盖自动配置的 Bean:
@Configuration
public class CustomConfig {
@Bean
@Primary // 优先使用
public ChatModel customChatModel() {
return new CustomChatModel();
}
}
Spring AI 的 Spring Boot 集成设计有几个亮点:
零配置理念。通过 Starter 和 Auto Configuration,用户只需要添加依赖和配置属性,就能使用 AI 能力,无需编写任何配置代码。想用 OpenAI?加个依赖,配个 API Key,就能用了。
条件装配。使用 @ConditionalOn* 注解,让自动配置变得智能,只加载需要的配置,避免不必要的 Bean 创建
配置属性驱动。所有配置都通过 application.yml 或 application.properties,支持类型安全和 IDE 提示。写配置时有自动补全,写错了编译期就能发现。
可扩展性。用户可以轻松覆盖自动配置的 Bean,实现自定义行为。想自定义 ChatModel?加个 @Primary 注解就行。
模块化设计。每个功能都有独立的 Starter 和 Auto Configuration,用户可以选择性地添加需要的功能。想用向量存储?加个 spring-ai-starter-vector-store-pgvector 就行。
总的来说,Spring AI 的 Spring Boot 集成既简单又强大。简单的使用方式降低了学习成本,强大的自动配置机制让系统可以适应各种场景。这种设计让开发者可以快速构建 AI 应用,同时也能根据需求进行深度定制。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。