玉泉路網(wǎng)站建設(shè)網(wǎng)絡(luò)編程課
鶴壁市浩天電氣有限公司
2026/01/24 08:47:33
玉泉路網(wǎng)站建設(shè),網(wǎng)絡(luò)編程課,WordPress下載統(tǒng)計,網(wǎng)站建設(shè) 企炬1. 工程結(jié)構(gòu)概覽Spring AI 通過 Spring Boot Starter 和 Auto Configuration 機制#xff0c;實現(xiàn)了零配置的 AI 應(yīng)用開發(fā)。開發(fā)者只需要添加依賴和配置屬性#xff0c;就能使用各種 AI 能力。spring-ai-spring-boot-starters/ # Starter 模塊├── spring-ai-starter-model…1. 工程結(jié)構(gòu)概覽Spring AI 通過 Spring Boot Starter 和 Auto Configuration 機制實現(xiàn)了零配置的 AI 應(yīng)用開發(fā)。開發(fā)者只需要添加依賴和配置屬性就能使用各種 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. 技術(shù)體系與模塊關(guān)系Spring Boot 集成采用 Starter Auto Configuration 模式image.png3. 關(guān)鍵場景示例代碼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 條件裝配自動配置會根據(jù)條件決定是否啟用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() {// 自定義實現(xiàn)return new CustomChatModel();}}4. 核心實現(xiàn)圖4.1 自動配置流程image.png5. 入口類與關(guān)鍵類關(guān)系image.png6. 關(guān)鍵實現(xiàn)邏輯分析6.1 Starter 設(shè)計Starter 是一個空的 Maven 模塊只包含依賴dependencies!-- 核心實現(xiàn) --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 的優(yōu)勢簡化依賴管理用戶只需要添加一個依賴版本統(tǒng)一所有相關(guān)依賴版本統(tǒng)一管理功能完整包含所有必需的依賴6.2 自動配置類實現(xiàn)自動配置類使用條件注解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. 構(gòu)建 API 客戶端OpenAiApi openAiApi new OpenAiApi(properties.getBaseUrl(),properties.getApiKey(),restClientBuilder,retryTemplate);// 2. 創(chuàng)建 ChatModelreturn new OpenAiChatModel(openAiApi,properties.getChat().getOptions());}BeanConditionalOnMissingBeanpublic OpenAiChatOptions chatOptions(OpenAiChatProperties properties) {return properties.getChat().getOptions();}}關(guān)鍵注解說明AutoConfiguration標(biāo)記為自動配置類ConditionalOnClass只有當(dāng)類路徑存在指定類時才啟用ConditionalOnProperty只有當(dāng)配置屬性滿足條件時才啟用ConditionalOnMissingBean只有當(dāng)容器中不存在指定 Bean 時才創(chuàng)建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 生成元數(shù)據(jù)驗證支持 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 應(yīng)用的重要能力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 工具調(diào)用自動配置工具調(diào)用自動配置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 的配置屬性采用層次結(jié)構(gòu)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 創(chuàng)建流程8.1 Bean 創(chuàng)建順序自動配置的 Bean 創(chuàng)建順序配置屬性 Bean首先創(chuàng)建配置屬性 Bean依賴 Bean創(chuàng)建依賴的 Bean如 RetryTemplate核心 Bean創(chuàng)建核心功能 Bean如 ChatModel增強 Bean創(chuàng)建增強功能 Bean如 Advisor8.2 Bean 覆蓋機制用戶可以通過 Primary 或 ConditionalOnMissingBean 覆蓋自動配置的 BeanConfigurationpublic class CustomConfig {BeanPrimary // 優(yōu)先使用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. 工程總結(jié)Spring AI 的 Spring Boot 集成設(shè)計有幾個亮點零配置理念。通過 Starter 和 Auto Configuration用戶只需要添加依賴和配置屬性就能使用 AI 能力無需編寫任何配置代碼。想用 OpenAI加個依賴配個 API Key就能用了。條件裝配。使用 ConditionalOn* 注解讓自動配置變得智能只加載需要的配置避免不必要的 Bean 創(chuàng)建配置屬性驅(qū)動。所有配置都通過 application.yml 或 application.properties支持類型安全和 IDE 提示。寫配置時有自動補全寫錯了編譯期就能發(fā)現(xiàn)。可擴展性。用戶可以輕松覆蓋自動配置的 Bean實現(xiàn)自定義行為。想自定義 ChatModel加個 Primary 注解就行。模塊化設(shè)計。每個功能都有獨立的 Starter 和 Auto Configuration用戶可以選擇性地添加需要的功能。想用向量存儲加個 spring-ai-starter-vector-store-pgvector 就行??偟膩碚fSpring AI 的 Spring Boot 集成既簡單又強大。簡單的使用方式降低了學(xué)習(xí)成本強大的自動配置機制讓系統(tǒng)可以適應(yīng)各種場景。這種設(shè)計讓開發(fā)者可以快速構(gòu)建 AI 應(yīng)用同時也能根據(jù)需求進行深度定制。