首页
/ 在Spring AI项目中移除未使用的Gemini和Vertex AI组件

在Spring AI项目中移除未使用的Gemini和Vertex AI组件

2026-05-02 09:26:36作者:郁楠烈Hubert

问题引入:为什么需要清理未使用的AI组件?

当你的Spring AI应用部署到生产环境时,是否遇到过这些问题:启动时间过长、内存占用过高、构建包体积过大?这些问题很可能源于项目中包含了未使用的AI组件,尤其是Gemini和Vertex AI这类大型依赖。

在一个典型的Spring AI项目中,未使用的Google AI组件可能会增加20-30%的构建大小,延长15%以上的启动时间,同时带来不必要的安全依赖风险。

本文将通过一套系统化的方法,帮助你安全、高效地移除这些未使用组件,优化项目性能。

环境检测:定位项目中的Gemini和Vertex AI组件

依赖树可视化分析

在开始清理前,我们首先需要确认项目中是否存在Gemini和Vertex AI相关组件。最直接的方法是分析项目依赖树:

Maven项目

mvn dependency:tree | grep -E 'vertex-ai|google-genai'

Gradle项目

./gradlew dependencies | grep -E 'vertex-ai|google-genai'

⚠️ 如果命令执行失败,可能需要检查构建工具配置或环境变量设置,如确保JAVA_HOME正确配置。

组件识别清单

根据Spring AI项目结构,Gemini和Vertex AI相关组件通常包括:

组件类型 Maven坐标 说明
启动器 spring-ai-starter-model-vertex-ai-gemini Gemini聊天模型启动器
启动器 spring-ai-starter-model-google-genai Google GenAI通用接口
启动器 spring-ai-starter-model-vertex-ai-embedding Vertex AI嵌入模型
自动配置 spring-ai-autoconfigure-model-vertex-ai Vertex AI自动配置类

源码级依赖检查

除了构建依赖外,还需要检查代码中是否存在直接引用:

grep -rni 'com.google.cloud.aiplatform' src/
grep -rni 'VertexAi' src/
grep -rni 'Gemini' src/

分级移除方案:从简单到复杂的移除策略

基础级:依赖排除法(推荐用于单模块项目)

最直接有效的方法是在构建文件中显式排除不需要的依赖。

Maven项目(pom.xml)

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter</artifactId>
    <exclusions>
        <!-- 排除Gemini相关依赖 -->
        <exclusion>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>
        </exclusion>
        <!-- 排除Vertex AI嵌入模型 -->
        <exclusion>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-vertex-ai-embedding</artifactId>
        </exclusion>
        <!-- 排除Google GenAI -->
        <exclusion>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-google-genai</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Gradle项目(build.gradle)

implementation('org.springframework.ai:spring-ai-starter') {
    exclude group: 'org.springframework.ai', module: 'spring-ai-starter-model-vertex-ai-gemini'
    exclude group: 'org.springframework.ai', module: 'spring-ai-starter-model-vertex-ai-embedding'
    exclude group: 'org.springframework.ai', module: 'spring-ai-starter-model-google-genai'
}

✅ 推荐:此方法最彻底,直接从依赖树中移除组件,适合生产环境使用。

进阶级:配置文件禁用(适合开发环境快速切换)

如果需要保留依赖但临时禁用组件,可以通过配置文件实现:

application.properties

# 禁用Gemini聊天模型
spring.ai.vertex.ai.gemini.enabled=false

# 禁用Vertex AI嵌入模型
spring.ai.vertex.ai.embedding.enabled=false

# 禁用Google GenAI
spring.ai.google.genai.enabled=false

# 可选:设置默认模型为none
spring.ai.model.chat=none
spring.ai.model.embedding=none

application.yml

spring:
  ai:
    vertex:
      ai:
        gemini:
          enabled: false
        embedding:
          enabled: false
    google:
      genai:
        enabled: false
    model:
      chat: none
      embedding: none

⚠️ 注意:配置文件禁用只是阻止自动配置,但相关依赖仍然会打包到应用中,不会减小构建体积。

专家级:条件注解控制(适合多环境定制)

对于复杂项目,可以使用Spring的条件注解精确控制组件加载:

@Configuration
public class AiModelConfiguration {

    @Bean
    @ConditionalOnProperty(
        name = "spring.ai.vertex.ai.gemini.enabled", 
        havingValue = "true", 
        matchIfMissing = false
    )
    public VertexAiGeminiChatModel vertexAiGeminiChatModel() {
        // 仅当显式启用时才创建Bean
        return new VertexAiGeminiChatModel();
    }
}

或者创建专用的禁用配置类:

@Configuration
@ConditionalOnProperty(
    name = "spring.ai.vertex.ai.enabled", 
    havingValue = "false", 
    matchIfMissing = true
)
public class VertexAiDisabledConfiguration {
    // 可以在这里提供替代实现或空Bean
}

多模块项目特殊处理

在多模块项目中,需要特别注意父模块和子模块的依赖传递:

  1. 检查父POM:确保父模块中没有全局引入相关依赖
  2. 子模块排除:在每个子模块中单独排除不需要的依赖
  3. 共享配置:使用dependencyManagement统一控制版本和排除规则
<!-- 在父POM中 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>
            <version>${spring-ai.version}</version>
            <exclusions>
                <!-- 全局排除规则 -->
            </exclusions>
        </dependency>
    </dependencies>
</dependencyManagement>

验证流程:确保组件已完全移除

构建验证

完成移除后,首先验证构建产物:

  1. 检查依赖树:重新生成依赖树确认组件已移除

    mvn dependency:tree | grep -E 'vertex-ai|google-genai'
    
  2. 分析构建大小:对比移除前后的JAR/WAR包大小

    # 构建后检查大小
    du -sh target/*.jar
    

启动验证

启动应用并验证:

  1. 检查自动配置报告

    java -jar target/*.jar --debug
    

    搜索日志中的"AutoConfigurationReport",确认相关自动配置类未被加载

  2. 检查启动时间:使用以下命令记录启动时间

    time java -jar target/*.jar
    

功能验证

编写简单的测试用例验证核心功能不受影响:

@SpringBootTest
public class AiComponentsTest {

    @Autowired(required = false)
    private VertexAiGeminiChatModel geminiChatModel;
    
    @Autowired(required = false)
    private VertexAiEmbeddingModel vertexAiEmbeddingModel;

    @Test
    void testGeminiComponentsNotLoaded() {
        assertNull(geminiChatModel, "Gemini模型不应被加载");
        assertNull(vertexAiEmbeddingModel, "Vertex AI嵌入模型不应被加载");
    }
    
    // 测试其他AI功能仍然正常工作
    @Test
    void testRemainingAiFunctionality() {
        // 验证其他AI模型可以正常工作
    }
}

组件移除效果量化指标

记录并对比以下指标评估移除效果:

指标 移除前 移除后 改进幅度
构建包大小 50MB 35MB -30%
启动时间 8.5秒 6.2秒 -27%
内存占用 450MB 320MB -29%
依赖数量 87 63 -28%

风险规避:避免常见移除错误

依赖传递陷阱

⚠️ 常见问题:直接排除了主要starter,但其他依赖间接引入了相同组件。

解决方案:使用mvn dependency:treegradlew dependencies命令找到依赖传递路径:

# Maven
mvn dependency:tree -Dincludes=org.springframework.ai:*vertex-ai*

# Gradle
./gradlew dependencies | grep -A 10 'vertex-ai'

配置冲突处理

当同时使用多种禁用方式时,注意Spring Boot的配置优先级:

  1. 显式排除依赖(最高优先级)
  2. 条件注解控制
  3. 配置文件设置(最低优先级)

🔍 检查:确保没有在不同配置文件中设置矛盾的属性值

常见问题诊断流程

当移除组件后出现问题,可按以下流程诊断:

  1. 检查编译错误:确认是否有代码直接引用了已移除的类
  2. 分析启动日志:查找与Gemini/Vertex AI相关的错误或警告
  3. 验证自动配置:检查/actuator/autoconfig端点(如果启用)
  4. 回滚测试:临时恢复依赖,确认问题是否消失
  5. 检查替代方案:确认是否有其他组件可以提供相同功能

组件替代方案推荐

移除Google AI组件后,可以考虑这些替代方案:

功能 移除的组件 推荐替代 优势
聊天模型 Gemini OpenAI, Mistral AI 更广泛的社区支持
嵌入模型 Vertex AI Embedding OpenAI Embeddings, Ollama 本地部署选项
多模态处理 Google GenAI Stability AI, DALL-E 更专注于图像生成

总结

通过本文介绍的环境检测、分级移除、验证流程和风险规避方法,你可以安全高效地从Spring AI项目中移除未使用的Gemini和Vertex AI组件。这不仅能减小应用体积、提高启动速度,还能降低安全风险和维护成本。

记住,组件移除是一个持续优化的过程,建议定期审查项目依赖,保持依赖树的精简和健康。

嵌入模型API类图 图1:Spring AI嵌入模型API类图,展示了VertexAIEmbeddingModel在整体架构中的位置

函数调用基本流程 图2:Spring AI函数调用基本流程,移除不必要的AI模型后,此流程仍应正常工作

登录后查看全文
热门项目推荐
相关项目推荐