チャットモデル 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 モデルが処理できるメッセージのカテゴリに対応するさまざまな実装があります。

Spring AI Message API

チャット補完エンドポイントは、会話のロールに基づいてメッセージカテゴリを区別し、MessageType によって効果的にマッピングされます。

たとえば、OpenAI は、systemuserfunction や assistant などの異なる会話ロールのメッセージカテゴリを認識します。

MessageType という用語は特定のメッセージ形式を暗示する可能性がありますが、この文脈では、対話内でメッセージが果たすロールを効果的に指定します。

特定のロールを使用しない AI モデルの場合、UserMessage 実装は標準カテゴリとして機能し、通常はユーザーが生成した問い合わせや指示を表します。実際のアプリケーションと Prompt と Message の関連、特にこれらのロールまたはメッセージカテゴリのコンテキストを理解するには、プロンプトセクションの詳細な説明を参照してください。

チャットオプション

AI モデルに渡すことができるオプションを表します。ChatOptions クラスは ModelOptions のサブクラスであり、AI モデルに渡すことができるいくつかの移植可能なオプションを定義するために使用されます。ChatOptions クラスは次のように定義されます。

public interface ChatOptions extends ModelOptions {

	String getModel();
	Double getFrequencyPenalty();
	Integer getMaxTokens();
	Double getPresencePenalty();
	List<String> getStopSequences();
	Double getTemperature();
	Integer getTopK();
	Double getTopP();
	ChatOptions.Builder<?> mutate();

}

さらに、モデル固有の ChatModel/StreamingChatModel 実装ごとに、AI モデルに渡すことができる独自のオプションを設定できます。例: OpenAI チャット補完モデルには、logitBiasseeduser のような独自のオプションがあります。

Spring AI は、チャットモデルの設定と使用のための高度なシステムを提供します。起動時にデフォルト設定を行うことができ、リクエストごとにこれらの設定を上書きできる柔軟性も備えています。このアプローチにより、開発者はさまざまな AI モデルを容易に操作し、必要に応じてパラメーターを調整できます。これらすべては、Spring AI フレームワークが提供する一貫したインターフェース内で実現されます。

ChatModel.call() / ChatModel/stream() を使用する場合、渡されるプロンプトには、モデルで設定されたオプションよりも完全に優先されるオプションの完全なセットが含まれている必要があります(または、Prompt で null オプションを使用してモデルのデフォルト値を使用します)。

ChatClient の抽象化により、ユーザーが「デルタ」カスタマイザーを提供できる段階的なアプローチが可能になります。

以下のフロー図は、Spring AI がチャットモデルの設定と実行をどのように処理するかを示しています。

chat model conversions
  1. スタートアップ構成 - ChatModel/StreamingChatModel は「スタートアップ」チャットオプションで初期化されます。これらのオプションは ChatModel の初期化中に設定され、デフォルト構成を提供することを目的としています。

  2. ランタイム構成 - 各リクエストに対して、プロンプトにはランタイムチャットオプションを含めることができます。これらは起動オプションを完全に上書きします。

  3. 入力処理 - 「入力の変換」ステップでは、入力命令をネイティブのモデル固有の形式に変換します。

  4. 出力処理 - 「出力の変換」ステップでは、モデルのレスポンスを標準化された 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 サービス間の統合と切り替えが容易になります。

spring ai chat completions clients
利用可能なチャットモデルの詳細な比較については、チャットモデルの比較セクションを参照してください。

チャットモデル API

Spring AI チャットモデル API は、Spring AI Generic Model API を基盤として構築されており、チャットに特化した抽象化と実装を提供します。これにより、クライアントアプリケーションの API の一貫性を維持しながら、さまざまな AI サービス間の統合と切り替えが容易になります。以下のクラス図は、Spring AI チャットモデル API の主要なクラスとインターフェースを示しています。

spring ai chat api