チャットモデル 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 モデルが処理できるメッセージのカテゴリに対応するさまざまな実装があります。
チャット補完エンドポイントは、会話のロールに基づいてメッセージカテゴリを区別し、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
のような独自のオプションがあります。
これは、開発者がアプリケーションの起動時にモデル固有のオプションを使用し、実行時に Prompt
リクエストを使用してオーバーライドできるようにする強力な機能です。
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
実装は、次のモデルプロバイダーに提供されています。
OpenAI チャットの補完 (ストリーミング、マルチモダリティ、関数呼び出しのサポート)
Microsoft Azure Open AI チャットの補完 (ストリーミングと関数呼び出しのサポート)
Ollama チャットの補完 (ストリーミング、マルチモダリティ、関数呼び出しのサポート)
Hugging Face チャットの補完 (ストリーミングサポートなし)
Google Vertex AI PaLM2 チャットの補完 (ストリーミングサポートなし)
Google Vertex AI Gemini チャット補完 (ストリーミング、マルチモダリティ、関数呼び出しのサポート)
Mistral AI チャット補完 (ストリーミングと関数呼び出しのサポート)
Anthropic チャットの補完 (ストリーミングと関数呼び出しのサポート)