升级说明
本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。 |
升级到 1.0.0-SNAPSHOT
添加 Snapshot 仓库
要使用 1.0.0-SNAPSHOT 版本,需在构建文件中添加 snapshot 仓库。具体操作请参考《入门指南》中的 “Snapshot - 添加 Snapshot 仓库” 章节。
更新 Dependency Management
在构建配置中将 Spring AI BOM 版本更新为 1.0.0-SNAPSHOT
。有关配置依赖管理的详细说明,请参阅《入门指南》中的 “依赖管理” 章节。
升级到 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-prompt
→log-prompt
-
include-completion
→log-completion
-
include-query-response
→log-query-response
-
-
新增
TracingAwareLoggingObservationHandler
实现支持追踪的日志记录 -
替换
micrometer-tracing-bridge-otel
为micrometer-tracing
-
删除了基于事件的跟踪,改为直接记录日志
-
移除对 OTel SDK 的直接依赖
-
将 observation 属性中的
includePrompt
更名为logPrompt
(在ChatClientBuilderProperties
、ChatObservationProperties
和ImageObservationProperties
中)
-
聊天记忆存储模块与自动配置重命名
我们已通过在整个代码库添加 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.jdbc
→org.springframework.ai.chat.memory.repository.jdbc
配置类
-
主要自动配置类现在使用
Repository
后缀。 -
例如:
JdbcChatMemoryAutoConfiguration
→JdbcChatMemoryRepositoryAutoConfiguration
属性
-
配置属性从
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;
移除向量存储
-
删除了 HanaDB 向量存储自动配置(f3b4624)
依赖
-
移除了 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
依赖
-
移除了 spring-ai-openai 中未使用的 json-path 依赖(9de13d1)
行为变更
可观测性
-
重构了内容观测功能,改用日志记录替代追踪 (ca843e8)
-
将内容观测过滤器替换为日志记录处理器
-
重命名了配置属性,以更好地反映其用途:
-
include-prompt
→log-prompt
-
include-completion
→log-completion
-
include-query-response
→log-query-response
-
-
新增了
TracingAwareLoggingObservationHandler
以支持带有追踪信息的日志记录 -
将
micrometer-tracing-bridge-otel
替换为micrometer-tracing
-
移除了基于事件的追踪,改用直接日志记录
-
移除了对 OTel SDK 的直接依赖
-
在观测属性中将
includePrompt
重命名为logPrompt
(涉及ChatClientBuilderProperties
、ChatObservationProperties
和ImageObservationProperties
)
-
Azure OpenAI
-
新增了用于 Azure OpenAI 的 Entra ID 身份管理,并提供了清晰的自动配置 (3dc86d3)
升级到 1.0.0-M7
变更概述
Spring AI 1.0.0-M7 是在 RC1 和 GA 版本发布之前的最后一个里程碑版本。它引入了若干重要的变更,包括对构件 ID、包名以及模块结构的调整,这些变更将在最终版本中保留。
MCP Java SDK 升级至 0.9.0
Spring AI 1.0.0-M7 现在使用 MCP Java SDK 0.9.0 版本,该版本相较之前的版本包含了重大变更。如果你在应用程序中使用了 MCP,你需要更新你的代码以适配这些变化。
关键性变更包括:
接口重命名
-
ClientMcpTransport
→McpClientTransport
-
ServerMcpTransport
→McpServerTransport
-
DefaultMcpSession
→McpClientSession
或McpServerSession
-
所有
*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-starter
和 spring-ai-ollama-spring-boot-starter
),可通过以下属性选择哪个提供商的自动配置应激活,从而禁用该模型类型的其他提供商配置。
要完全禁用特定模型类型的自动配置(即使只有一个提供商存在),可将对应属性设置为与类路径中任何提供商都不匹配的值(如 none
或 disabled
)。
可参考 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 的升级过程:
-
从 update-to-m7.txt 文件中复制提示词
-
将提示词粘贴到 Claude Code CLI 中
-
AI 将分析你的项目并进行必要的更改
当前的自动化升级提示词能够处理构件 ID 的变更、包的迁移以及模块结构的调整,但尚未包含针对升级到 MCP 0.9.0 的自动更改。如果你使用了 MCP,你需要根据 “MCP Java SDK Upgrade” 部分中的指导手动更新你的代码。 |
各版本间的常见变更
Artifact ID 变更
Spring AI Starter 构件的命名模式已发生变化。你需要根据以下模式更新你的依赖项:
-
模型 Starter:
spring-ai-{model}-spring-boot-starter
→spring-ai-starter-model-{model}
-
向量存储 Starter:
spring-ai-{store}-store-spring-boot-starter
→spring-ai-starter-vector-store-{store}
-
MCP Starter:
spring-ai-mcp-{type}-spring-boot-starter
→spring-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 应能协助重构至新包位置。
-
KeywordMetadataEnricher
和SummaryMetadataEnricher
已从org.springframework.ai.transformer
迁移至org.springframework.ai.chat.transformer
包。 -
Content
、MediaContent
和Media
已从org.springframework.ai.model
迁移至org.springframework.ai.content
包。
模型结构
该项目已对模块和构件结构进行重大调整。原先 spring-ai-core
包含所有核心接口,现拆分为多个专业领域模块以减少应用中不必要的依赖。

spring-ai-commons
基础模块(不依赖其他 Spring AI 模块)包含:
-
核心 Domain Model(Document、TextSplitter)
-
JSON 工具与资源处理
-
结构化日志与可观测性支持
spring-ai-model
提供 AI 能力抽象层:
-
核心接口:
ChatModel
、EmbeddingModel
、ImageModel
-
消息类型与提示模板
-
函数调用框架(
ToolDefinition
、ToolCallback
) -
内容过滤与观测支持
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-commons
(基础层) -
spring-ai-model
(依赖于 commons) -
spring-ai-vector-store
和spring-ai-client-chat
(两者均依赖于 model) -
spring-ai-advisors-vector-store
和spring-ai-rag
(依赖于 client-chat 和 vector-store 两者) -
spring-ai-model-chat-memory-*
模块(依赖于 client-chat)
ToolContext 变更
ToolContext
类已增强,以支持显式和隐式工具解析。现在可以将工具:
-
显式包含:在提示词中明确请求并在调用模型时包含的工具。
-
隐式可用:在运行时动态解析中可用的工具,但除非明确请求,否则不会包含在任何对模型的调用中。
自 1.0.0-M7 版本起,工具仅当在提示中显式请求或在调用中显式包含时,才会被纳入模型调用。
此外,ToolContext
类现已标记为 final
且不可再被继承。该类本就不应被子类化。你可以在实例化 ToolContext
时,以 Map<String, Object>
形式添加所需的所有上下文数据。更多信息请查阅 文档。
升级到 to 1.0.0-M6
Usage
接口与 DefaultUsage
实现的变更
Usage
接口及其默认实现 DefaultUsage
已进行以下变更:
-
方法重命名:
-
getGenerationTokens()
现在是getCompletionTokens()
-
-
类型变更:
-
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 的信息,请参阅 此处。
|
FunctionCallingOptions
在工具调用中的用法的变化
每个 ChatModel
实例在构建时,可接受一个可选的 ChatOptions
或 FunctionCallingOptions
实例,
在 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.M5
-
向量构建器已为保持一致性进行了重构。
-
当前的
VectorStore
实现构造函数已被弃用,请使用构建器(builder)模式来创建实例。 -
VectorStore
实现的包已迁移至独立的包名称下,以避免不同构件间的命名冲突。例如,原先的org.springframework.ai.vectorstore
现已移至org.springframework.ai.pgvector.vectorstore
。
升级到 1.0.0.M2
-
为了与其他向量存储的命名规范保持一致,Chroma 向量存储的配置前缀已从
spring.ai.vectorstore.chroma.store
更改为spring.ai.vectorstore.chroma
。 -
对于支持 Schema 初始化的向量存储,默认情况下
initialize-schema
属性的值现已设置为false
。这意味着,如果希望在应用程序启动时创建 Schema,现在需要显式地选择启用该功能。并非所有向量存储都支持此属性,详细信息请参阅相应的向量存储文档。-
Hana
-
Pinecone
-
Weaviate
-
-
在 Bedrock Jurassic 2 中,聊天选项已进行以下重命名和类型变更:
-
重命名的参数:
-
countPenalty
→countPenaltyOptions
-
frequencyPenalty
→frequencyPenaltyOptions
-
presencePenalty
→presencePenaltyOptions
-
-
类型变更的参数:
-
stopSequences
从String[]
改为List<String>
-
-
-
在 Azure OpenAI 中,为保持与其他实现的一致性,聊天选项参数类型已作如下变更:
-
frequencyPenalty
类型从Double
改为Float
-
presencePenalty
类型从Double
改为Float
-
升级到 1.0.0.M1
在推进 1.0.0 M1 版本发布的过程中,我们进行了多项重大变更。为此带来的不便深表歉意,这一切都是为了实现更好的技术方案!
ChatClient 变更
我们进行了一项重大架构调整:将原 ChatClient
的功能迁移至 ChatModel
,而新版 ChatClient
现改为接收 ChatModel
实例。此项变更是为了支持 Fluent 式 API(风格与 Spring 生态中其他客户端类如 RestClient
、WebClient
和 JdbcClient
保持一致),用于创建和执行提示模板。关于 Fluent 式 API 的详细信息,请参阅 JavaDoc,完整的参考文档即将发布。
我们已将原 ModelClient
重命名为 Model
,并同步更新了实现类名称(例如 ImageClient
更名为 ImageModel
)。Model
实现层作为可移植层,负责 Spring AI API 与底层 AI 模型 API 之间的转换。
我们引入了新的 model
包结构,包含支持任意输入/输出数据类型组合的 AI 模型客户端接口与基类。目前聊天模型和图像模型包已实现该结构,嵌入模型包也将很快适配此新模型。
我们引入了新的 “可移植选项” 设计模式,旨在为不同聊天 AI 模型间的 ModelCall
提供最大可移植性。该模式包含通用生成选项和供应商特定选项,采用类似 “鸭子类型” 的实现方式。model
包中的 ModelOptions
是标记接口,表示该类的实现将提供模型选项。例如 ImageOptions
子接口定义了所有文本→图像 ImageModel
实现的可移植选项,而 StabilityAiImageOptions
和 OpenAiImageOptions
则提供各模型供应商的特定选项。所有选项类都通过 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
实现中的可移植选项。然后,StabilityAiImageOptions
和OpenAiImageOptions
为每个模型提供者提供特定的选项。所有选项类都是通过 Fluent API Builder 创建的,都可以传入可移植的ImageModel
API。这些选项数据类型用于ImageModel
实现的自动配置/配置属性。
2024 年 1 月 13 日更新
以下 OpenAi 自动配置聊天属性已更改:
-
spring.ai.openai.model
→spring.ai.openai.chat.options.model
-
spring.ai.openai.temperature
→spring.ai.openai.chat.options.temperature
查找有关 OpenAi 属性的最新文档: springdoc.cn/spring-ai/api/chat/openai-chat.html
2023 年 12 月 27 日更新
将 SimplePersistentVectorStore
和 InMemoryVectorStore
合并为 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>