チャットモデル 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 リクエストを使用してオーバーライドできるようにする強力な機能です。

chat options flow

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
}

利用可能な実装

ChatModel および StreamingChatModel 実装は、次のモデルプロバイダーに提供されています。

spring ai chat completions clients

チャットモデル API

Spring AI チャットモデル API は、チャット固有の抽象化と実装を提供する Spring AI Generic Model API 上に構築されています。次のクラス図は、Spring AI チャットモデル API の主なクラスとインターフェースを示しています。

spring ai chat api