このバージョンはまだ開発中であり、まだ安定しているとは考えられていません。最新のスナップショットバージョンについては、Spring AI 1.1.6 を使用してください。 |
チャットモデル API
Chat Model API は、開発者に AI を活用したチャット補完機能をアプリケーションに統合する機能を提供します。GPT (Generative Pre-trained Transformer) などの事前トレーニング済み言語モデルを活用して、自然言語でのユーザー入力に対して人間のようなレスポンスを生成します。
API は通常、プロンプトまたは部分的な会話を AI モデルに送信することによって機能し、AI モデルはトレーニングデータと自然言語パターンの理解に基づいて会話の完了または継続を生成します。完成したレスポンスはアプリケーションに返され、アプリケーションはそれをユーザーに提示したり、さらなる処理に使用したりできます。
Spring AI Chat Model API は、さまざまな AI モデルと対話するためのシンプルでポータブルなインターフェースになるように設計されており、開発者は最小限のコード変更で異なるモデル間を切り替えることができます。この設計は、Spring のモジュール性と互換性の哲学に沿っています。
また、入力カプセル化用の Prompt や出力処理用の ChatResponse などのコンパニオンクラスの助けを借りて、チャットモデル API は AI モデルとの通信を統合します。リクエストの準備とレスポンスの解析の複雑さを管理し、直接的で簡素化された API 対話を提供します。
利用可能な実装の詳細については利用可能な実装セクションを参照してください。詳細な比較についてはチャットモデルの比較セクションを参照してください。
API の概要
このセクションでは、Spring AI チャットモデル API インターフェースと関連クラスに関するガイドを提供します。
ChatModel
ChatModel [GitHub] (英語) インターフェース定義は次のとおりです。
public interface ChatModel extends Model<Prompt, ChatResponse>, StreamingChatModel {
default String call(String message) {...}
@Override
ChatResponse call(Prompt prompt);
}String パラメーターを持つ call() メソッドは、より高度な Prompt および ChatResponse クラスの複雑さを回避し、初期使用を簡素化します。実際のアプリケーションでは、Prompt インスタンスを取得して ChatResponse を返す call() メソッドを使用する方が一般的です。
StreamingChatModel
StreamingChatModel [GitHub] (英語) インターフェース定義は次のとおりです。
public interface StreamingChatModel extends StreamingModel<Prompt, ChatResponse> {
default Flux<String> stream(String message) {...}
@Override
Flux<ChatResponse> stream(Prompt prompt);
}stream() メソッドは、ChatModel と同様に String または Prompt パラメーターを取りますが、リアクティブ Flux API を使用してレスポンスをストリーミングします。
プロンプト
プロンプト [GitHub] (英語) は、メッセージ [GitHub] (英語) オブジェクトのリストとオプションのモデルリクエストオプションをカプセル化する ModelRequest です。次のリストは、コンストラクターとその他のユーティリティメソッドを除いた、Prompt クラスの切り詰められたバージョンを示しています。
public class Prompt implements ModelRequest<List<Message>> {
private final List<Message> messages;
private ChatOptions modelOptions;
@Override
public ChatOptions getOptions() {...}
@Override
public List<Message> getInstructions() {...}
// constructors and utility methods omitted
}メッセージ
Message インターフェースは、Prompt テキストコンテンツ、メタデータ属性のコレクション、MessageType と呼ばれる分類をカプセル化します。
インターフェースは次のように定義されます。
public interface Content {
String getText();
Map<String, Object> getMetadata();
}
public interface Message extends Content {
MessageType getMessageType();
} マルチモーダルメッセージ型は、Media コンテンツオブジェクトのリストを提供する MediaContent インターフェースも実装します。
public interface MediaContent extends Content {
Collection<Media> getMedia();
}Message インターフェースには、AI モデルが処理できるメッセージのカテゴリに対応するさまざまな実装があります。

チャット補完エンドポイントは、会話のロールに基づいてメッセージカテゴリを区別し、MessageType によって効果的にマッピングされます。
たとえば、OpenAI は、system、user、function や assistant などの異なる会話ロールのメッセージカテゴリを認識します。
MessageType という用語は特定のメッセージ形式を暗示する可能性がありますが、この文脈では、対話内でメッセージが果たすロールを効果的に指定します。
特定のロールを使用しない AI モデルの場合、UserMessage 実装は標準カテゴリとして機能し、通常はユーザーが生成した問い合わせや指示を表します。実際のアプリケーションと Prompt と Message の関連、特にこれらのロールまたはメッセージカテゴリのコンテキストを理解するには、プロンプトセクションの詳細な説明を参照してください。
チャットオプション
AI モデルに渡すことができるオプションを表します。ChatOptions クラスは ModelOptions のサブクラスであり、AI モデルに渡すことができるいくつかの移植可能なオプションを定義するために使用されます。ChatOptions クラスは次のように定義されます。
public interface ChatOptions extends ModelOptions {
String getModel();
Float getFrequencyPenalty();
Integer getMaxTokens();
Float getPresencePenalty();
List<String> getStopSequences();
Float getTemperature();
Integer getTopK();
Float getTopP();
ChatOptions copy();
} さらに、モデル固有の ChatModel/StreamingChatModel 実装ごとに、AI モデルに渡すことができる独自のオプションを設定できます。例: OpenAI チャット補完モデルには、logitBias、seed、user のような独自のオプションがあります。
Spring AI は、チャットモデルの設定と使用のための高度なシステムを提供します。起動時にデフォルト設定を行うことができ、リクエストごとにこれらの設定を上書きできる柔軟性も備えています。このアプローチにより、開発者は Spring AI フレームワークが提供する一貫したインターフェース内で、さまざまな AI モデルを容易に操作し、必要に応じてパラメーターを調整できます。
ChatModel.call() / ChatModel/stream() を使用する場合、渡されるプロンプトには、モデルで設定されたオプションよりも完全に優先されるオプションの完全なセットが含まれている必要があります(または、Prompt で null オプションを使用してモデルのデフォルト値を使用します)。
The ChatClient abstraction allows for an incremental approach where users can provide a "delta" customizer that
Following flow diagram illustrates how Spring AI handles the configuration and execution of Chat Models:

スタートアップ構成 - ChatModel/StreamingChatModel は「スタートアップ」チャットオプションで初期化されます。これらのオプションは ChatModel の初期化中に設定され、デフォルト構成を提供することを目的としています。
ランタイム構成 - For each request, the Prompt can contain a Runtime Chat Options: These fully override the start-up options.
入力処理 - 「入力の変換」ステップでは、入力命令をネイティブのモデル固有の形式に変換します。
出力処理 - 「出力の変換」ステップでは、モデルのレスポンスを標準化された
ChatResponse形式に変換します。
ChatResponse
ChatResponse クラスの構造は次のとおりです。
public class ChatResponse implements ModelResponse<Generation> {
private final ChatResponseMetadata chatResponseMetadata;
private final List<Generation> generations;
@Override
public ChatResponseMetadata getMetadata() {...}
@Override
public List<Generation> getResults() {...}
// other methods omitted
}ChatResponse [GitHub] (英語) クラスは AI モデルの出力を保持します。各 Generation インスタンスには、単一のプロンプトから得られる複数の出力のうちの 1 つが含まれます。
ChatResponse クラスは、AI モデルのレスポンスに関する ChatResponseMetadata メタデータも保持します。
世代
最後に、世代 [GitHub] (英語) クラスは ModelResult から拡張され、モデル出力 (アシスタントメッセージ) と関連メタデータを表します。
public class Generation implements ModelResult<AssistantMessage> {
private final AssistantMessage assistantMessage;
private ChatGenerationMetadata chatGenerationMetadata;
@Override
public AssistantMessage getOutput() {...}
@Override
public ChatGenerationMetadata getMetadata() {...}
// other methods omitted
}利用可能な実装
この図は、さまざまなプロバイダーのさまざまな AI チャットモデルと対話するために使用される統合インターフェース ChatModel と StreamingChatModel を示しています。これにより、クライアントアプリケーションの一貫した API を維持しながら、さまざまな AI サービス間の統合と切り替えが容易になります。

OpenAI チャットの完了 (ストリーミング、マルチモダリティ、関数呼び出しのサポート)
Ollama チャットの完了 (ストリーミング、マルチモダリティ、関数呼び出しのサポート)
Mistral AI チャット補完 (ストリーミングと関数呼び出しのサポート)
Anthropic チャットの完了 (ストリーミングと関数呼び出しのサポート)
| 利用可能なチャットモデルの詳細な比較については、チャットモデルの比較セクションを参照してください。 |
