玉泉路网站建设,网络编程课,WordPress下载统计,网站建设 企炬1. 工程结构概览Spring AI 通过 Spring Boot Starter 和 Auto Configuration 机制#xff0c;实现了零配置的 AI 应用开发。开发者只需要添加依赖和配置属性#xff0c;就能使用各种 AI 能力。spring-ai-spring-boot-starters/ # Starter 模块├── spring-ai-starter-model…1. 工程结构概览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 自动配置2. 技术体系与模块关系Spring Boot 集成采用 Starter Auto Configuration 模式image.png3. 关键场景示例代码3.1 最简单的使用只需要添加依赖和配置dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-openai/artifactId/dependencyspring:ai:openai:api-key: ${OPENAI_API_KEY}chat:options:model: gpt-4RestControllerpublic class ChatController {Autowiredprivate ChatModel chatModel; // 自动注入GetMapping(/chat)public String chat(String message) {return chatModel.call(message);}}3.2 配置属性所有配置都通过 application.yml 或 application.propertiesspring:ai:openai:api-key: ${OPENAI_API_KEY}base-url: https://api.openai.comchat:options:model: gpt-4temperature: 0.7max-tokens: 1000embedding:options:model: text-embedding-3-small3.3 条件装配自动配置会根据条件决定是否启用AutoConfigurationConditionalOnClass(OpenAiChatModel.class)ConditionalOnProperty(prefix spring.ai.openai.chat,name enabled,havingValue true,matchIfMissing true)public class OpenAiChatAutoConfiguration {// ...}3.4 自定义 Bean可以覆盖自动配置的 BeanConfigurationpublic class CustomConfig {BeanPrimarypublic ChatModel customChatModel() {// 自定义实现return new CustomChatModel();}}4. 核心实现图4.1 自动配置流程image.png5. 入口类与关键类关系image.png6. 关键实现逻辑分析6.1 Starter 设计Starter 是一个空的 Maven 模块只包含依赖dependencies!-- 核心实现 --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-openai/artifactId/dependency!-- 自动配置 --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-autoconfigure-model-openai/artifactId/dependency!-- 通用自动配置 --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-autoconfigure-retry/artifactId/dependency/dependenciesStarter 的优势简化依赖管理用户只需要添加一个依赖版本统一所有相关依赖版本统一管理功能完整包含所有必需的依赖6.2 自动配置类实现自动配置类使用条件注解AutoConfigurationConditionalOnClass(OpenAiChatModel.class)ConditionalOnProperty(prefix spring.ai.openai.chat,name enabled,havingValue true,matchIfMissing true)EnableConfigurationProperties(OpenAiChatProperties.class)public class OpenAiChatAutoConfiguration {BeanConditionalOnMissingBeanpublic OpenAiChatModel chatModel(OpenAiChatProperties properties,RetryTemplate retryTemplate,RestClient.Builder restClientBuilder) {// 1. 构建 API 客户端OpenAiApi openAiApi new OpenAiApi(properties.getBaseUrl(),properties.getApiKey(),restClientBuilder,retryTemplate);// 2. 创建 ChatModelreturn new OpenAiChatModel(openAiApi,properties.getChat().getOptions());}BeanConditionalOnMissingBeanpublic OpenAiChatOptions chatOptions(OpenAiChatProperties properties) {return properties.getChat().getOptions();}}关键注解说明AutoConfiguration标记为自动配置类ConditionalOnClass只有当类路径存在指定类时才启用ConditionalOnProperty只有当配置属性满足条件时才启用ConditionalOnMissingBean只有当容器中不存在指定 Bean 时才创建EnableConfigurationProperties启用配置属性绑定6.3 配置属性绑定配置属性类使用 ConfigurationPropertiesConfigurationProperties(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}配置属性支持类型安全强类型绑定IDE 提示通过 spring-boot-configuration-processor 生成元数据验证支持 JSR-303 验证注解6.4 自动配置注册自动配置类通过 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 注册org.springframework.ai.model.openai.autoconfigure.OpenAiChatAutoConfigurationorg.springframework.ai.model.openai.autoconfigure.OpenAiEmbeddingAutoConfigurationorg.springframework.ai.model.openai.autoconfigure.OpenAiImageAutoConfigurationSpring Boot 3.x 使用 AutoConfiguration.imports 文件替代了之前的 spring.factories。6.5 条件装配机制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)这些条件让自动配置变得智能按需加载只加载需要的配置避免冲突不会覆盖用户自定义的 Bean灵活配置可以通过配置属性控制行为6.6 重试机制自动配置重试是 AI 应用的重要能力AutoConfigurationConditionalOnClass(RetryUtils.class)EnableConfigurationProperties(SpringAiRetryProperties.class)public class SpringAiRetryAutoConfiguration {BeanConditionalOnMissingBeanpublic 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: 3backoff:initial-interval: 1smultiplier: 2.0max-interval: 10s6.7 工具调用自动配置工具调用自动配置AutoConfigurationConditionalOnClass({ToolCallingManager.class, ChatModel.class})public class ToolCallingAutoConfiguration {BeanConditionalOnMissingBeanpublic ToolCallingManager toolCallingManager(ObservationRegistry observationRegistry,ToolCallbackResolver toolCallbackResolver) {return new DefaultToolCallingManager(observationRegistry,toolCallbackResolver,new DefaultToolExecutionExceptionProcessor());}BeanConditionalOnMissingBeanpublic ToolCallbackResolver toolCallbackResolver(ApplicationContext context) {return new DelegatingToolCallbackResolver(new SpringBeanToolCallbackResolver(context),new StaticToolCallbackResolver());}}7. 配置属性管理7.1 配置属性层次Spring AI 的配置属性采用层次结构spring:ai:openai: # 提供商级别api-key: xxxchat: # 功能级别enabled: trueoptions: # 选项级别model: gpt-4temperature: 0.77.2 配置属性验证支持 JSR-303 验证ConfigurationProperties(prefix spring.ai.openai)Validatedpublic class OpenAiChatProperties {NotBlankprivate String apiKey;Min(0)Max(2)private Double temperature;}7.3 配置属性提示通过 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}]}8. Bean 创建流程8.1 Bean 创建顺序自动配置的 Bean 创建顺序配置属性 Bean首先创建配置属性 Bean依赖 Bean创建依赖的 Bean如 RetryTemplate核心 Bean创建核心功能 Bean如 ChatModel增强 Bean创建增强功能 Bean如 Advisor8.2 Bean 覆盖机制用户可以通过 Primary 或 ConditionalOnMissingBean 覆盖自动配置的 BeanConfigurationpublic class CustomConfig {BeanPrimary // 优先使用public ChatModel customChatModel() {return new CustomChatModel();}}9. 外部依赖9.1 Spring Bootspring-boot-starter核心 Starterspring-boot-autoconfigure自动配置支持spring-boot-configuration-processor配置属性处理9.2 Spring Frameworkspring-contextIoC 容器spring-beansBean 管理spring-core核心功能10. 工程总结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 应用同时也能根据需求进行深度定制。