升级说明

升级到 1.0.0-SNAPSHOT

概述

1.0.0-SNAPSHOT 版本包含对 artifact ID、包名和模块结构的重大更改。本节提供针对使用 SNAPSHOT 版本的具体指导。

添加 Snapshot 仓库

要使用 1.0.0-SNAPSHOT 版本,您需要将快照仓库添加到您的构建文件中。 有关详细说明,请参阅《入门指南》中的 快照 - 添加快照仓库 部分。

更新依赖管理

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

Artifact ID、包和模块更改

1.0.0-SNAPSHOT 包含对 artifact ID、包名和模块结构的更改。

升级到 1.0.0-RC1

您可以使用 OpenRewrite recipe 自动化升级到 1.0.0-RC1 的过程。 此 recipe 有助于应用此版本所需的许多代码更改。 请在 Arconia Spring AI Migrations 查找 recipe 和使用说明。

破坏性变更

Chat Client 和 Advisors

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

  • 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

Advisors 中的自包含模板

执行提示增强的内置 advisors 已更新为使用自包含模板。目标是让每个 advisor 都能执行模板操作,而不会影响或受其他 advisors 中的模板和提示决策的影响。

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

  • 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-otel 替换为 micrometer-tracing

    • 移除基于事件的跟踪,转而使用直接日志记录

    • 移除对 OTel SDK 的直接依赖

    • 在观察属性中将 includePrompt 重命名为 logPrompt (在 ChatClientBuilderPropertiesChatObservationPropertiesImageObservationProperties 中)

聊天记忆仓库模块和自动配置重命名

我们通过在整个代码库中添加仓库后缀,标准化了聊天记忆组件的命名模式。此更改影响 Cassandra、JDBC 和 Neo4j 实现,影响 artifact ID、Java 包名和类名以提高清晰度。

Artifact ID

所有与记忆相关的 artifact 现在都遵循一致的模式:

  • 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 包

  • 包路径现在包含 .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 依赖项以使用新的 artifact ID。 - 更新任何使用旧包或类名的导入、类引用或配置。

消息聚合器重构

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

  • aggregateChatClientResponse 方法已从 MessageAggregator 中移除,并移动到 org.springframework.ai.chat.client 包中的新类 ChatClientMessageAggregator

迁移指南

如果您之前直接使用 MessageAggregatoraggregateChatClientResponse 方法,您需要改用新的 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)

  • 重构了聊天记忆仓库 artifact 以提高清晰度 (2d517ee)

  • 重构了聊天记忆仓库自动配置和 Spring Boot starters 以提高清晰度 (f6dba1b)

消息和模板 API

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

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

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

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

  • 移除了 TemplateRender 接口在移动后剩余的部分 (52675d8)

额外的客户端 API 更改

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

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

包结构更改

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

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

依赖项

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

行为变更

Azure OpenAI

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

一般清理

升级到 1.0.0-M8

您可以使用 OpenRewrite recipe 自动化升级到 1.0.0-M8 的过程。 此 recipe 有助于应用此版本所需的许多代码更改。 请在 Arconia Spring AI Migrations 查找 recipe 和使用说明。

破坏性变更

从 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)

  • 重构了聊天记忆仓库 artifact 以提高清晰度 (2d517ee)

  • 重构了聊天记忆仓库自动配置和 Spring Boot starters 以提高清晰度 (f6dba1b)

客户端 API

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

  • 对 chatclient 工具调用的破坏性更改 (5b7849d)

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

消息和模板 API

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

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

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

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

  • 移除了 TemplateRender 接口在移动后剩余的部分 (52675d8)

模型实现

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

  • 移除了 Qianfan 代码 (bfcaad7)

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

  • 移除了 OpenAiApi 中的 deepseek 选项 (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 版本之前的最后一个里程碑版本。它引入了 artifact 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();

处理器签名更改

所有处理器现在都将 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(...));

根更改处理器

// 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 将分析您的项目并进行必要的更改

自动升级提示目前处理 artifact ID 更改、包重定位和模块结构更改,但尚未包含升级到 MCP 0.9.0 的自动更改。如果您正在使用 MCP,您需要按照 mcp-java-sdk-upgrade-to-0-9-0 部分的指导手动更新您的代码。

各版本间的通用更改

Artifact ID 更改

Spring AI starter artifacts 的命名模式已更改。 您需要根据以下模式更新您的依赖项:

  • 模型 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 自动配置 Artifact 的更改

Spring AI 自动配置已从单个整体 artifact 更改为每个模型、向量存储和其他组件的独立自动配置 artifact。 此更改旨在最大程度地减少不同版本的依赖库(例如 Google Protocol Buffers、Google RPC 等)冲突的影响。 通过将自动配置分离到特定于组件的 artifact 中,您可以避免引入不必要的依赖项并降低应用程序中版本冲突的风险。

原始的整体 artifact 不再可用:

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

相反,每个组件现在都有自己的自动配置 artifact,遵循以下模式:

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

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

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

新自动配置 Artifact 的示例

  • Models

  • Vector Stores

  • 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

模块结构

项目对其模块和 artifact 结构进行了重大更改。以前,spring-ai-core 包含所有核心接口,但现在已将其拆分为专门的领域模块,以减少应用程序中不必要的依赖项。

spring ai dependencies

spring-ai-commons

基本模块,不依赖于其他 Spring AI 模块。包含: - 核心领域模型 (Document, TextSplitter) - JSON 工具和资源处理 - 结构化日志记录和可观测性支持

spring-ai-model

提供 AI 能力抽象: - 接口,如 ChatModelEmbeddingModelImageModel - 消息类型和提示模板 - 函数调用框架 (ToolDefinition, ToolCallback) - 内容过滤和观察支持

spring-ai-vector-store

统一的向量数据库抽象: - 用于相似性搜索的 VectorStore 接口 - 使用类似 SQL 的表达式进行高级过滤 - 用于内存使用的 SimpleVectorStore - 嵌入的批处理支持

spring-ai-client-chat

高级对话 AI API: - ChatClient 接口 - 通过 ChatMemory 进行对话持久化 - 使用 OutputConverter 进行响应转换 - 基于 Advisor 的拦截 - 同步和响应式流支持

spring-ai-advisors-vector-store

将聊天与向量存储桥接以实现 RAG: - QuestionAnswerAdvisor:将上下文注入提示 - VectorStoreChatMemoryAdvisor:存储/检索对话历史

spring-ai-model-chat-memory-cassandra

用于 ChatMemory 的 Apache Cassandra 持久化: - CassandraChatMemory 实现 - 使用 Cassandra 的 QueryBuilder 进行类型安全的 CQL ==== spring-ai-model-chat-memory-neo4j

Neo4j 图数据库用于聊天对话的持久化。

spring-ai-rag

用于检索增强生成 (Retrieval Augmented Generation) 的综合框架: - 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> 的形式添加所有需要的上下文数据。有关更多信息,请查看[文档]([role="bare"][role="bare"]https://docs.spring.io/spring-ai/reference/api/tools.html#_tool_context)。

升级到 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 中的所有聊天对话实现。 所有 Amazon Bedrock 聊天模型都已移除,除了 Cohere 和 Titan 的嵌入模型。

有关使用聊天模型,请参阅 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 Client 所需的更改。值得注意的是,如果您的类路径上没有 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 实现构造函数已被弃用,请使用构建器模式。

  • VectorStore 实现包已移动到唯一的包名,避免了跨 artifact 的冲突。例如,org.springframework.ai.vectorstore 移至 org.springframework.ai.pgvector.vectorstore

升级到 1.0.0.RC3

  • 可移植聊天选项 (frequencyPenalty, presencePenalty, temperature, topP) 的类型已从 Float 更改为 Double

升级到 1.0.0.M2

  • Chroma Vector Store 的配置前缀已从 spring.ai.vectorstore.chroma.store 更改为 spring.ai.vectorstore.chroma,以与其他向量存储的命名约定保持一致。

  • 能够初始化模式的向量存储的 initialize-schema 属性的默认值现在设置为 false。 这意味着应用程序现在需要显式选择在支持的向量存储上进行模式初始化,如果期望在应用程序启动时创建模式的话。 并非所有向量存储都支持此属性。 有关更多详细信息,请参阅相应的向量存储文档。 以下是目前不支持 initialize-schema 属性的向量存储:[style="arabic"][style="arabic"]

    1. Hana

    2. Pinecone

    3. Weaviate

  • 在 Bedrock Jurassic 2 中,聊天选项 countPenaltyfrequencyPenaltypresencePenalty 已重命名为 countPenaltyOptionsfrequencyPenaltyOptionspresencePenaltyOptions。 此外,聊天选项 stopSequences 的类型已从 String[] 更改为 List<String>

  • 在 Azure OpenAI 中,聊天选项 frequencyPenaltypresencePenalty 的类型 已从 Double 更改为 Float,与其他所有实现保持一致。

升级到 1.0.0.M1

在发布 1.0.0 M1 的过程中,我们进行了几项破坏性更改。抱歉,但这都是为了更好的发展!

ChatClient 更改

一个主要的更改是将“旧”的 ChatClient 功能移至 ChatModel。 “新”的 ChatClient 现在接受 ChatModel 实例。这样做是为了支持一种流畅的 API,用于以类似于 Spring 生态系统中其他客户端类(如 RestClientWebClientJdbcClient)的风格创建和执行提示。有关 Fluent API 的更多信息,请参阅 [JavaDoc]([role="bare"][role="bare"]https://docs.spring.io/spring-ai/docs/api),正确的参考文档即将推出。

我们将“旧”的 ModelClient 重命名为 Model,并重命名了实现类,例如 ImageClient 被重命名为 ImageModelModel 实现代表了 Spring AI API 和底层 AI 模型 API 之间转换的便携层。

一个新的 model 包,其中包含接口和基类,以支持为任何输入/输出数据类型组合创建 AI 模型客户端。目前,聊天和图像模型包实现了这一点。我们将很快更新嵌入包以使用这个新模型。

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

Artifact 名称更改

重命名 POM artifact 名称: - 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-palm2spring-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>
  • 重命名类 (2024年1月3日)

    • VertexAiApi → VertexAiPalm2Api

    • VertexAiClientChat → VertexAiPalm2ChatClient

    • VertexAiEmbeddingClient → VertexAiPalm2EmbeddingClient

    • VertexAiChatOptions → VertexAiPalm2ChatOptions

升级到 0.8.0

2024年1月24日更新

  • promptmessagesmetadata 包移动到 org.springframework.ai.chat 的子包中

  • 新功能是 文本到图像 客户端。类是 OpenAiImageModelStabilityAiImageModel。有关用法,请参阅集成测试,文档即将推出。

  • 一个新的 model 包,其中包含接口和基类,以支持为任何输入/输出数据类型组合创建 AI 模型客户端。目前,聊天和图像模型包实现了这一点。我们将很快更新嵌入包以使用这个新模型。

  • 一种新的“可移植选项”设计模式。我们希望在不同的基于聊天的 AI 模型之间,尽可能地在 ModelCall 中提供可移植性。有一组通用的生成选项,然后是特定于模型提供商的选项。使用了某种“鸭子类型”方法。模型包中的 ModelOptions 是一个标记接口,表示此类的实现将为模型提供选项。请参阅 ImageOptions,这是一个子接口,定义了所有文本到图像 ImageModel 实现之间的可移植选项。然后 StabilityAiImageOptionsOpenAiImageOptions 提供了特定于每个模型提供商的选项。所有选项类都通过 Fluent API 构建器创建,所有选项都可以传递到可移植的 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 属性的更新文档:[role="bare"][role="bare"]https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html

2023年12月27日更新

将 SimplePersistentVectorStore 和 InMemoryVectorStore 合并到 SimpleVectorStore * 将 InMemoryVectorStore 替换为 SimpleVectorStore

2023年12月20日更新

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

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

  • OllamaChatClient 方法签名已更改。

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

2023年12月19日更新

AiClient 及相关类和包名重命名

  • 将 AiClient 重命名为 ChatClient

  • 将 AiResponse 重命名为 ChatResponse

  • 将 AiStreamClient 重命名为 StreamingChatClient

  • 将包 org.sf.ai.client 重命名为 org.sf.ai.chat

将 Maven 模块从顶层目录和 embedding-clients 子目录移动到统一的 models 目录。

2023年12月1日

我们正在将项目的 Group ID 进行过渡:

  • org.springframework.experimental.ai

  • org.springframework.ai

Artifacts 仍将托管在如下所示的快照仓库中。

主分支将移动到版本 0.8.0-SNAPSHOT。 它将在一到两周内不稳定。 如果您不想使用最新版本,请使用 0.7.1-SNAPSHOT。

您可以像以前一样访问 0.7.1-SNAPSHOT artifact,并且仍然可以访问 0.7.1-SNAPSHOT 文档

0.7.1-SNAPSHOT 依赖项

  • Azure OpenAI[source, xml]

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

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