このバージョンはまだ開発中であり、まだ安定しているとは考えられていません。最新のスナップショットバージョンについては、Spring AI 1.1.2 を使用してください。

アップグレードノート

2.0.0-M1 へのアップグレード

重大な変更

Default Temperature Configuration Removed

Spring AI no longer provides default temperature values for chat model autoconfiguration properties. Previously, Spring AI set a default temperature of 0.7 for most chat models. This default has been removed to allow each AI provider’s native default temperature to be used.

Impact

If your application did not explicitly configure a temperature value and relied on Spring AI’s default of 0.7, you may notice different behavior after upgrading. The actual default will now be determined by each AI provider’s API, which may vary:

  • Some providers default to 1.0

  • Some providers default to 0.7

  • Some providers have model-specific defaults

マイグレーション

If you want to maintain the previous behavior, explicitly set the temperature in your configuration:

# Example for OpenAI
spring.ai.openai.chat.options.temperature=0.7

# Example for Anthropic
spring.ai.anthropic.chat.options.temperature=0.7

# Example for Azure OpenAI
spring.ai.azure.openai.chat.options.temperature=0.7

Or programmatically when building requests:

ChatResponse response = chatModel.call(
    new Prompt("Your prompt here",
        OpenAiChatOptions.builder()
            .temperature(0.7)
            .build()));

1.1.0-RC1 へのアップグレード

重大な変更

テキスト読み上げ (TTS) API の移行

OpenAI 音声合成(TTS)の実装は、プロバイダ固有のクラスから共有インターフェースに移行されました。これにより、複数の TTS プロバイダ(OpenAI、ElevenLabs、将来のプロバイダ)で動作する移植性の高いコードの作成が可能になります。

削除されたクラス

次の非推奨クラスは org.springframework.ai.openai.audio.speech パッケージから削除されました。

  • SpeechModel → TextToSpeechModel を使用 (org.springframework.ai.audio.tts より)

  • StreamingSpeechModel → StreamingTextToSpeechModel を使用 (org.springframework.ai.audio.tts より)

  • SpeechPrompt → TextToSpeechPrompt を使用 (org.springframework.ai.audio.tts より)

  • SpeechResponse → TextToSpeechResponse を使用 (org.springframework.ai.audio.tts より)

  • SpeechMessage → TextToSpeechMessage を使用 (org.springframework.ai.audio.tts より)

  • Speech (org.springframework.ai.openai.audio.speech 内) → Speech を使用 (org.springframework.ai.audio.tts より)

さらに、他の TTS プロバイダーとの一貫性を保つために、すべての OpenAI TTS コンポーネントで speed パラメーター型が Float から Double に変更されました。

移行手順
  1. インポートの更新 org.springframework.ai.openai.audio.speech. からのすべてのインポートを org.springframework.ai.audio.tts. に置き換えます

  2. 型参照の更新 : 古いクラス名をすべて新しいクラス名に置き換えます。

    Find:    SpeechModel
    Replace: TextToSpeechModel
    
    Find:    StreamingSpeechModel
    Replace: StreamingTextToSpeechModel
    
    Find:    SpeechPrompt
    Replace: TextToSpeechPrompt
    
    Find:    SpeechResponse
    Replace: TextToSpeechResponse
    
    Find:    SpeechMessage
    Replace: TextToSpeechMessage
  3. 速度パラメーターの更新 Float から Double への変更:

    Find:    .speed(1.0f)
    Replace: .speed(1.0)
    
    Find:    Float speed
    Replace: Double speed
  4. アップデート依存性注入 SpeechModel を挿入する場合は、TextToSpeechModel に更新します。

    // Before
    public MyService(SpeechModel speechModel) { ... }
    
    // After
    public MyService(TextToSpeechModel textToSpeechModel) { ... }
メリット
  • ポータビリティ : 一度コードを記述すれば、OpenAI、ElevenLabs、その他の TTS プロバイダーを簡単に切り替えることができます。

  • 一貫性 : ChatModel や他の Spring AI 抽象化と同じパターン

  • 型安全性 : 適切なインターフェース実装による型階層の改善

  • 将来を見据えた : 新しい TTS プロバイダーは既存のコードで自動的に動作します

追加リソース

詳細なコード例を含む包括的な移行ガイドについては、以下を参照してください。

1.0.0-SNAPSHOT へのアップグレード

概要

1.0.0-SNAPSHOT バージョンでは、アーティファクト ID、パッケージ名、モジュール構造に大幅な変更が加えられています。このセクションでは、SNAPSHOT バージョンの使用に関する具体的なガイダンスを提供します。

スナップショットリポジトリの追加

1.0.0-SNAPSHOT バージョンを使用するには、スナップショットリポジトリをビルドファイルに追加する必要があります。詳細な手順については、「入門」ガイドのスナップショット - スナップショットリポジトリの追加セクションを参照してください。

アップデート依存関係管理

ビルド構成で、Spring AI BOM バージョンを 1.0.0-SNAPSHOT に更新します。依存関係管理を構成する詳細な手順については、「入門ガイド」の依存関係管理セクションを参照してください。

アーティファクト ID、パッケージ、モジュールの変更

1.0.0-SNAPSHOT には、アーティファクト ID、パッケージ名、モジュール構造の変更が含まれています。

1.0.0-RC1 へのアップグレード

OpenRewrite レシピを使えば、1.0.0-RC1 へのアップグレードプロセスを自動化できます。このレシピは、このバージョンに必要な多くのコード変更を適用できます。レシピと使用方法は Arconia Spring AI 移行 [GitHub] (英語) を参照してください。

重大な変更

チャットクライアントとアドバイザー

エンドユーザーコードに影響を与える主な変更は次のとおりです。

  • 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 を使用するように更新してください。

アドバイザーの自己完結型テンプレート

プロンプト拡張を実行する組み込みアドバイザーが、自己完結型のテンプレートを使用するように更新されました。これにより、各アドバイザーは、他のアドバイザーのテンプレート化やプロンプト決定に影響を与えず、また影響を受けずにテンプレート化操作を実行できるようになります。

次のアドバイザーにカスタムテンプレートを提供していた場合は、必要なプレースホルダーがすべて含まれるようにテンプレートを更新する必要があります。

  • QuestionAnswerAdvisor では、次のプレースホルダーを含むテンプレートが必要です ( 詳細については、こちらを参照してください)。

    • ユーザーの質問を受け取るための query プレースホルダー。

    • 取得したコンテキストを受け取るための question_answer_context プレースホルダー。

  • PromptChatMemoryAdvisor では、次のプレースホルダーを含むテンプレートが必要です ( 詳細については、こちらを参照してください)。

    • 元のシステムメッセージを受信するための instructions プレースホルダー。

    • 取得した会話メモリを受け取るための memory プレースホルダー。

  • VectorStoreChatMemoryAdvisor では、次のプレースホルダーを含むテンプレートが必要です ( 詳細については、こちらを参照してください)。

    • 元のシステムメッセージを受信するための instructions プレースホルダー。

    • 取得した会話メモリを受け取るための long_term_memory プレースホルダー。

可観測性

  • トレースの代わりにログを使用するようにコンテンツ監視をリファクタリングしました (ca843e8 [GitHub] (英語) )

    • コンテンツ監視フィルターをログハンドラーに置き換えました

    • 目的をより適切に反映するために、構成プロパティの名前を変更しました。

      • 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 に名前変更しました (ChatClientBuilderPropertiesChatObservationPropertiesImageObservationProperties)

チャットメモリリポジトリモジュールと自動構成の名前変更

コードベース全体にリポジトリサフィックスを追加することで、チャットメモリコンポーネントの命名パターンを標準化しました。この変更は Cassandra、JDBC、Neo4j の実装に影響し、アーティファクト ID、Java パッケージ名、クラス名の明確化に役立ちます。

アーティファクト 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 パッケージ

  • パッケージパスに .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>…​ に変更されました

移行が必要 : - 新しいアーティファクト ID を使用するように Maven/Gradle の依存関係を更新します。- 古いパッケージ名またはクラス名を使用していたインポート、クラス参照、構成を更新します。

メッセージアグリゲーターリファクタリング

変更
  • MessageAggregator クラスは、spring-ai-client-chat モジュールの org.springframework.ai.chat.model パッケージから spring-ai-model モジュールに移動されました。(同じパッケージ名)

  • aggregateChatClientResponse メソッドは MessageAggregator から削除され、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 AI モデルは、新しいチャット生成モデルが利用可能になったため、時代遅れとみなされる古いテキスト生成に基づいていたため削除されました。Watson が Spring AI の将来のバージョンで再び登場することを期待しています。

MoonShot および QianFan

Moonshot と Qianfan は中国国外からアクセスできないため削除されました。これらは Spring AI コミュニティリポジトリに移動されました。

ベクトルストアを削除しました

メモリ管理

メッセージとテンプレート API

追加のクライアント API の変更

パッケージ構造の変更

依存関係

動作の変更

Azure OpenAI

  • クリーンな自動構成を備えた Azure OpenAI 用の Entra ID アイデンティティ管理を追加しました (3dc86d3 [GitHub] (英語) )

一般的なクリーンアップ

1.0.0-M8 へのアップグレード

OpenRewrite レシピを使えば、1.0.0-M8 へのアップグレードプロセスを自動化できます。このレシピは、このバージョンに必要な多くのコード変更を適用できます。レシピと使用方法は Arconia Spring AI 移行 [GitHub] (英語) を参照してください。

重大な変更

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");
        })
    ));

ソリューション

解決策としては、非推奨の tools() メソッドの代わりに toolSpecifications() メソッドを使用することです。

// 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

メモリ管理

クライアント API

メッセージとテンプレート API

モデルの実装

パッケージ構造の変更

依存関係

動作の変更

可観測性

  • トレースの代わりにログを使用するようにコンテンツ監視をリファクタリングしました (ca843e8 [GitHub] (英語) )

    • コンテンツ監視フィルターをログハンドラーに置き換えました

    • 目的をより適切に反映するために、構成プロパティの名前を変更しました。

      • 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 に名前変更しました (ChatClientBuilderPropertiesChatObservationPropertiesImageObservationProperties)

Azure OpenAI

  • クリーンな自動構成を備えた Azure OpenAI 用の Entra ID アイデンティティ管理を追加しました (3dc86d3 [GitHub] (英語) )

一般的なクリーンアップ

1.0.0-M7 へのアップグレード

変更の概要

Spring AI 1.0.0-M7 は、RC1 および GA リリース前の最後のマイルストーンリリースです。アーティファクト ID、パッケージ名、モジュール構造にいくつかの重要な変更が導入されており、最終リリースでも維持されます。

アーティファクト 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 を使用している場合は、これらの変更に対応するためにコードを更新する必要があります。

主な変更点は次のとおりです。

インターフェース名の変更

  • ClientMcpTransport → McpClientTransport

  • ServerMcpTransport → McpServerTransport

  • DefaultMcpSession → McpClientSession または McpServerSession

  • すべての *Registration クラス→ *Specification クラス

サーバー作成の変更

  • ServerMcpTransport の代わりに McpServerTransportProvider を使用する

// 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 経由のクライアントインタラクション

以前はサーバー上で使用可能だったメソッドは、交換オブジェクトを介してアクセスされるようになりました。

// 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 移行ガイド [GitHub] (英語) を参照してください。

モデルの自動構成の有効化 / 無効化

モデルの自動構成を有効 / 無効にするための以前の構成プロパティは削除されました。

  • 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 の両方)、以下のプロパティを使用して、どのプロバイダの自動構成を有効にするかを選択できます。これにより、特定のモデル型に対して他のプロバイダの自動構成が実質的に無効になります。

特定のモデル型に対する自動構成を完全に無効にするには、プロバイダーが 1 つしか存在しない場合でも、対応するプロパティをクラスパス上のどのプロバイダーとも一致しない値 (例: none または disabled) に設定します。

既知のプロバイダー値のリストについては、SpringAIModels [GitHub] (英語) 列挙を参照できます。

  • 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 コード CLI ツールを使用して 1.0.0-M7 へのアップグレードプロセスを自動化できます。

  1. Claude コード CLI ツール (英語) をダウンロード

  2. update-to-m7.txt [GitHub] (英語) ファイルからプロンプトをコピーします

  3. プロンプトを Claude コード CLI に貼り付けます

  4. AI がプロジェクトを分析し、必要な変更を加えます

自動アップグレードプロンプトは現在、アーティファクト ID の変更、パッケージの再配置、モジュール構造の変更に対応していますが、MCP 0.9.0 へのアップグレードに関する自動変更はまだ含まれていません。MCP をご利用の場合は、MCP Java SDK アップグレードセクションのガイダンスに従ってコードを手動で更新する必要があります。

バージョン間での共通の変更点

アーティファクト ID の変更

Spring AI スターターアーティファクトの命名パターンが変更されました。以下のパターンに従って依存関係を更新する必要があります。

  • モデルスターター: spring-ai-{model}-spring-boot-starter → spring-ai-starter-model-{model}

  • ベクトルストアスターター: spring-ai-{store}-store-spring-boot-starter → spring-ai-starter-vector-store-{store}

  • MCP スターター: 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 プロトコルバッファー、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>
ほとんどの場合、これらの自動構成依存関係を明示的に追加する必要はありません。対応するスターター依存関係を使用すると、それらは推移的に含まれます。

パッケージ名の変更

IDE は、新しいパッケージの場所へのリファクタリングを支援する必要があります。

  • KeywordMetadataEnricher および SummaryMetadataEnricher は org.springframework.ai.transformer から org.springframework.ai.chat.transformer に移動しました。

  • ContentMediaContentMedia は org.springframework.ai.model から org.springframework.ai.content に移動しました。

モジュール構造

このプロジェクトでは、モジュールとアーティファクトの構造に大幅な変更が行われました。以前は spring-ai-core にすべての中心的なインターフェースが含まれていましたが、現在はアプリケーションにおける不要な依存関係を削減するため、専用のドメインモジュールに分割されています。

Spring AI Dependencies

spring-ai-commons

他の Spring AI モジュールに依存しないベースモジュール。以下が含まれます: - コアドメインモデル(DocumentTextSplitter) - JSON ユーティリティとリソース処理 - 構造化ログと可観測性のサポート

spring-ai-model

AI 機能の抽象化を提供する: - ChatModelEmbeddingModelImageModel のようなインターフェース - メッセージ型とプロンプトテンプレート - 関数呼び出しフレームワーク(ToolDefinitionToolCallback) - コンテンツフィルタリングと監視のサポート

spring-ai-vector-store

統一されたベクトルデータベース抽象化: - 類似検索のための VectorStore インターフェース - SQL のような表現による高度なフィルタリング - メモリ内使用のための SimpleVectorStore - 埋め込みのバッチ処理サポート

spring-ai-client-chat

高レベルの会話型 AI API: - ChatClient インターフェース - ChatMemory による会話の持続 - OutputConverter によるレスポンス変換 - アドバイザーベースのインターセプト - 同期およびリアクティブストリーミングのサポート

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

検索拡張生成のための包括的なフレームワーク: - RAG パイプラインのモジュラーアーキテクチャ - メインエントリポイントとしての RetrievalAugmentationAdvisor - 構成可能なコンポーネントを備えた関数型プログラミングの原則

依存関係の構造

依存関係の階層は次のように要約できます。

  • spring-ai-commons (財団)

  • spring-ai-model (コモンズに依存する)

  • spring-ai-vector-store および spring-ai-client-chat (どちらもモデルによって異なります)

  • spring-ai-advisors-vector-store および spring-ai-rag (クライアントチャットとベクトルストアの両方に依存する)

  • spring-ai-model-chat-memory-* モジュール (クライアントチャットに依存する)

ToolContext の変更

ToolContext クラスは、明示的および暗黙的なツール解決をサポートするように拡張されました。ツールは以下の方法で指定できます。

  1. 明示的に含まれる : プロンプトで明示的にリクエストされ、モデルの呼び出しに含まれるツール。

  2. 暗黙的に利用可能 : 実行時の動的解決に使用できるツールですが、明示的にリクエストされない限り、モデルへの呼び出しには含まれません。

1.0.0-M7 以降、ツールは、プロンプトで明示的にリクエストされた場合、または呼び出しに明示的に含まれている場合にのみ、モデルの呼び出しに含まれます。

さらに、ToolContext クラスは final クラスとしてマークされ、拡張できなくなりました。このクラスは元々サブクラス化されることを想定していませんでした。ToolContext をインスタンス化する際に必要なコンテキストデータはすべて、Map<String, Object> の形式で追加できます。詳細については、[ ドキュメント ]( docs.spring.io/spring-ai/reference/api/tools.html#_tool_context ) を参照してください。

1.0.0-M6 へのアップグレード

使用インターフェースと DefaultUsage 実装の変更

Usage インターフェースとそのデフォルト実装 DefaultUsage には、次の変更が加えられました。

  1. メソッド名の変更:

    • getGenerationTokens() は getCompletionTokens() になりました

  2. 型の変更:

    • DefaultUsage のすべてのトークンカウントフィールドが 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)
使用方法の詳細については、こちらを参照してください。

JSON Ser/Deser の変更

M6 は generationTokens フィールドの JSON デシリアライゼーションの下位互換性を維持していますが、このフィールドは M7 で削除されます。古いフィールド名を使用している永続化された JSON ドキュメントは、completionTokens を使用するように更新する必要があります。

新しい JSON 形式の例:

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

ツール呼び出しにおける FunctionCallingOptions の使用箇所の変更

各 ChatModel インスタンスは、構築時に、モデルの呼び出しに使用されるデフォルトのツールを構成するために使用できるオプションの ChatOptions または FunctionCallingOptions インスタンスを受け入れます。

1.0.0-M6 以前:

  • デフォルトの FunctionCallingOptions インスタンスの functions() メソッドを介して渡されたツールは、その ChatModel インスタンスからのモデルへの各呼び出しに含まれており、ランタイムオプションによって上書きされている可能性があります。

  • デフォルトの FunctionCallingOptions インスタンスの functionCallbacks() メソッドを介して渡されるツールは、実行時の動的解決 ( ツール解決を参照) でのみ使用可能になり、明示的にリクエストされない限り、モデルへの呼び出しには含まれません。

1.0.0-M6 の開始:

  • functions() メソッドまたはデフォルトの FunctionCallingOptions インスタンスの functionCallbacks() を介して渡されるすべてのツールは、同じ方法で処理されるようになりました。つまり、その ChatModel インスタンスからのモデルへの各呼び出しに含まれ、ランタイムオプションによって上書きされる可能性があります。これにより、モデルへの呼び出しにツールが含まれる方法に一貫性が保たれ、functionCallbacks() と他のすべてのオプションの動作の違いによる混乱が回避されます。

ツールを実行時の動的解決に利用できるようにし、明示的にリクエストされた場合にのみモデルへのチャットリクエストに含める場合は、ツール解決で説明されているいずれかの戦略を使用できます。

1.0.0-M6 では、ツール呼び出しを処理するための新しい API が導入されました。上記のシナリオを除き、すべてのシナリオにおいて古い API との後方互換性が維持されています。古い API は引き続き利用可能ですが、非推奨となり、1.0.0-M7 で削除されます。

非推奨となりた Amazon Bedrock チャットモデルの削除

1.0.0-M6 以降、Spring AI は Spring AI のすべてのチャット会話実装に Amazon、Bedrock の Converse API を使用するようになりました。Amazon、Bedrock のすべてのチャットモデルは、Cohere と Titan の埋め込みモデルを除き、削除されました。

チャットモデルの使用については、Bedrock コンバースのドキュメントを参照してください。

依存関係管理に Spring Boot 3.4.2 を使用するように変更

Spring AI は、依存関係管理に Spring Boot 3.4.2 を使用するようにアップデートされました。Spring Boot 3.4.2 で管理されている依存関係については、こちら [GitHub] (英語) を参照してください。

必要なアクション

  • Spring Boot 3.4.2 にアップグレードする場合は、REST クライアントの設定に必要な変更について、このドキュメントを必ず参照してください。特に、クラスパスに HTTP クライアントライブラリがない場合、以前は SimpleClientHttpRequestFactory が使用されていた場所が JdkClientHttpRequestFactory に置き換えられる可能性があります。SimpleClientHttpRequestFactory を使用するように切り替えるには、spring.http.client.factory=simple を設定する必要があります。

  • 異なるバージョンの Spring Boot (たとえば Spring Boot 3.3.x) を使用しており、依存関係の特定のバージョンが必要な場合は、ビルド構成でそれをオーバーライドできます。

ベクトルストア API の変更

バージョン 1.0.0-M6 では、VectorStore インターフェースの delete メソッドが、Optional<Boolean> を返すのではなく、void 操作になるように変更されました。以前のコードで削除操作の戻り値をチェックしていた場合は、このチェックを削除する必要があります。削除が失敗した場合、この操作は例外をスローするようになり、より直接的なエラー処理が可能になります。

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 実装パッケージは、アーティファクト間での競合を回避するために、一意のパッケージ名に移動されました。たとえば、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 に変更されました。

  • スキーマを初期化できるベクトルストアの initialize-schema プロパティのデフォルト値が、false に設定されました。つまり、アプリケーションの起動時にスキーマが作成される場合、アプリケーションは、サポートされているベクトルストアでスキーマの初期化を明示的にオプトインする必要があります。すべてのベクトルストアがこのプロパティをサポートしているわけではありません。詳細については、対応するベクトルストアのドキュメントを参照してください。現在 initialize-schema プロパティをサポートしていないベクトルストアは次のとおりです。

    1. Hana

    2. Pinecone

    3. Weaviate

  • Bedrock Jurassic 2 では、チャットオプション countPenaltyfrequencyPenaltypresencePenalty の名前が countPenaltyOptionsfrequencyPenaltyOptionspresencePenaltyOptions に変更されました。さらに、チャットオプション stopSequences の型が String[] から List<String> に変更されました。

  • Azure、OpenAI では、チャットオプション frequencyPenalty および presencePenalty の型が、他のすべての実装と一致するように、Double から Float に変更されました。

1.0.0.M1 へのアップグレード

1.0.0 M1 のリリースに向けて、いくつかの重大な変更を加えました。申し訳ありませんが、これは最善の策です。

ChatClient の変更点

大きな変更が行われ、旧 ChatClient の機能が ChatModel に移行しました。新 ChatClient は ChatModel のインスタンスを使用するようになりました。これは、Spring エコシステム内の他のクライアントクラス(RestClientWebClientJdbcClient など)と同様のスタイルでプロンプトを作成・実行するための Fluent API をサポートするためです。Fluent API の詳細については、[JavaDoc] ( ドキュメント ) を参照してください。正式なリファレンスドキュメントは近日公開予定です。

旧 ModelClient を Model に改名し、実装クラスの名前も変更しました。たとえば、ImageClient は ImageModel に変更されました。Model 実装は、Spring AI API と基盤となる AI モデル API 間の変換を行う移植性レイヤーを表しています。

新しいパッケージ model には、あらゆる入出力データ型の組み合わせに対応した AI モデルクライアントの作成をサポートするインターフェースと基本クラスが含まれています。現在、チャットモデルとイメージモデルのパッケージで実装されています。埋め込みパッケージも近日中にこの新しいモデルにアップデートする予定です。

新しい「ポータブルオプション」設計パターン。ModelCall は、様々なチャットベースの AI モデル間で可能な限り高い移植性を提供することを目的としています。共通の生成オプションセットと、モデルプロバイダー固有のオプションがあります。一種の「ダックタイピング」アプローチが採用されています。モデルパッケージ内の ModelOptions は、このクラスの実装がモデルのオプションを提供することを示すマーカーインターフェースです。すべての text → image ImageModel 実装に共通するポータブルオプションを定義するサブインターフェースである ImageOptions を参照してください。そして、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>

To

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

Palm2 モデルに関連する Boot スターター

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

to

<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 日更新

  • promptmessagesmetadata パッケージを org.springframework.ai.chat のサブパッケージに移動する

  • 新しい機能は、テキストからイメージへのクライアントです。クラスは OpenAiImageModel および StabilityAiImageModel です。使用箇所については統合テストを参照してください。ドキュメントは近日公開予定です。

  • 新しいパッケージ model には、あらゆる入出力データ型の組み合わせに対応した AI モデルクライアントの作成をサポートするインターフェースと基本クラスが含まれています。現在、チャットモデルとイメージモデルのパッケージで実装されています。埋め込みパッケージも近日中にこの新しいモデルにアップデートする予定です。

  • 新しい「ポータブルオプション」設計パターン。ModelCall は、様々なチャットベースの AI モデル間で可能な限り高い移植性を提供することを目的としています。共通の生成オプションセットと、モデルプロバイダー固有のオプションがあります。一種の「ダックタイピング」アプローチが採用されています。モデルパッケージ内の ModelOptions は、このクラスの実装がモデルのオプションを提供することを示すマーカーインターフェースです。すべての text → image ImageModel 実装に共通するポータブルオプションを定義するサブインターフェースである ImageOptions を参照してください。そして、StabilityAiImageOptions と OpenAiImageOptions は、各モデルプロバイダー固有のオプションを提供します。すべてのオプションクラスは、Fluent API ビルダーによって作成され、すべてポータブルな 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 プロパティに関する更新されたドキュメントを検索します: 参照: 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 に変更します

アーティファクト ID の名前を変更します

  • transformers-embedding から spring-ai-transformers

Maven モジュールを最上位ディレクトリと embedding-clients サブディレクトリからすべて 1 つの models ディレクトリに移動しました。

2023 年 12 月 1 日

プロジェクトのグループ ID を移行しています。

  • FROMorg.springframework.experimental.ai

  • TOorg.springframework.ai

以下に示すように、アーティファクトは引き続きスナップショットリポジトリでホストされます。

メインの ブランチはバージョン 0.8.0-SNAPSHOT に移行します。1 ~ 2 週間は不安定になります。最新の状態を望まない場合は、0.7.1-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>