チャットモデル 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
リクエストを使用してオーバーライドできるようにする強力な機能です。
Spring AI は、チャットモデルの構成と使用のための高度なシステムを提供します。起動時にデフォルトの構成を設定できるだけでなく、リクエストごとにこれらの設定をオーバーライドする柔軟性も提供します。このアプローチにより、開発者はさまざまな AI モデルを簡単に操作し、必要に応じてパラメーターを調整できます。これらはすべて、Spring AI フレームワークによって提供される一貫したインターフェース内で行われます。
次のフロー図は、Spring AI が起動オプションと実行オプションを組み合わせてチャットモデルの構成と実行を処理する方法を示しています。
スタートアップ構成 - ChatModel/StreamingChatModel は「スタートアップ」チャットオプションで初期化されます。これらのオプションは ChatModel の初期化中に設定され、デフォルト構成を提供することを目的としています。
ランタイム構成 - 各リクエストに対して、プロンプトにはランタイムチャットオプションを含めることができます。これにより、起動オプションを上書きできます。
オプションのマージプロセス - 「オプションのマージ」ステップでは、起動オプションと実行時オプションを結合します。実行時オプションが指定されている場合は、起動オプションよりも優先されます。
入力処理 - 「入力の変換」ステップでは、入力命令をネイティブのモデル固有の形式に変換します。
出力処理 - 「出力の変換」ステップでは、モデルのレスポンスを標準化された
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 チャットの完了 (ストリーミング、マルチモダリティ、関数呼び出しのサポート)
Microsoft Azure Open AI チャットの完了 (ストリーミングと関数呼び出しのサポート)
Ollama チャットの完了 (ストリーミング、マルチモダリティ、関数呼び出しのサポート)
Hugging Face チャットの完了 (ストリーミングサポートなし)
Google Vertex AI Gemini チャット補完 (ストリーミング、マルチモダリティ、関数呼び出しのサポート)
Mistral AI チャット補完 (ストリーミングと関数呼び出しのサポート)
Anthropic チャットの完了 (ストリーミングと関数呼び出しのサポート)
利用可能なチャットモデルの詳細な比較については、チャットモデルの比較セクションを参照してください。 |