升级说明

本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。

升级到 1.0.0-SNAPSHOT

概览

1.0.0-SNAPSHOT 版本包含对构件(artifact) ID、包名和模块结构的重大变更。本节提供使用 SNAPSHOT 版本的特定指南。

添加 Snapshot 仓库

要使用 1.0.0-SNAPSHOT 版本,需在构建文件中添加 snapshot 仓库。具体操作请参考《入门指南》中的 “Snapshot - 添加 Snapshot 仓库” 章节。

更新 Dependency Management

在构建配置中将 Spring AI BOM 版本更新为 1.0.0-SNAPSHOT。有关配置依赖管理的详细说明,请参阅《入门指南》中的 “依赖管理” 章节。

Artifact ID、包和模块的更改

1.0.0-SNAPSHOT 版本包含对构件 ID、包名和模块结构的变更。

详情请参阅:

升级到 to 1.0.0-RC1

你可以使用 OpenRewrite recipe 自动升级到 1.0.0-RC1 版本。该 recipe 可帮助应用此版本所需的许多代码变更。recipe 及使用说明请参见 Arconia Spring AI迁移指南

破坏性更改

聊天客户端和 Advisor

影响最终用户代码的主要变化有:

  • VectorStoreChatMemoryAdvisor:

    • 常量 CHAT_MEMORY_RETRIEVE_SIZE_KEY 更名为 TOP_K

    • 常量 DEFAULT_CHAT_MEMORY_RESPONSE_SIZE(值:100)已更名为 DEFAULT_TOP_K,新的默认值为 20。

  • 常量 CHAT_MEMORY_CONVERSATION_ID_KEY 已更名为 CONVERSATION_ID,并从 AbstractChatMemoryAdvisor 移至 ChatMemory 接口。请更新你的导入以使用 org.springframework.ai.chat.memory.ChatMemory.CONVERSATION_ID

Advisor 中的自包含模板

执行提示增强的内置 Advisor 已更新为使用自包含模板。目标是使每个 Advisor 能够独立执行模板操作,既不影响其他 Advisor 的模板和提示决策,也不受其影响。

如果你曾为以下 Advisor 提供自定义模板,需要更新它们以确保包含所有预期的占位符。

  • QuestionAnswerAdvisor 期望模板包含以下占位符(详见 说明):

    • query 占位符,用于接收用户问题。

    • question_answer_context 占位符,用于接收检索到的上下文。

  • PromptChatMemoryAdvisor 期望模板包含以下占位符(详见 说明):

    • instructions 占位符,以接收原始系统消息。

    • memory 占位符,用于接收检索到的聊天记忆。

  • VectorStoreChatMemoryAdvisor 期望模板包含以下占位符(详见 说明):

    • instructions 占位符,以接收原始系统消息。

    • long_term_memory 占位符,用于接收检索到的聊天记忆。

可观测性

  • 重构内容观察机制,改用日志记录替代追踪( ca843e8

    • 将内容观察过滤器替换为日志处理器

    • 重命名配置属性以更准确反映其用途:

      • include-promptlog-prompt

      • include-completionlog-completion

      • include-query-responselog-query-response

    • 新增 TracingAwareLoggingObservationHandler 实现支持追踪的日志记录

    • 替换 micrometer-tracing-bridge-otelmicrometer-tracing

    • 删除了基于事件的跟踪,改为直接记录日志

    • 移除对 OTel SDK 的直接依赖

    • 将 observation 属性中的 includePrompt 更名为 logPrompt(在 ChatClientBuilderPropertiesChatObservationPropertiesImageObservationProperties 中)

聊天记忆存储模块与自动配置重命名

我们已通过在整个代码库添加 repository 后缀标准化了聊天记忆组件的命名模式。此变更涉及 Cassandra、JDBC 和 Neo4j 实现,调整了构件ID、Java 包名和类名以提高清晰度。

Artifact ID

所有记忆相关构件现在遵循统一命名模式:

  • spring-ai-model-chat-memory-spring-ai-model-chat-memory-repository-

  • spring-ai-autoconfigure-model-chat-memory-spring-ai-autoconfigure-model-chat-memory-repository-

  • spring-ai-starter-model-chat-memory-spring-ai-starter-model-chat-memory-repository-

Java Package

  • 包路径现在包含`.repository.` 部分。

  • 例如:org.springframework.ai.chat.memory.jdbcorg.springframework.ai.chat.memory.repository.jdbc

配置类

  • 主要自动配置类现在使用 Repository 后缀。

  • 例如:JdbcChatMemoryAutoConfigurationJdbcChatMemoryRepositoryAutoConfiguration

属性

  • 配置属性从 spring.ai.chat.memory.<storage>…​ 重命名为 spring.ai.chat.memory.repository.<storage>…​

迁移要求:

  • 更新 Maven/Gradle 依赖使用新构件 ID

  • 更新所有使用旧包名或类名的导入、类引用及配置

消息聚合器重构

变更
  • MessageAggregator 类已从 spring-ai-client-chat 模块中的 org.springframework.ai.chat.model 包移至 spring-ai-model 模块(包名相同)。

  • MessageAggregator 中移除了 aggregateChatClientResponse 方法,并将其移至 org.springframework.ai.chat.client 包中的新类 ChatClientMessageAggregator 中。

迁移指南

如果你直接使用 MessageAggregator 中的 aggregateChatClientResponse 方法,则需要使用新的 ChatClientMessageAggregator 类:

// Before
new MessageAggregator().aggregateChatClientResponse(chatClientResponses, aggregationHandler);

// After
new ChatClientMessageAggregator().aggregateChatClientResponse(chatClientResponses, aggregationHandler);

不要忘记添加相应的导入:

import org.springframework.ai.chat.client.ChatClientMessageAggregator;

Watson

Watson AI 模型已被移除,因其基于过时的旧版文本生成技术(新版聊天生成模型已推出)。期待 Watson 能在未来 Spring AI 版本中重新出现。

MoonShot 和 QianFan

Moonshot 和 Qianfan 因 仅限中国境内访问 已被移除,相关代码已迁移至 Spring AI 社区仓库。

移除向量存储

  • 删除了 HanaDB 向量存储自动配置(f3b4624)

记忆管理

  • 删除了 CassandraChatMemory 实现(11e3c8f)

  • 简化了聊天记忆 Advisor 层次结构并删除了过时的 API(848a3fd)

  • 删除了 JdbcChatMemory 中的弃用 (356a68f)

  • 重构了聊天记忆 repository 工件,使其更加清晰 (2d517ee)

  • 重构了聊天记忆 repository 自动配置和 Spring Boot Starter,使其更加清晰 (f6dba1b)

Message 和 Template API

  • 删除了已被弃用的 UserMessage 构造函数 (06edee4)

  • 移除了已废弃的 PromptTemplate 构造函数 (722c77e)

  • 删除了 Media 中已被弃用的方法 (228ef10)

  • 重构了 StTemplateRenderer:将 supportStFunctions 更名为 validateStFunctions (0e15197)

  • 移除移动后遗留的 TemplateRender 接口 (52675d8)

客户端 API 的其他更改

  • 删除了 ChatClient 和 Advisor 中的弃用的内容 (4fe74d8)

  • 移除了 OllamaApi 和 AnthropicApi 中的弃用的内容 (46be898)

包结构的更改

  • 删除了 spring-ai-model 中的包依赖循环 (ebfa5b9)

  • 将 MessageAggregator 移至 spring-ai-model 模块 (54e5c07)

依赖

  • 移除了 spring-ai-openai 中未使用的 jsonpath 依赖(9de13d1)

行为变化

Azure OpenAI

  • 为 Azure OpenAI 添加了 Entra ID 身份管理,可进行简洁的自动配置 (3dc86d3)

一般性清理

升级到 1.0.0-M8

可以使用 OpenRewrite recipe 自动升级到 1.0.0-M8 版本。该 recipe 可帮助应用此版本所需的代码变更。recipe 及使用说明请参见 Arconia Spring AI 迁移指南

破坏性变更

在从 Spring AI 1.0 M7 升级到 1.0 M8 时,之前注册了工具回调的用户会遇到导致工具调用功能静默失败的破坏性变更。这特别影响了使用了已弃用的 tools() 方法的代码。

示例

以下是一个在 M7 中有效、但在 M8 中不再按预期工作的代码示例:

// This worked in M7 but silently fails in M8
ChatClient chatClient = new OpenAiChatClient(api)
    .tools(List.of(
        new Tool("get_current_weather", "Get the current weather in a given location",
            new ToolSpecification.ToolParameter("location", "The city and state, e.g. San Francisco, CA", true))
    ))
    .toolCallbacks(List.of(
        new ToolCallback("get_current_weather", (toolName, params) -> {
            // Weather retrieval logic
            return Map.of("temperature", 72, "unit", "fahrenheit", "description", "Sunny");
        })
    ));

解决办法

解决方案是使用 toolSpecifications() 方法来替代已弃用的 tools() 方法:

// This works in M8
ChatClient chatClient = new OpenAiChatClient(api)
    .toolSpecifications(List.of(
        new Tool("get_current_weather", "Get the current weather in a given location",
            new ToolSpecification.ToolParameter("location", "The city and state, e.g. San Francisco, CA", true))
    ))
    .toolCallbacks(List.of(
        new ToolCallback("get_current_weather", (toolName, params) -> {
            // Weather retrieval logic
            return Map.of("temperature", 72, "unit", "fahrenheit", "description", "Sunny");
        })
    ));

已移除的实现和 API

记忆管理

  • 已移除 CassandraChatMemory 实现 (11e3c8f)

  • 简化了聊天记忆 Advisor 层级结构,并移除了已弃用的 API (848a3fd)

  • 移除了 JdbcChatMemory 中的弃用项 (356a68f)

  • 重构聊天记忆存储库构件以提高清晰度 (2d517ee)

  • 重构聊天记忆 Repository 自动配置及 Spring Boot starter 以提高代码清晰度 (f6dba1b)

Client API

  • 移除了 ChatClient 和 Advisor 中的弃用项(4fe74d8)

  • ChatClient 工具调用的破坏性变更(5b7849d)

  • 移除了 OllamaApi 和 AnthropicApi 中的弃用项(46be898)

Message 和 Template API

  • 移除了已弃用的 UserMessage 构造函数 (06edee4)

  • 移除了已弃用的 PromptTemplate 构造函数 (722c77e)

  • 移除了 Media 中的已弃用方法 (228ef10)

  • 重构了 StTemplateRenderer:将 supportStFunctions 重命名为 validateStFunctions (0e15197)

  • 移除迁移后遗留的 TemplateRender 接口 (52675d8)

模型实现

  • 移除 Watson 文本生成模型 (9e71b16)

  • 移除 Qianfan(千帆)相关的代码 (bfcaad7)

  • 移除HanaDB向量存储自动配置 (f3b4624)

  • 移除 OpenAiApi 中的 deepsee k选项 (59b36d1)

包结构的变化

  • 移除了 spring-ai-model 中的包间依赖循环 (ebfa5b9)

  • 将 MessageAggregator 移至 spring-ai-model 模块 (54e5c07)

依赖

  • 移除了 spring-ai-openai 中未使用的 json-path 依赖(9de13d1)

行为变更

可观测性

  • 重构了内容观测功能,改用日志记录替代追踪 (ca843e8)

    • 将内容观测过滤器替换为日志记录处理器

    • 重命名了配置属性,以更好地反映其用途:

      • include-promptlog-prompt

      • include-completionlog-completion

      • include-query-responselog-query-response

    • 新增了 TracingAwareLoggingObservationHandler 以支持带有追踪信息的日志记录

    • micrometer-tracing-bridge-otel 替换为 micrometer-tracing

    • 移除了基于事件的追踪,改用直接日志记录

    • 移除了对 OTel SDK 的直接依赖

    • 在观测属性中将 includePrompt 重命名为 logPrompt(涉及 ChatClientBuilderPropertiesChatObservationPropertiesImageObservationProperties

Azure OpenAI

  • 新增了用于 Azure OpenAI 的 Entra ID 身份管理,并提供了清晰的自动配置 (3dc86d3)

常规清理

  • 移除了 1.0.0-M8 中的所有弃用项 (76bee8c)

  • 常规弃用项清理 (b6ce7f3)

升级到 1.0.0-M7

变更概述

Spring AI 1.0.0-M7 是在 RC1 和 GA 版本发布之前的最后一个里程碑版本。它引入了若干重要的变更,包括对构件 ID、包名以及模块结构的调整,这些变更将在最终版本中保留。

Artifact ID、包和模块的变更

1.0.0-M7 包含与 1.0.0-SNAPSHOT 相同的结构变更。

详情请参阅:

MCP Java SDK 升级至 0.9.0

Spring AI 1.0.0-M7 现在使用 MCP Java SDK 0.9.0 版本,该版本相较之前的版本包含了重大变更。如果你在应用程序中使用了 MCP,你需要更新你的代码以适配这些变化。

关键性变更包括:

接口重命名

  • ClientMcpTransportMcpClientTransport

  • ServerMcpTransportMcpServerTransport

  • DefaultMcpSessionMcpClientSessionMcpServerSession

  • 所有 *Registration 类 → *Specification

服务器创建变更

  • McpServerTransportProvider 替代 ServerMcpTransport

// Before
ServerMcpTransport transport = new WebFluxSseServerTransport(objectMapper, "/mcp/message");
var server = McpServer.sync(transport)
    .serverInfo("my-server", "1.0.0")
    .build();

// After
McpServerTransportProvider transportProvider = new WebFluxSseServerTransportProvider(objectMapper, "/mcp/message");
var server = McpServer.sync(transportProvider)
    .serverInfo("my-server", "1.0.0")
    .build();

Handler 方法签名变更

所有 Handler 现在都将 exchange 参数作为第一个参数接收:

// Before
.tool(calculatorTool, args -> new CallToolResult("Result: " + calculate(args)))

// After
.tool(calculatorTool, (exchange, args) -> new CallToolResult("Result: " + calculate(args)))

通过 Exchange 进行客户端交互

之前在服务器上可用的方法现在需通过 exchange 对象访问:

// Before
ClientCapabilities capabilities = server.getClientCapabilities();
CreateMessageResult result = server.createMessage(new CreateMessageRequest(...));

// After
ClientCapabilities capabilities = exchange.getClientCapabilities();
CreateMessageResult result = exchange.createMessage(new CreateMessageRequest(...));

rootsChangeHandler 的变更

// Before
.rootsChangeConsumers(List.of(
    roots -> System.out.println("Roots changed: " + roots)
))

// After
.rootsChangeHandlers(List.of(
    (exchange, roots) -> System.out.println("Roots changed: " + roots)
))

如需完整的 MCP 代码迁移指南,请参阅 MCP 迁移指南

启用/禁用模型自动配置

用于启用/禁用模型自动配置的旧版配置属性已被移除:

  • spring.ai.<provider>.chat.enabled

  • spring.ai.<provider>.embedding.enabled

  • spring.ai.<provider>.image.enabled

  • spring.ai.<provider>.moderation.enabled

默认情况下,若在类路径中发现模型提供商(如 OpenAI、Ollama),则自动启用其相关模型类型(聊天、嵌入等)的自动配置。当存在同一模型类型的多个提供商时(如同时存在 spring-ai-openai-spring-boot-starterspring-ai-ollama-spring-boot-starter),可通过以下属性选择哪个提供商的自动配置应激活,从而禁用该模型类型的其他提供商配置。

要完全禁用特定模型类型的自动配置(即使只有一个提供商存在),可将对应属性设置为与类路径中任何提供商都不匹配的值(如 nonedisabled)。

可参考 SpringAIModels 枚举获取已知提供商值列表。

  • spring.ai.model.audio.speech=<model-provider|none>

  • spring.ai.model.audio.transcription=<model-provider|none>

  • spring.ai.model.chat=<model-provider|none>

  • spring.ai.model.embedding=<model-provider|none>

  • spring.ai.model.embedding.multimodal=<model-provider|none>

  • spring.ai.model.embedding.text=<model-provider|none>

  • spring.ai.model.image=<model-provider|none>

  • spring.ai.model.moderation=<model-provider|none>

使用 AI 进行自动化升级

你可以使用提供的提示词,通过 Claude Code CLI 工具自动完成到 1.0.0-M7 的升级过程:

  1. 下载 Claude Code CLI 工具

  2. update-to-m7.txt 文件中复制提示词

  3. 将提示词粘贴到 Claude Code CLI 中

  4. AI 将分析你的项目并进行必要的更改

当前的自动化升级提示词能够处理构件 ID 的变更、包的迁移以及模块结构的调整,但尚未包含针对升级到 MCP 0.9.0 的自动更改。如果你使用了 MCP,你需要根据 “MCP Java SDK Upgrade” 部分中的指导手动更新你的代码。

各版本间的常见变更

Artifact ID 变更

Spring AI Starter 构件的命名模式已发生变化。你需要根据以下模式更新你的依赖项:

  • 模型 Starter:spring-ai-{model}-spring-boot-starterspring-ai-starter-model-{model}

  • 向量存储 Starter:spring-ai-{store}-store-spring-boot-starterspring-ai-starter-vector-store-{store}

  • MCP Starter:spring-ai-mcp-{type}-spring-boot-starterspring-ai-starter-mcp-{type}

示例

  • Maven

  • Gradle

<!-- BEFORE -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>

<!-- AFTER -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
// BEFORE
implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'
implementation 'org.springframework.ai:spring-ai-redis-store-spring-boot-starter'

// AFTER
implementation 'org.springframework.ai:spring-ai-starter-model-openai'
implementation 'org.springframework.ai:spring-ai-starter-vector-store-redis'

Spring AI 自动配置构件的变更

Spring AI 自动配置已从单一整体构件变更为按模型、向量存储等组件划分的独立自动配置构件。此项变更是为了最小化依赖库版本冲突(如 Google Protocol Buffers、Google RPC 等)的影响。通过将自动配置拆分为组件专属构件,可避免引入不必要的依赖,降低应用中版本冲突风险。

原单一整体构件已不可用:

<!-- NO LONGER AVAILABLE -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-spring-boot-autoconfigure</artifactId>
    <version>${project.version}</version>
</dependency>

现各组件均按以下模式拥有独立的自动配置构件:

  • 模型自动配置:spring-ai-autoconfigure-model-{model}

  • 向量存储自动配置:spring-ai-autoconfigure-vector-store-{store}

  • MCP 自动配置:spring-ai-autoconfigure-mcp-{type}

新自动配置构件示例

  • 模型

  • 向量存储

  • MCP

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-autoconfigure-model-openai</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-autoconfigure-model-anthropic</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-autoconfigure-model-vertex-ai</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-autoconfigure-vector-store-redis</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-autoconfigure-vector-store-pgvector</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-autoconfigure-vector-store-chroma</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-autoconfigure-mcp-client</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-autoconfigure-mcp-server</artifactId>
</dependency>
大多数情况下无需显式添加这些自动配置依赖,它们会通过对应的 starter 依赖间接引入。

包名变更

你的 IDE 应能协助重构至新包位置。

  • KeywordMetadataEnricherSummaryMetadataEnricher 已从 org.springframework.ai.transformer 迁移至 org.springframework.ai.chat.transformer 包。

  • ContentMediaContentMedia 已从 org.springframework.ai.model 迁移至 org.springframework.ai.content 包。

模型结构

该项目已对模块和构件结构进行重大调整。原先 spring-ai-core 包含所有核心接口,现拆分为多个专业领域模块以减少应用中不必要的依赖。

Spring AI 依赖

spring-ai-commons

基础模块(不依赖其他 Spring AI 模块)包含:

  • 核心 Domain Model(Document、TextSplitter)

  • JSON 工具与资源处理

  • 结构化日志与可观测性支持

spring-ai-model

提供 AI 能力抽象层:

  • 核心接口:ChatModelEmbeddingModelImageModel

  • 消息类型与提示模板

  • 函数调用框架(ToolDefinitionToolCallback

  • 内容过滤与观测支持

spring-ai-vector-store

统一向量数据库抽象层:

  • 相似性搜索的 VectorStore 接口

  • 类 SQL 高级过滤表达式

  • 基于内存实现的 SimpleVectorStore

  • 嵌入向量的批处理支持

spring-ai-client-chat

高级对话式 AI API:

  • ChatClient 接口

  • 通过 ChatMemory 实现会话持久化

  • 使用 OutputConverter 进行响应转换

  • 基于 dvisor 的拦截机制

  • 同步与响应式流支持

spring-ai-advisors-vector-store

实现聊天与向量库的 RAG 桥接:

  • QuestionAnswerAdvisor:向提示注入上下文

  • VectorStoreChatMemoryAdvisor:存储/检索会话历史

spring-ai-model-chat-memory-cassandra

Apache Cassandra 实现的 ChatMemory 存储:

  • CassandraChatMemory 具体实现

  • 使用 Cassandra 的 QueryBuilder 确保类型安全的 CQL 操作

spring-ai-model-chat-memory-neo4j

Neo4j 图数据库实现的会话持久化:

spring-ai-rag

检索增强生成(RAG)综合框架:

  • 模块化 RAG 流水线架构

  • RetrievalAugmentationAdvisor 为主入口点

  • 基于可组合组件的函数式编程原则

依赖结构

依赖层级结构可以概括为:

  • spring-ai-commons (基础层)

  • spring-ai-model (依赖于 commons)

  • spring-ai-vector-storespring-ai-client-chat (两者均依赖于 model)

  • spring-ai-advisors-vector-storespring-ai-rag (依赖于 client-chat 和 vector-store 两者)

  • spring-ai-model-chat-memory-* 模块(依赖于 client-chat)

ToolContext 变更

ToolContext 类已增强,以支持显式和隐式工具解析。现在可以将工具:

  1. 显式包含:在提示词中明确请求并在调用模型时包含的工具。

  2. 隐式可用:在运行时动态解析中可用的工具,但除非明确请求,否则不会包含在任何对模型的调用中。

自 1.0.0-M7 版本起,工具仅当在提示中显式请求或在调用中显式包含时,才会被纳入模型调用。

此外,ToolContext 类现已标记为 final 且不可再被继承。该类本就不应被子类化。你可以在实例化 ToolContext 时,以 Map<String, Object> 形式添加所需的所有上下文数据。更多信息请查阅 文档

升级到 to 1.0.0-M6

Usage 接口与 DefaultUsage 实现的变更

Usage 接口及其默认实现 DefaultUsage 已进行以下变更:

  1. 方法重命名:

    • getGenerationTokens() 现在是 getCompletionTokens()

  2. 类型变更:

    • DefaultUsage 中的所有令牌(Token)计数字段从 Long 类型更改为 Integer 类型:

      • promptTokens

      • completionTokens (之前为 generationTokens)

      • totalTokens

需要执行的操作

  • 将所有对 getGenerationTokens() 的调用替换为 getCompletionTokens()

  • 更新 DefaultUsage 构造函数调用:

// Old (M5)
new DefaultUsage(Long promptTokens, Long generationTokens, Long totalTokens)

// New (M6)
new DefaultUsage(Integer promptTokens, Integer completionTokens, Integer totalTokens)
如需了解更多关于处理 Usage 的信息,请参阅 此处

JSON 序列化/反序列化的变更

尽管 M6 版本仍保持对 generationTokens 字段的 JSON 反序列化向后兼容性,但该字段将在 M7 中被移除。任何使用旧字段名保存的 JSON 文档都应更新为使用 completionTokens

新 JSON 格式的示例:

{
  "promptTokens": 100,
  "completionTokens": 50,
  "totalTokens": 150
}

FunctionCallingOptions 在工具调用中的用法的变化

每个 ChatModel 实例在构建时,可接受一个可选的 ChatOptionsFunctionCallingOptions 实例,

在 1.0.0-M6 之前:

  • 通过默认的 FunctionCallingOptions 实例的 functions() 方法传递的任何工具,都会包含在该 ChatModel 实例每次对模型的调用中,可能会被运行时选项覆盖。

  • 通过默认的 FunctionCallingOptions 实例的 functionCallbacks() 方法传递的任何工具,仅用于运行时动态解析(参见 工具解析),但除非明确请求,否则不会包含在任何对模型的调用中。

从 1.0.0-M6 开始:

  • 通过默认的 FunctionCallingOptions 实例的 functions() 方法或 functionCallbacks() 方法传递的任何工具,现在以相同的方式处理:它会被包含在该 ChatModel 实例每次对模型的调用中,可能会被运行时选项覆盖。这样一来,工具在模型调用中的包含方式保持了一致性,避免了之前 functionCallbacks() 与其他选项之间行为差异所导致的混淆。

如果你希望将某个工具设为可用于运行时动态解析,并 仅在明确请求时 将其包含在对模型的聊天请求中,你可以使用 工具解析 中描述的策略之一。

1.0.0-M6 引入了用于处理工具调用的新 API。除上述情况外,在所有场景中均保持了对旧版 API 的向后兼容性。旧版 API 仍然可用,但已被标记为弃用,并将在 1.0.0-M7 中被移除。

已移除弃用的 Amazon Bedrock 聊天模型

从 1.0.0-M6 开始,Spring AI 过渡到使用 Amazon Bedrock 的 Converse API 来实现 Spring AI 中的所有聊天对话功能。除 Cohere 和 Titan 的嵌入模型外,所有 Amazon Bedrock 聊天模型均已移除。

请参考 Bedrock Converse 文档以了解如何使用聊天模型。

已更改为使用 Spring Boot 3.4.2 进行依赖管理

Spring AI 已更新以使用 Spring Boot 3.4.2 进行依赖管理。你可参考 这里 查阅由 Spring Boot 3.4.2 管理的依赖项列表。

需要执行的操作

  • 若你正升级至 Spring Boot 3.4.2,请务必参考 本文档 以了解 REST 客户端的必要配置变更。需特别注意:当类路径中缺少 HTTP 客户端库时,系统将改用 JdkClientHttpRequestFactory(而此前会使用 SimpleClientHttpRequestFactory)。如需切换回 SimpleClientHttpRequestFactory,需设置 spring.http.client.factory=simple

  • 若你使用的 Spring Boot 版本不同(如 Spring Boot 3.3.x)且需要特定版本的依赖项,可在构建配置中手动覆盖版本。

向量存储 API 变更

在 1.0.0-M6 版本中,VectorStore 接口中的 delete 方法已被修改,变为一个无返回值(void)的操作,而不是之前返回 Optional<Boolean>。如果你的代码此前依赖于检查 delete 操作的返回值,则需要移除该检查逻辑。现在,如果删除操作失败,该方法将直接抛出异常,从而提供更直接的错误处理方式。

1.0.0-M6 之前:

Optional<Boolean> result = vectorStore.delete(ids);
if (result.isPresent() && result.get()) {
    // handle successful deletion
}

1.0.0-M6 及其以后:

vectorStore.delete(ids);
// deletion successful if no exception is thrown

升级到 1.0.0.M5

  • 向量构建器已为保持一致性进行了重构。

  • 当前的 VectorStore 实现构造函数已被弃用,请使用构建器(builder)模式来创建实例。

  • VectorStore 实现的包已迁移至独立的包名称下,以避免不同构件间的命名冲突。例如,原先的 org.springframework.ai.vectorstore 现已移至 org.springframework.ai.pgvector.vectorstore

升级到 1.0.0.RC3

  • 可移植聊天选项的类型(frequencyPenaltypresencePenaltytemperaturetopP)已从 Float 改为 Double

升级到 1.0.0.M2

  • 为了与其他向量存储的命名规范保持一致,Chroma 向量存储的配置前缀已从 spring.ai.vectorstore.chroma.store 更改为 spring.ai.vectorstore.chroma

  • 对于支持 Schema 初始化的向量存储,默认情况下 initialize-schema 属性的值现已设置为 false。这意味着,如果希望在应用程序启动时创建 Schema,现在需要显式地选择启用该功能。并非所有向量存储都支持此属性,详细信息请参阅相应的向量存储文档。

    1. Hana

    2. Pinecone

    3. Weaviate

  • 在 Bedrock Jurassic 2 中,聊天选项已进行以下重命名和类型变更:

    • 重命名的参数:

      1. countPenaltycountPenaltyOptions

      2. frequencyPenaltyfrequencyPenaltyOptions

      3. presencePenaltypresencePenaltyOptions

    • 类型变更的参数:

      1. stopSequencesString[] 改为 List<String>

  • 在 Azure OpenAI 中,为保持与其他实现的一致性,聊天选项参数类型已作如下变更:

    1. frequencyPenalty 类型从 Double 改为 Float

    2. presencePenalty 类型从 Double 改为 Float

升级到 1.0.0.M1

在推进 1.0.0 M1 版本发布的过程中,我们进行了多项重大变更。为此带来的不便深表歉意,这一切都是为了实现更好的技术方案!

ChatClient 变更

我们进行了一项重大架构调整:将原 ChatClient 的功能迁移至 ChatModel,而新版 ChatClient 现改为接收 ChatModel 实例。此项变更是为了支持 Fluent 式 API(风格与 Spring 生态中其他客户端类如 RestClientWebClientJdbcClient 保持一致),用于创建和执行提示模板。关于 Fluent 式 API 的详细信息,请参阅 JavaDoc,完整的参考文档即将发布。

我们已将原 ModelClient 重命名为 Model,并同步更新了实现类名称(例如 ImageClient 更名为 ImageModel)。Model 实现层作为可移植层,负责 Spring AI API 与底层 AI 模型 API 之间的转换。

我们引入了新的 model 包结构,包含支持任意输入/输出数据类型组合的 AI 模型客户端接口与基类。目前聊天模型和图像模型包已实现该结构,嵌入模型包也将很快适配此新模型。

我们引入了新的 “可移植选项” 设计模式,旨在为不同聊天 AI 模型间的 ModelCall 提供最大可移植性。该模式包含通用生成选项和供应商特定选项,采用类似 “鸭子类型” 的实现方式。model 包中的 ModelOptions 是标记接口,表示该类的实现将提供模型选项。例如 ImageOptions 子接口定义了所有文本→图像 ImageModel 实现的可移植选项,而 StabilityAiImageOptionsOpenAiImageOptions 则提供各模型供应商的特定选项。所有选项类都通过 Fluent 式 API 构建器创建,并可传递给可移植的 ImageModel API。这些选项数据类型用于 ImageModel 实现的自动配置/配置属性中。

构件名称变更

已重命名的 POM 构件名称:

  • spring-ai-qdrant → spring-ai-qdrant-store

  • spring-ai-cassandra → spring-ai-cassandra-store

  • spring-ai-pinecone → spring-ai-pinecone-store

  • spring-ai-redis → spring-ai-redis-store

  • spring-ai-qdrant → spring-ai-qdrant-store

  • spring-ai-gemfire → spring-ai-gemfire-store

  • spring-ai-azure-vector-store-spring-boot-starter → spring-ai-azure-store-spring-boot-starter

  • spring-ai-redis-spring-boot-starter → spring-ai-starter-vector-store-redis

升级到 0.8.1

spring-ai-vertex-ai 已更名为 spring-ai-vertex-ai-palm2, 原 spring-ai-vertex-ai-spring-boot-starter 已更名为 spring-ai-vertex-ai-palm2-spring-boot-starter

所以,你需要将依赖项从:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-vertex-ai</artifactId>
</dependency>

修改为:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-vertex-ai-palm2</artifactId>
</dependency>

并且,与 Palm2 模型相关的 Boot Starter 从:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-vertex-ai-spring-boot-starter</artifactId>
</dependency>

修改为:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-vertex-ai-palm2-spring-boot-starter</artifactId>
</dependency>
  • 已重命名的类 (01.03.2024)

    • VertexAiApi → VertexAiPalm2Api

    • VertexAiClientChat → VertexAiPalm2ChatClient

    • VertexAiEmbeddingClient → VertexAiPalm2EmbeddingClient

    • VertexAiChatOptions → VertexAiPalm2ChatOptions

升级到 0.8.0

2024 年 1 月 24 日更新说明

  • 将提示(prompt)、消息(messages)和元数据(metadata)包迁移至 org.springframework.ai.chat 的子包下。

  • 新增 model 包,包含支持创建任意输入/输出数据类型组合的 AI 模型客户端的接口与基类。目前聊天模型和图像模型包已实现该结构,嵌入模型包也将很快适配此新模型。

  • 新的 “可移植选项” 设计模式。我们希望在 ModelCall 中尽可能多地提供基于聊天的 AI 模型的可移植性。有一组通用的生成选项,还有一些特定于模型提供者的选项。我们使用了一种 “鸭子类型” 的方法。模型包中的 ModelOptions 是一个标记接口,表示该类的实现将为模型提供选项。请参见 ImageOptions,它是一个子接口,定义了所有文本→图像 ImageModel 实现中的可移植选项。然后,StabilityAiImageOptionsOpenAiImageOptions 为每个模型提供者提供特定的选项。所有选项类都是通过 Fluent API Builder 创建的,都可以传入可移植的 ImageModel API。这些选项数据类型用于 ImageModel 实现的自动配置/配置属性。

2024 年 1 月 13 日更新

以下 OpenAi 自动配置聊天属性已更改:

  • spring.ai.openai.modelspring.ai.openai.chat.options.model

  • spring.ai.openai.temperaturespring.ai.openai.chat.options.temperature

查找有关 OpenAi 属性的最新文档: springdoc.cn/spring-ai/api/chat/openai-chat.html

2023 年 12 月 27 日更新

SimplePersistentVectorStoreInMemoryVectorStore 合并为 SimpleVectorStore

  • 用 SimpleVectorStore 取代 InMemoryVectorStore

2023 年 12 月 20 日更新

重构 Ollama 客户端及相关类和包名称

  • org.springframework.ai.ollama.client.OllamaClient 替换为 org.springframework.ai.olama.OllamaModelCall

  • OllamaChatClient 方法签名已更改。

  • org.springframework.ai.autoconfigure.ollama.OllamaProperties 重命名为 org.springframework.ai.model.olama.autoconfigure.OllamaChatProperties,并将后缀改为 spring.ai.ollama.chat。部分属性也已变更。

2023 年 12 月 19 日更新

重新命名 AiClient 及相关类和包名称

  • AiClient 重命名为 ChatClient

  • AiResponse 重命名为 ChatResponse

  • AiStreamClient 更名为 StreamingChatClient

  • 将包 org.sf.ai.client 更名为 org.sf.ai.chat

重命名构件 ID:

  • transformers-embedding 更名为 spring-ai-transformers

将 Maven 模块从顶层目录和 embedding-clients 子目录移至单一的 models 目录下。

2023 年 12 月 1 日

转换项目的 Group ID:

  • org.springframework.experimental.ai 替换为 org.springframework.ai

工件仍将托管在快照版本库中,如下所示。

主分支将转移到 0.8.0-SNAPSHOT 版本。它将在一两周内处于不稳定状态。若需稳定版本,请使用0.7.1-SNAPSHOT。

你可照常访问 0.7.1-SNAPSHOT 构件及对应文档

0.7.1-SNAPSHOT 依赖

  • Azure OpenAI

    <dependency>
        <groupId>org.springframework.experimental.ai</groupId>
        <artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId>
        <version>0.7.1-SNAPSHOT</version>
    </dependency>
  • OpenAI

    <dependency>
        <groupId>org.springframework.experimental.ai</groupId>
        <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
        <version>0.7.1-SNAPSHOT</version>
    </dependency>