SpringAI 2.0版本升级

背景

前面我们谈到了Spring boot 4.0版本的升级,然后对应的Spring AI 也进行维护两个大版本,一个是1.x的版本对应Spring boot的3.x版本,一个是我们的Spring AI 2.x对应我们Springboot的4.x版本,那我们来比较下这两个版本究竟有什么的不同吧!

变化

  1. Spring Boot 4.0 升级 - 从 3.5.8 升级到 4.0.0,这是一个主要版本升级

  2. JDK 21.0.8+ 强制要求 - 通过 maven-enforcer-plugin 强制执行,开发环境必须升级

  3. 空值处理增强,多个核心 API 返回类型标记为

    @Nullable:

    • ChatModel.call() 可能返回 null
    • ChatResponse.getResult() 可能返回 null
    • Message.getText() 可能返回 null

这个也是Spring boot4.x版本做出的一个新的改变

比如说我们的ChatModel 接口

  • call(String message) 返回类型:String@Nullable String
  • call(Message... messages) 返回类型:String@Nullable String

对应的Message的抽象也做了改变:

  • AbstractMessage: getText() 返回 @Nullable String
  • SystemMessage: 构造函数参数 textContent 标记为 @Nullable
  • AssistantMessage: 构造函数 content 参数标记为 @Nullable

然后还新增了一个接口:

VectorStoreRetriever

  • 位置: spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/VectorStoreRetriever.java
  • 作用是:提供只读的检索操作(函数式接口)

  • List<Document> similaritySearch(SearchRequest request),然后他具体的逻辑就是AbstractVectorStore里面实现的

    • ```java
      VectorStoreObservationContext searchObservationContext = this
      .createObservationContextBuilder(VectorStoreObservationContext.Operation.QUERY.value())
      .queryRequest(request)
      .build();

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12

      进行上下文的构建,它携带了操作类型(`QUERY`)和原始请求(`request`)。这些数据后续会被 `ObservationConvention` 转换为具体的 Metrics Tags(标签)或 Span Tags(链路属性)。

      - ```
      return VectorStoreObservationDocumentation.AI_VECTOR_STORE
      .observation(this.customObservationConvention, DEFAULT_OBSERVATION_CONVENTION,
      () -> searchObservationContext, this.observationRegistry)
      .observe(() -> {
      var documents = this.doSimilaritySearch(request);
      searchObservationContext.setQueryResponse(documents);
      return documents;
      });

      .observe(...) 是 Micrometer 的核心方法。它会自动开启一个 Scope(Scope),记录开始时间。

      searchObservationContext.setQueryResponse(documents)关键点。查询结束后,将结果回写到上下文中。这样,观测组件就能根据结果的大小、内容(如 TopK 相似度分数)来生成更丰富的指标。

  • 优势: 遵循最小权限原则,可以提供只读访问

基本架构

说完变化,但是很多孩子都不知道Spring AI 的基本架构是什么,那么先去介绍一下Spring AI

Spring AI 采用清晰的分层架构,从下到上依次为:

  1. 基础层 - 通用工具(commons、template-st、test)
  2. 核心抽象层 - 领域接口(Model、ChatModel、VectorStore)
  3. 功能层 - 高级功能(ChatClient、RAG、Advisors、Memory)
  4. 实现层 - 具体实现(21 个 AI 提供商 + 21 个向量数据库)
  5. 集成层 - Spring Boot 集成(50+ Starters + 50+ AutoConfiguration)

比如:

1
2
3
4
5
ChatClient (高层) 
↓ 依赖抽象
ChatModel (接口)
↑ 实现抽象
OpenAiChatModel (低层)
  • 内置 Micrometer Observation
  • 所有模型调用自动记录 metrics
  • 支持分布式追踪(OpenTelemetry)