チャットモデル 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> {

	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 getContent();

	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();
	Float getFrequencyPenalty();
	Integer getMaxTokens();
	Float getPresencePenalty();
	List<String> getStopSequences();
	Float getTemperature();
	Integer getTopK();
	Float getTopP();
	ChatOptions copy();

}

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

これは、開発者がアプリケーションの起動時にモデル固有のオプションを使用し、実行時に Prompt リクエストを使用してオーバーライドできるようにする強力な機能です。

Spring AI は、チャットモデルの構成と使用のための高度なシステムを提供します。起動時にデフォルトの構成を設定できるだけでなく、リクエストごとにこれらの設定をオーバーライドする柔軟性も提供します。このアプローチにより、開発者はさまざまな AI モデルを簡単に操作し、必要に応じてパラメーターを調整できます。これらはすべて、Spring AI フレームワークによって提供される一貫したインターフェース内で行われます。

次のフロー図は、Spring AI が起動オプションと実行オプションを組み合わせてチャットモデルの構成と実行を処理する方法を示しています。

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

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

  3. オプションのマージプロセス - 「オプションのマージ」ステップでは、起動オプションと実行時オプションを結合します。実行時オプションが指定されている場合は、起動オプションよりも優先されます。

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

  5. 出力処理 - 「出力の変換」ステップでは、モデルのレスポンスを標準化された 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