Mistral AI チャット
Spring AI は、Mistral AI のさまざまな AI 言語モデルをサポートしています。Mistral AI 言語モデルと対話し、Mistral モデルに基づいて多言語会話アシスタントを作成できます。
Mistral AI は、OpenAI API 互換のエンドポイントも提供します。Spring AI OpenAI 統合を使用して Mistral エンドポイントと通信する方法については、OpenAI API 互換性セクションを確認してください。 |
前提条件
Mistral AI 言語モデルにアクセスするには、Mistral AI で API を作成する必要があります。Mistral AI 登録ページ (英語) でアカウントを作成し、API キーページ (英語) でトークンを生成します。Spring AI プロジェクトは、console.mistral.ai から取得した API Key
の値に設定する必要がある spring.ai.mistralai.api-key
という構成プロパティを定義します。環境変数をエクスポートすることは、その構成プロパティを設定する 1 つの方法です。
export SPRING_AI_MISTRALAI_API_KEY=<INSERT KEY HERE>
自動構成
Spring AI は、Mistral AI チャットクライアント用の Spring Boot 自動構成を提供します。これを有効にするには、プロジェクトの Maven pom.xml
ファイルに次の依存関係を追加します。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mistral-ai-spring-boot-starter</artifactId>
</dependency>
または、Gradle build.gradle
ビルドファイルに保存します。
dependencies {
implementation 'org.springframework.ai:spring-ai-mistral-ai-spring-boot-starter'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。 |
チャットのプロパティ
再試行プロパティ
プレフィックス spring.ai.retry
は、Mistral AI チャットモデルの再試行メカニズムを構成できるプロパティプレフィックスとして使用されます。
プロパティ | 説明 | デフォルト |
---|---|---|
spring.ai.retry.max-attempts | 再試行の最大回数。 | 10 |
spring.ai.retry.backoff.initial-interval | 指数関数的バックオフポリシーの初期スリープ期間。 | 2 秒 |
spring.ai.retry.backoff.multiplier | バックオフ間隔の乗数。 | 5 |
spring.ai.retry.backoff.max-interval | 最大バックオフ期間。 | 3 分 |
spring.ai.retry.on-client-errors | false の場合、NonTransientAiException をスローし、 | false |
spring.ai.retry.exclude-on-http-codes | 再試行をトリガーすべきではない HTTP ステータスコードのリスト (NonTransientAiException をスローするなど)。 | 空 |
spring.ai.retry.on-http-codes | 再試行をトリガーする必要がある HTTP ステータスコードのリスト (例: TransientAiException をスローする)。 | 空 |
接続プロパティ
接頭辞 spring.ai.mistralai
は、OpenAI への接続を可能にするプロパティ接頭辞として使用されます。
プロパティ | 説明 | デフォルト |
---|---|---|
spring.ai.mistralai.base-url | 接続先の URL | |
spring.ai.mistralai.api-key | API キー | - |
プロパティの構成
プレフィックス spring.ai.mistralai.chat
は、Mistral AI のチャットモデルの実装を構成できるプロパティプレフィックスです。
プロパティ | 説明 | デフォルト |
---|---|---|
spring.ai.mistralai.chat.enabled | Mistral AI チャットモデルを有効にします。 | true |
spring.ai.mistralai.chat.base-url | チャット固有の URL を提供するための | - |
spring.ai.mistralai.chat.api-key | チャット固有の API キーを提供するための | - |
spring.ai.mistralai.chat.options.model | これは使用する Mistral AI チャットモデルです |
|
spring.ai.mistralai.chat.options.temperature | 生成される補完の明らかな創造性を制御するために使用するサンプリング温度。値が高いほど出力はよりランダムになり、値が低いほど結果はより集中的かつ決定論的になります。これら 2 つの設定の相互作用を予測することは難しいため、同じ補完リクエストに対して | 0.8 |
spring.ai.mistralai.chat.options.maxTokens | チャット補完で生成するトークンの最大数。入力トークンと生成されたトークンの合計の長さは、モデルのコンテキストの長さによって制限されます。 | - |
spring.ai.mistralai.chat.options.safePrompt | すべての会話の前にセキュリティプロンプトを挿入するかどうかを示します。 | false |
spring.ai.mistralai.chat.options.randomSeed | この機能はベータ版です。指定した場合、システムは、同じシードとパラメーターを使用した繰り返しリクエストが同じ結果を返すように、決定論的にサンプリングするために最善の努力をします。 | - |
spring.ai.mistralai.chat.options.stop | このトークンが検出された場合は生成を停止します。または、配列を提供するときにこれらのトークンの 1 つが検出された場合。 | - |
spring.ai.mistralai.chat.options.topP | 温度によるサンプリングの代替として、核サンプリングと呼ばれる方法があります。この方法では、モデルは top_p 確率質量を持つトークンの結果を考慮します。つまり、0.1 は、上位 10% の確率質量を構成するトークンのみが考慮されることを意味します。通常は、これか | - |
spring.ai.mistralai.chat.options.responseFormat | モデルが出力する必要がある形式を指定するオブジェクト。 | - |
spring.ai.mistralai.chat.options.tools | モデルが呼び出す可能性のあるツールのリスト。現在、ツールとしては関数のみがサポートされています。これを使用して、モデルが JSON 入力を生成する可能性のある関数のリストを提供します。 | - |
spring.ai.mistralai.chat.options.toolChoice | モデルによって呼び出される関数 (ある場合) を制御します。 | - |
spring.ai.mistralai.chat.options.functions | 単一のプロンプトリクエストで関数呼び出しを有効にするために、名前で識別される関数のリスト。これらの名前を持つ関数は、functionCallbacks レジストリに存在する必要があります。 | - |
spring.ai.mistralai.chat.options.functionCallbacks | ChatModel に登録するための Mistral AI ツール関数コールバック。 | - |
spring.ai.mistralai.chat.options.proxy-tool-calls | true の場合、Spring AI は関数呼び出しを内部で処理せず、クライアントにプロキシします。関数呼び出しを処理し、適切な関数にディスパッチして、結果を返すのはクライアントの責任です。false (デフォルト) の場合、Spring AI は関数呼び出しを内部で処理します。関数呼び出しをサポートするチャットモデルにのみ適用されます。 | false |
ChatModel および EmbeddingModel 実装の共通の spring.ai.mistralai.base-url および spring.ai.mistralai.api-key をオーバーライドできます。spring.ai.mistralai.chat.base-url および spring.ai.mistralai.chat.api-key プロパティが設定されている場合は、共通のプロパティよりも優先されます。これは、異なるモデルや異なるモデルエンドポイントに異なる Mistral AI アカウントを使用する場合に便利です。 |
spring.ai.mistralai.chat.options で始まるすべてのプロパティは、リクエスト固有のランタイムオプションを Prompt 呼び出しに追加することによって実行時にオーバーライドできます。 |
ランタイムオプション
MistralAiChatOptions.java [GitHub] (英語) は、使用するモデル、温度、周波数ペナルティなどのモデル構成を提供します。
起動時に、MistralAiChatModel(api, options)
コンストラクターまたは spring.ai.mistralai.chat.options.*
プロパティを使用してデフォルトのオプションを構成できます。
実行時に、Prompt
呼び出しに新しいリクエスト固有のオプションを追加することで、デフォルトのオプションをオーバーライドできます。例: 特定のリクエストのデフォルトのモデルと温度をオーバーライドするには、次のようにします。
ChatResponse response = chatModel.call(
new Prompt(
"Generate the names of 5 famous pirates.",
MistralAiChatOptions.builder()
.model(MistralAiApi.ChatModel.LARGE.getValue())
.temperature(0.5)
.build()
));
モデル固有の MistralAiChatOptions [GitHub] (英語) に加えて、ChatOptionsBuilder#builder() [GitHub] (英語) で作成されたポータブル ChatOptions [GitHub] (英語) インスタンスを使用することもできます。 |
関数呼び出し
MistralAiChatModel
にカスタム Java 関数を登録し、Mistral AI モデルに、登録された関数の 1 つまたは複数を呼び出すための引数を含む JSON オブジェクトをインテリジェントに出力させることができます。これは、LLM 機能を外部ツールや API に接続するための強力な手法です。Mistral AI 関数呼び出しの詳細については、こちらを参照してください。
マルチモーダル
マルチモダリティとは、テキスト、イメージ、音声、その他のデータ形式など、さまざまなソースからの情報を同時に理解して処理するモデルの機能を指します。Mistral AI は、テキストとビジョンのモダリティをサポートしています。
Vision
ビジョンマルチモーダルサポートを提供する Mistral AI モデルには、pixtral-large-latest
が含まれます。詳細については、Vision (英語) ガイドを参照してください。
Mistral AI ユーザーメッセージ API (英語) は、メッセージに base64 でエンコードされたイメージまたはイメージ URL のリストを組み込むことができます。Spring AI のメッセージ [GitHub] (英語) インターフェースは、メディア [GitHub] (英語) 型を導入することで、マルチモーダル AI モデルをサポートします。この型には、メッセージ内のメディア添付ファイルに関するデータと詳細が含まれており、Spring の org.springframework.util.MimeType
と、生のメディアデータ用の org.springframework.core.io.Resource
が使用されます。
以下は、MistralAiChatModelIT.java
から抜粋した、ユーザーテキストとイメージの融合を示すコード例です。
var imageResource = new ClassPathResource("/multimodal.test.png");
var userMessage = new UserMessage("Explain what do you see on this picture?",
new Media(MimeTypeUtils.IMAGE_PNG, this.imageResource));
ChatResponse response = chatModel.call(new Prompt(this.userMessage,
ChatOptions.builder().model(MistralAiApi.ChatModel.PIXTRAL_LARGE.getValue()).build()));
または同等のイメージ URL:
var userMessage = new UserMessage("Explain what do you see on this picture?",
new Media(MimeTypeUtils.IMAGE_PNG,
"https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png"));
ChatResponse response = chatModel.call(new Prompt(this.userMessage,
ChatOptions.builder().model(MistralAiApi.ChatModel.PIXTRAL_LARGE.getValue()).build()));
複数のイメージを渡すこともできます。 |
この例では、multimodal.test.png
イメージを入力として受け取るモデルを示します。
「この写真に何が写っているか説明してください」というテキストメッセージとともに、次のようなレスポンスが生成されます。
This is an image of a fruit bowl with a simple design. The bowl is made of metal with curved wire edges that create an open structure, allowing the fruit to be visible from all angles. Inside the bowl, there are two yellow bananas resting on top of what appears to be a red apple. The bananas are slightly overripe, as indicated by the brown spots on their peels. The bowl has a metal ring at the top, likely to serve as a handle for carrying. The bowl is placed on a flat surface with a neutral-colored background that provides a clear view of the fruit inside.
OpenAI API 互換性
Mistral は OpenAI API と互換性があり、Spring AI OpenAI クライアントを使用して Mistrial と通信できます。そのためには、OpenAI ベース URL を Mistral AI プラットフォーム: spring.ai.openai.chat.base-url=https://api.mistral.ai
に設定し、Mistral モデル: spring.ai.openai.chat.options.model=mistral-small-latest
を選択して、Mistral AI API キー: spring.ai.openai.chat.api-key=<YOUR MISTRAL API KEY
を設定する必要があります。
Spring AI OpenAI ではなく Mistral を使用する例については、MistralWithOpenAiChatModelIT.java [GitHub] (英語) テストを確認してください。
サンプルコントローラー (自動構成)
新しい Spring Boot プロジェクトを作成し、spring-ai-mistral-ai-spring-boot-starter
を pom (または gradle) の依存関係に追加します。
src/main/resources
ディレクトリに application.properties
ファイルを追加して、Mistral AI チャットモデルを有効にして構成します。
spring.ai.mistralai.api-key=YOUR_API_KEY
spring.ai.mistralai.chat.options.model=mistral-small
spring.ai.mistralai.chat.options.temperature=0.7
api-key を Mistral AI 資格情報に置き換えます。 |
これにより、クラスに挿入できる MistralAiChatModel
実装が作成されます。以下は、テキスト生成にチャットモデルを使用する単純な @RestController
クラスの例です。
@RestController
public class ChatController {
private final MistralAiChatModel chatModel;
@Autowired
public ChatController(MistralAiChatModel chatModel) {
this.chatModel = chatModel;
}
@GetMapping("/ai/generate")
public Map<String,String> generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
return Map.of("generation", this.chatModel.call(message));
}
@GetMapping("/ai/generateStream")
public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
var prompt = new Prompt(new UserMessage(message));
return this.chatModel.stream(prompt);
}
}
手動構成
MistralAiChatModel [GitHub] (英語) は ChatModel
と StreamingChatModel
を実装し、低レベル MistralAiApi クライアントを使用して Mistral AI サービスに接続します。
spring-ai-mistral-ai
依存関係をプロジェクトの Maven pom.xml
ファイルに追加します。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mistral-ai</artifactId>
</dependency>
または、Gradle build.gradle
ビルドファイルに保存します。
dependencies {
implementation 'org.springframework.ai:spring-ai-mistral-ai'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。 |
次に、MistralAiChatModel
を作成し、テキスト生成に使用します。
var mistralAiApi = new MistralAiApi(System.getenv("MISTRAL_AI_API_KEY"));
var chatModel = new MistralAiChatModel(this.mistralAiApi, MistralAiChatOptions.builder()
.model(MistralAiApi.ChatModel.LARGE.getValue())
.temperature(0.4)
.maxTokens(200)
.build());
ChatResponse response = this.chatModel.call(
new Prompt("Generate the names of 5 famous pirates."));
// Or with streaming responses
Flux<ChatResponse> response = this.chatModel.stream(
new Prompt("Generate the names of 5 famous pirates."));
MistralAiChatOptions
はチャットリクエストの構成情報を提供します。MistralAiChatOptions.Builder
は流れるようなオプションビルダーです。
低レベル MistralAiApi クライアント
MistralAiApi [GitHub] (英語) が提供するのは、Mistral AI API (英語) 用の軽量 Java クライアントです。
以下は、API をプログラムで使用する方法を示す簡単なスニペットです。
MistralAiApi mistralAiApi = new MistralAiApi(System.getenv("MISTRAL_AI_API_KEY"));
ChatCompletionMessage chatCompletionMessage =
new ChatCompletionMessage("Hello world", Role.USER);
// Sync request
ResponseEntity<ChatCompletion> response = this.mistralAiApi.chatCompletionEntity(
new ChatCompletionRequest(List.of(this.chatCompletionMessage), MistralAiApi.ChatModel.LARGE.getValue(), 0.8, false));
// Streaming request
Flux<ChatCompletionChunk> streamResponse = this.mistralAiApi.chatCompletionStream(
new ChatCompletionRequest(List.of(this.chatCompletionMessage), MistralAiApi.ChatModel.LARGE.getValue(), 0.8, true));
詳細については、MistralAiApi.java [GitHub] (英語) の JavaDoc を参照してください。
MistralAiApi サンプル
MistralAiApiIT.java [GitHub] (英語) テストは、軽量ライブラリの使用方法の一般的な例をいくつか提供します。
PaymentStatusFunctionCallingIT.java [GitHub] (英語) テストは、低レベル API を使用してツール関数を呼び出す方法を示します。Mistral AI 関数呼び出し (英語) チュートリアルに基づいています。