重要
この記事で "(プレビュー)" と付記されている項目は、現在、パブリック プレビュー段階です。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳細については、「 Microsoft Azure プレビューの追加使用条件」を参照してください。
この記事では、Mistral-7B チャット モデルおよび Mistral Nemo チャット モデルとその使用方法について説明します。 Mistral AI では、次の 2 つのカテゴリのモデルを提供しています。
- Premium モデル: これらには 、Mistral Large、Mistral Small、Mistral-OCR-2503、Mistral Medium 3 (25.05)、Ministral 3B モデル が含まれており、従量課金制のサーバーレス API として利用できます。
- オープン モデル: これには 、Codestral と Mistral Nemo (サーバーレス API デプロイとして利用可能)、Mixtral-8x7B-Instruct-v01、Mixtral-8x7B-v01、Mistral-7B-Instruct-v01、Mistral-7B-v01 (セルフホステッドマネージド エンドポイントでダウンロードして実行できる) が含まれます。
重要
プレビュー段階のモデルには、モデル カタログ内のモデル カードで "プレビュー" のマークが付けられます。
Mistral-7B チャット モデルと Mistral Nemo チャット モデル
Mistral-7B チャット モデルと Mistral Nemo チャット モデルには、次のようなモデルが含まれます。
Mistral-7B-Instruct 大規模言語モデル (LLM) は、Mistral-7B の手順と微調整されたバージョンであり、次のアーキテクチャを含むトランスフォーマー モデルです。
- グループ化されたクエリ
- スライディング ウィンドウの注意
- バイト フォールバック BPE トークナイザー
次のモデルを使用できます。
ヒント
さらに、MistralAI は、モデルの特定の機能で使用するためにカスタマイズされた API の使用をサポートしています。 モデル プロバイダー固有の API を使用するには、MistralAI ドキュメントを確認するか、推論の例のセクションでコード例を参照してください。
[前提条件]
Azure AI Foundry で Mistral-7B と Mixtral チャット モデルを使用するには、次の前提条件を満たす必要があります。
モデル デプロイ
セルフホステッド マネージド コンピューティングへのデプロイ
Mistral-7B チャット モデルと Mixtral チャット モデルは、Microsoft のセルフホステッド マネージド推論ソリューションにデプロイできます。これにより、モデルの提供方法に関するすべての詳細をカスタマイズおよび制御できます。
セルフホステッド マネージド コンピューティングにデプロイするには、サブスクリプションに十分なクォータが必要です。 十分なクォータを使用できない場合は、「共有クォータを使用するオプションを使用します。このエンドポイントは 168 時間以内に削除されることを確認します」オプションを選択することで、一時的なクォータ アクセスを使用できます。
インストールされている推論パッケージ
Python で azure-ai-inference
パッケージを使用して、このモデルから予測を実行できます。 このパッケージをインストールするには、次の前提条件を満たす必要があります。
- Python 3.8 以降 (PIP を含む) がインストールされている。
- エンドポイント URL。 クライアント ライブラリを構築するには、エンドポイント URL を渡す必要があります。 エンドポイント URL の形式は
https://your-host-name.your-azure-region.inference.ai.azure.com
です。ここで、your-host-name
は一意のモデル デプロイ ホスト名、your-azure-region
はモデルがデプロイされている Azure リージョン (eastus2 など) です。 - モデル デプロイと認証の設定に応じて、サービスに対する認証キーまたは Microsoft Entra ID 資格情報が必要です。 キーは 32 文字の文字列です。
これらの前提条件が満たされたら、次のコマンドを使用して Azure AI 推論パッケージをインストールします。
pip install azure-ai-inference
Azure AI 推論パッケージとリファレンスに関する詳細をご覧ください。
チャット補完を使用する
このセクションでは、Azure AI モデル推論 API をチャットのチャット補完モデルで使用します。
ヒント
モデル推論 API を使用すると、Mistral-7B や Mixtral チャット モデルなど、同じコードと構造を使用して、Azure AI Foundry ポータルにデプロイされたほとんどのモデルと対話できます。
モデルを実行するクライアントを作成する
まず、モデルを実行するクライアントを作成します。 次のコードでは、環境変数に格納されているエンドポイント URL とキーを使用しています。
import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential
client = ChatCompletionsClient(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=AzureKeyCredential(os.environ["AZURE_INFERENCE_CREDENTIAL"]),
)
Microsoft Entra ID をサポートするセルフホステッド オンライン エンドポイントにモデルをデプロイする場合、次のコード スニペットを使用してクライアントを作成できます。
import os
from azure.ai.inference import ChatCompletionsClient
from azure.identity import DefaultAzureCredential
client = ChatCompletionsClient(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=DefaultAzureCredential(),
)
モデルの機能を取得する
/info
ルートは、エンドポイントにデプロイされたモデルに関する情報を返します。 次のメソッドを呼び出してモデルの情報を返します。
model_info = client.get_model_info()
応答は次のとおりです。
print("Model name:", model_info.model_name)
print("Model type:", model_info.model_type)
print("Model provider name:", model_info.model_provider_name)
Model name: mistralai-Mistral-7B-Instruct-v01
Model type: chat-completions
Model provider name: MistralAI
チャット入力候補要求を作成する
次の例に、モデルに対する基本的なチャット入力候補要求を作成する方法を示します。
from azure.ai.inference.models import SystemMessage, UserMessage
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
)
注
mistralai-Mistral-7B-Instruct-v01、mistralai-Mistral-7B-Instruct-v02、mistralai-Mixtral-8x22B-Instruct-v0-1 はシステム メッセージ (role="system"
) をサポートしていません。 モデル推論 API を使用すると、システム メッセージは、使用可能な最も近い機能であるユーザー メッセージに変換されます。 この翻訳は便宜上提供されているものですが、モデルがシステム メッセージの手順に信頼性の高い正しいレベルで従っているかどうかを確認することが重要です。
応答は次のとおりです。モデルの使用状況の統計情報が表示されます。
print("Response:", response.choices[0].message.content)
print("Model:", response.model)
print("Usage:")
print("\tPrompt tokens:", response.usage.prompt_tokens)
print("\tTotal tokens:", response.usage.total_tokens)
print("\tCompletion tokens:", response.usage.completion_tokens)
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: mistralai-Mistral-7B-Instruct-v01
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
応答の usage
セクションを調べて、プロンプトに使用されたトークンの数、生成されたトークンの合計数、応答生成に使用されたトークンの数を確認します。
コンテンツのストリーミング
既定では、入力候補 API は、生成されたコンテンツ全体を 1 つの応答で返します。 長い入力候補を生成する場合、応答が得られるまでに数秒かかることがあります。
コンテンツをストリーミングして、コンテンツが生成されるにつれ返されるようにできます。 コンテンツをストリーミングすると、コンテンツが使用可能になったときに入力候補の処理を開始できます。 このモードは、データのみのサーバー送信イベントとして応答をストリーム バックするオブジェクトを返します。 メッセージ フィールドではなく、デルタ フィールドからチャンクを抽出します。
result = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
temperature=0,
top_p=1,
max_tokens=2048,
stream=True,
)
生成結果をストリーミングするには、モデルを呼び出す際にstream=True
を設定します。
出力を視覚化するには、ストリームを出力するヘルパー関数を定義します。
def print_stream(result):
"""
Prints the chat completion with streaming.
"""
import time
for update in result:
if update.choices:
print(update.choices[0].delta.content, end="")
ストリーミングでコンテンツがどのように生成されるかを視覚化できます。
print_stream(result)
推論クライアントでサポートされているその他のパラメーターを確認する
推論クライアントで指定できるその他のパラメーターを確認します。 サポートされているすべてのパラメーターとそれに対応するドキュメントの完全な一覧については、「 モデル推論 API リファレンス」を参照してください。
from azure.ai.inference.models import ChatCompletionsResponseFormatText
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
presence_penalty=0.1,
frequency_penalty=0.8,
max_tokens=2048,
stop=["<|endoftext|>"],
temperature=0,
top_p=1,
response_format={ "type": ChatCompletionsResponseFormatText() },
)
警告
Mistral モデルは、JSON 出力フォーマット (response_format = { "type": "json_object" }
) をサポートしていません。 モデルに JSON 出力を生成するよう指示できます。 ただし、そうした出力が有効な JSON であるとは限りません。
サポートされているパラメーターの一覧にないパラメーターを渡す場合は、追加のパラメーターを使用して、基になるモデルに渡すことができます。 「モデルに追加のパラメーターを渡す」を参照してください。
モデルに追加のパラメーターを渡す
モデル推論 API を使用すると、モデルに追加のパラメーターを渡すことができます。 次のコード例に、モデルに追加のパラメーター logprobs
を渡す方法を示します。
モデル推論 API に追加のパラメーターを渡す前に、モデルでこれらの追加パラメーターがサポートされていることを確認してください。 基になるモデルに要求を行うと、ヘッダー extra-parameters
が値 pass-through
でモデルに渡されます。 この値は、追加のパラメーターをモデルに渡すようエンドポイントに指示します。 モデルで追加のパラメーターを使用しても、モデルで実際に処理できるとは限りません。 モデルのドキュメントを参照して、サポートされている追加パラメーターを確認してください。
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
model_extras={
"logprobs": True
}
)
Mistral-7B and Mixtral チャット モデルには、次の追加パラメーターを渡すことができます。
名前 | 説明 | タイプ |
---|---|---|
logit_bias |
トークン (トークナイザーのトークン ID で指定) を関連付けられたバイアス値 (-100 から 100) にマップする JSON オブジェクトを受け入れます。 数学的には、サンプリングの前にモデルによって生成されたロジットにバイアスが追加されます。 正確な効果はモデルごとに異なりますが、-1 から 1 の値では選択の可能性が低下または増加し、-100 や 100 などの値では、関連するトークンの選択が禁止されるか、または排他的になります。 | float |
logprobs |
出力トークンのログ確率を返すかどうかを指定します。 true に設定すると、message の content に含まれる各出力トークンのログ確率が返されます。 |
int |
top_logprobs |
0 から 20 までの整数値を指定します。これは、各トークンの位置において、最も出現確率の高いトークンをいくつ返すかを表します。各トークンには、それぞれ関連するログ確率が付与されます。 このパラメーターを使う場合、logprobs は true に設定する必要があります。 |
float |
n |
入力メッセージごとに生成するチャット補完の選択肢の数。 選択肢全体で生成されたトークンの数に基づいて課金されます。 | int |
Mistral-7B チャット モデルと Mistral Nemo チャット モデル
Mistral-7B チャット モデルと Mistral Nemo チャット モデルには、次のようなモデルが含まれます。
Mistral-7B-Instruct 大規模言語モデル (LLM) は、Mistral-7B の手順と微調整されたバージョンであり、次のアーキテクチャを含むトランスフォーマー モデルです。
- グループ化されたクエリ
- スライディング ウィンドウの注意
- バイト フォールバック BPE トークナイザー
次のモデルを使用できます。
ヒント
さらに、MistralAI は、モデルの特定の機能で使用するためにカスタマイズされた API の使用をサポートしています。 モデル プロバイダー固有の API を使用するには、MistralAI ドキュメントを確認するか、推論の例のセクションでコード例を参照してください。
[前提条件]
Azure AI Foundry で Mistral-7B と Mixtral チャット モデルを使用するには、次の前提条件を満たす必要があります。
モデル デプロイ
セルフホステッド マネージド コンピューティングへのデプロイ
Mistral-7B チャット モデルと Mixtral チャット モデルは、Microsoft のセルフホステッド マネージド推論ソリューションにデプロイできます。これにより、モデルの提供方法に関するすべての詳細をカスタマイズおよび制御できます。
セルフホステッド マネージド コンピューティングにデプロイするには、サブスクリプションに十分なクォータが必要です。 十分なクォータを使用できない場合は、「共有クォータを使用するオプションを使用します。このエンドポイントは 168 時間以内に削除されることを確認します」オプションを選択することで、一時的なクォータ アクセスを使用できます。
インストールされている推論パッケージ
npm
から @azure-rest/ai-inference
パッケージを使用して、このモデルから予測を実行できます。 このパッケージをインストールするには、次の前提条件を満たす必要があります。
Node.js
の LTS バージョン (npm
を含む)。- エンドポイント URL。 クライアント ライブラリを構築するには、エンドポイント URL を渡す必要があります。 エンドポイント URL の形式は
https://your-host-name.your-azure-region.inference.ai.azure.com
です。ここで、your-host-name
は一意のモデル デプロイ ホスト名、your-azure-region
はモデルがデプロイされている Azure リージョン (eastus2 など) です。 - モデル デプロイと認証の設定に応じて、サービスに対する認証キーまたは Microsoft Entra ID 資格情報が必要です。 キーは 32 文字の文字列です。
これらの前提条件が満たされたら、次のコマンドを使用して JavaScript 用 Azure 推論ライブラリをインストールします。
npm install @azure-rest/ai-inference
チャット補完を使用する
このセクションでは、Azure AI モデル推論 API をチャットのチャット補完モデルで使用します。
ヒント
モデル推論 API を使用すると、Mistral-7B や Mixtral チャット モデルなど、同じコードと構造を使用して、Azure AI Foundry ポータルにデプロイされたほとんどのモデルと対話できます。
モデルを実行するクライアントを作成する
まず、モデルを実行するクライアントを作成します。 次のコードでは、環境変数に格納されているエンドポイント URL とキーを使用しています。
import ModelClient from "@azure-rest/ai-inference";
import { isUnexpected } from "@azure-rest/ai-inference";
import { AzureKeyCredential } from "@azure/core-auth";
const client = new ModelClient(
process.env.AZURE_INFERENCE_ENDPOINT,
new AzureKeyCredential(process.env.AZURE_INFERENCE_CREDENTIAL)
);
Microsoft Entra ID をサポートするセルフホステッド オンライン エンドポイントにモデルをデプロイする場合、次のコード スニペットを使用してクライアントを作成できます。
import ModelClient from "@azure-rest/ai-inference";
import { isUnexpected } from "@azure-rest/ai-inference";
import { DefaultAzureCredential } from "@azure/identity";
const client = new ModelClient(
process.env.AZURE_INFERENCE_ENDPOINT,
new DefaultAzureCredential()
);
モデルの機能を取得する
/info
ルートは、エンドポイントにデプロイされたモデルに関する情報を返します。 次のメソッドを呼び出してモデルの情報を返します。
var model_info = await client.path("/info").get()
応答は次のとおりです。
console.log("Model name: ", model_info.body.model_name)
console.log("Model type: ", model_info.body.model_type)
console.log("Model provider name: ", model_info.body.model_provider_name)
Model name: mistralai-Mistral-7B-Instruct-v01
Model type: chat-completions
Model provider name: MistralAI
チャット入力候補要求を作成する
次の例に、モデルに対する基本的なチャット入力候補要求を作成する方法を示します。
var messages = [
{ role: "system", content: "You are a helpful assistant" },
{ role: "user", content: "How many languages are in the world?" },
];
var response = await client.path("/chat/completions").post({
body: {
messages: messages,
}
});
注
mistralai-Mistral-7B-Instruct-v01、mistralai-Mistral-7B-Instruct-v02、mistralai-Mixtral-8x22B-Instruct-v0-1 はシステム メッセージ (role="system"
) をサポートしていません。 モデル推論 API を使用すると、システム メッセージは、使用可能な最も近い機能であるユーザー メッセージに変換されます。 この翻訳は便宜上提供されているものですが、モデルがシステム メッセージの手順に信頼性の高い正しいレベルで従っているかどうかを確認することが重要です。
応答は次のとおりです。モデルの使用状況の統計情報が表示されます。
if (isUnexpected(response)) {
throw response.body.error;
}
console.log("Response: ", response.body.choices[0].message.content);
console.log("Model: ", response.body.model);
console.log("Usage:");
console.log("\tPrompt tokens:", response.body.usage.prompt_tokens);
console.log("\tTotal tokens:", response.body.usage.total_tokens);
console.log("\tCompletion tokens:", response.body.usage.completion_tokens);
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: mistralai-Mistral-7B-Instruct-v01
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
応答の usage
セクションを調べて、プロンプトに使用されたトークンの数、生成されたトークンの合計数、応答生成に使用されたトークンの数を確認します。
コンテンツのストリーミング
既定では、入力候補 API は、生成されたコンテンツ全体を 1 つの応答で返します。 長い入力候補を生成する場合、応答が得られるまでに数秒かかることがあります。
コンテンツをストリーミングして、コンテンツが生成されるにつれ返されるようにできます。 コンテンツをストリーミングすると、コンテンツが使用可能になったときに入力候補の処理を開始できます。 このモードは、データのみのサーバー送信イベントとして応答をストリーム バックするオブジェクトを返します。 メッセージ フィールドではなく、デルタ フィールドからチャンクを抽出します。
var messages = [
{ role: "system", content: "You are a helpful assistant" },
{ role: "user", content: "How many languages are in the world?" },
];
var response = await client.path("/chat/completions").post({
body: {
messages: messages,
}
}).asNodeStream();
入力候補をストリーミングするには、モデルを呼び出すときに .asNodeStream()
を使用します。
ストリーミングでコンテンツがどのように生成されるかを視覚化できます。
var stream = response.body;
if (!stream) {
stream.destroy();
throw new Error(`Failed to get chat completions with status: ${response.status}`);
}
if (response.status !== "200") {
throw new Error(`Failed to get chat completions: ${response.body.error}`);
}
var sses = createSseStream(stream);
for await (const event of sses) {
if (event.data === "[DONE]") {
return;
}
for (const choice of (JSON.parse(event.data)).choices) {
console.log(choice.delta?.content ?? "");
}
}
推論クライアントでサポートされているその他のパラメーターを確認する
推論クライアントで指定できるその他のパラメーターを確認します。 サポートされているすべてのパラメーターとそれに対応するドキュメントの完全な一覧については、「 モデル推論 API リファレンス」を参照してください。
var messages = [
{ role: "system", content: "You are a helpful assistant" },
{ role: "user", content: "How many languages are in the world?" },
];
var response = await client.path("/chat/completions").post({
body: {
messages: messages,
presence_penalty: "0.1",
frequency_penalty: "0.8",
max_tokens: 2048,
stop: ["<|endoftext|>"],
temperature: 0,
top_p: 1,
response_format: { type: "text" },
}
});
警告
Mistral モデルは、JSON 出力フォーマット (response_format = { "type": "json_object" }
) をサポートしていません。 モデルに JSON 出力を生成するよう指示できます。 ただし、そうした出力が有効な JSON であるとは限りません。
サポートされているパラメーターの一覧にないパラメーターを渡す場合は、追加のパラメーターを使用して、基になるモデルに渡すことができます。 「モデルに追加のパラメーターを渡す」を参照してください。
モデルに追加のパラメーターを渡す
モデル推論 API を使用すると、モデルに追加のパラメーターを渡すことができます。 次のコード例に、モデルに追加のパラメーター logprobs
を渡す方法を示します。
モデル推論 API に追加のパラメーターを渡す前に、モデルでこれらの追加パラメーターがサポートされていることを確認してください。 基になるモデルに要求を行うと、ヘッダー extra-parameters
が値 pass-through
でモデルに渡されます。 この値は、追加のパラメーターをモデルに渡すようエンドポイントに指示します。 モデルで追加のパラメーターを使用しても、モデルで実際に処理できるとは限りません。 モデルのドキュメントを参照して、サポートされている追加パラメーターを確認してください。
var messages = [
{ role: "system", content: "You are a helpful assistant" },
{ role: "user", content: "How many languages are in the world?" },
];
var response = await client.path("/chat/completions").post({
headers: {
"extra-params": "pass-through"
},
body: {
messages: messages,
logprobs: true
}
});
Mistral-7B and Mixtral チャット モデルには、次の追加パラメーターを渡すことができます。
名前 | 説明 | タイプ |
---|---|---|
logit_bias |
トークン (トークナイザーのトークン ID で指定) を関連付けられたバイアス値 (-100 から 100) にマップする JSON オブジェクトを受け入れます。 数学的には、サンプリングの前にモデルによって生成されたロジットにバイアスが追加されます。 正確な効果はモデルごとに異なりますが、-1 から 1 の値では選択の可能性が低下または増加し、-100 や 100 などの値では、関連するトークンの選択が禁止されるか、または排他的になります。 | float |
logprobs |
出力トークンのログ確率を返すかどうかを指定します。 true に設定すると、message の content に含まれる各出力トークンのログ確率が返されます。 |
int |
top_logprobs |
0 から 20 までの整数値を指定します。これは、各トークンの位置において、最も出現確率の高いトークンをいくつ返すかを表します。各トークンには、それぞれ関連するログ確率が付与されます。 このパラメーターを使う場合、logprobs は true に設定する必要があります。 |
float |
n |
入力メッセージごとに生成するチャット補完の選択肢の数。 選択肢全体で生成されたトークンの数に基づいて課金されます。 | int |
Mistral-7B チャット モデルと Mistral Nemo チャット モデル
Mistral-7B チャット モデルと Mistral Nemo チャット モデルには、次のようなモデルが含まれます。
Mistral-7B-Instruct 大規模言語モデル (LLM) は、Mistral-7B の手順と微調整されたバージョンであり、次のアーキテクチャを含むトランスフォーマー モデルです。
- グループ化されたクエリ
- スライディング ウィンドウの注意
- バイト フォールバック BPE トークナイザー
次のモデルを使用できます。
ヒント
さらに、MistralAI は、モデルの特定の機能で使用するためにカスタマイズされた API の使用をサポートしています。 モデル プロバイダー固有の API を使用するには、MistralAI ドキュメントを確認するか、推論の例のセクションでコード例を参照してください。
[前提条件]
Azure AI Foundry で Mistral-7B と Mixtral チャット モデルを使用するには、次の前提条件を満たす必要があります。
モデル デプロイ
セルフホステッド マネージド コンピューティングへのデプロイ
Mistral-7B チャット モデルと Mixtral チャット モデルは、Microsoft のセルフホステッド マネージド推論ソリューションにデプロイできます。これにより、モデルの提供方法に関するすべての詳細をカスタマイズおよび制御できます。
セルフホステッド マネージド コンピューティングにデプロイするには、サブスクリプションに十分なクォータが必要です。 十分なクォータを使用できない場合は、「共有クォータを使用するオプションを使用します。このエンドポイントは 168 時間以内に削除されることを確認します」オプションを選択することで、一時的なクォータ アクセスを使用できます。
インストールされている推論パッケージ
このモデルからの予測を使用するには、NuGet からの Azure.AI.Inference
パッケージを使用します。 このパッケージをインストールするには、次の前提条件を満たす必要があります。
- エンドポイント URL。 クライアント ライブラリを構築するには、エンドポイント URL を渡す必要があります。 エンドポイント URL の形式は
https://your-host-name.your-azure-region.inference.ai.azure.com
です。ここで、your-host-name
は一意のモデル デプロイ ホスト名、your-azure-region
はモデルがデプロイされている Azure リージョン (eastus2 など) です。 - モデル デプロイと認証の設定に応じて、サービスに対する認証キーまたは Microsoft Entra ID 資格情報が必要です。 キーは 32 文字の文字列です。
これらの前提条件が満たされたら、次のコマンドを使用して Azure AI 推論ライブラリをインストールします。
dotnet add package Azure.AI.Inference --prerelease
Microsoft Entra ID (旧称 Azure Active Directory) を使用して認証することもできます。 Azure SDK で提供されている資格情報プロバイダーを使用するには、Azure.Identity
パッケージをインストールします。
dotnet add package Azure.Identity
次の名前空間をインポートします。
using Azure;
using Azure.Identity;
using Azure.AI.Inference;
この例では以下の名前空間も使用しますが、常にこれらが必要とは限りません。
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Reflection;
チャット補完を使用する
このセクションでは、Azure AI モデル推論 API をチャットのチャット補完モデルで使用します。
ヒント
モデル推論 API を使用すると、Mistral-7B や Mixtral チャット モデルなど、同じコードと構造を使用して、Azure AI Foundry ポータルにデプロイされたほとんどのモデルと対話できます。
モデルを実行するクライアントを作成する
まず、モデルを実行するクライアントを作成します。 次のコードでは、環境変数に格納されているエンドポイント URL とキーを使用しています。
ChatCompletionsClient client = new ChatCompletionsClient(
new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL"))
);
Microsoft Entra ID をサポートするセルフホステッド オンライン エンドポイントにモデルをデプロイする場合、次のコード スニペットを使用してクライアントを作成できます。
client = new ChatCompletionsClient(
new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
new DefaultAzureCredential(includeInteractiveCredentials: true)
);
モデルの機能を取得する
/info
ルートは、エンドポイントにデプロイされたモデルに関する情報を返します。 次のメソッドを呼び出してモデルの情報を返します。
Response<ModelInfo> modelInfo = client.GetModelInfo();
応答は次のとおりです。
Console.WriteLine($"Model name: {modelInfo.Value.ModelName}");
Console.WriteLine($"Model type: {modelInfo.Value.ModelType}");
Console.WriteLine($"Model provider name: {modelInfo.Value.ModelProviderName}");
Model name: mistralai-Mistral-7B-Instruct-v01
Model type: chat-completions
Model provider name: MistralAI
チャット入力候補要求を作成する
次の例に、モデルに対する基本的なチャット入力候補要求を作成する方法を示します。
ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage("You are a helpful assistant."),
new ChatRequestUserMessage("How many languages are in the world?")
},
};
Response<ChatCompletions> response = client.Complete(requestOptions);
注
mistralai-Mistral-7B-Instruct-v01、mistralai-Mistral-7B-Instruct-v02、mistralai-Mixtral-8x22B-Instruct-v0-1 はシステム メッセージ (role="system"
) をサポートしていません。 モデル推論 API を使用すると、システム メッセージは、使用可能な最も近い機能であるユーザー メッセージに変換されます。 この翻訳は便宜上提供されているものですが、モデルがシステム メッセージの手順に信頼性の高い正しいレベルで従っているかどうかを確認することが重要です。
応答は次のとおりです。モデルの使用状況の統計情報が表示されます。
Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");
Console.WriteLine($"Model: {response.Value.Model}");
Console.WriteLine("Usage:");
Console.WriteLine($"\tPrompt tokens: {response.Value.Usage.PromptTokens}");
Console.WriteLine($"\tTotal tokens: {response.Value.Usage.TotalTokens}");
Console.WriteLine($"\tCompletion tokens: {response.Value.Usage.CompletionTokens}");
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: mistralai-Mistral-7B-Instruct-v01
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
応答の usage
セクションを調べて、プロンプトに使用されたトークンの数、生成されたトークンの合計数、応答生成に使用されたトークンの数を確認します。
コンテンツのストリーミング
既定では、入力候補 API は、生成されたコンテンツ全体を 1 つの応答で返します。 長い入力候補を生成する場合、応答が得られるまでに数秒かかることがあります。
コンテンツをストリーミングして、コンテンツが生成されるにつれ返されるようにできます。 コンテンツをストリーミングすると、コンテンツが使用可能になったときに入力候補の処理を開始できます。 このモードは、データのみのサーバー送信イベントとして応答をストリーム バックするオブジェクトを返します。 メッセージ フィールドではなく、デルタ フィールドからチャンクを抽出します。
static async Task StreamMessageAsync(ChatCompletionsClient client)
{
ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage("You are a helpful assistant."),
new ChatRequestUserMessage("How many languages are in the world? Write an essay about it.")
},
MaxTokens=4096
};
StreamingResponse<StreamingChatCompletionsUpdate> streamResponse = await client.CompleteStreamingAsync(requestOptions);
await PrintStream(streamResponse);
}
入力候補をストリーミングするには、モデルを呼び出すときに CompleteStreamingAsync
メソッドを使用します。 この例では、呼び出しが非同期メソッドにラップされていることに注意してください。
出力を視覚化するには、コンソールにストリームを出力する非同期メソッドを定義します。
static async Task PrintStream(StreamingResponse<StreamingChatCompletionsUpdate> response)
{
await foreach (StreamingChatCompletionsUpdate chatUpdate in response)
{
if (chatUpdate.Role.HasValue)
{
Console.Write($"{chatUpdate.Role.Value.ToString().ToUpperInvariant()}: ");
}
if (!string.IsNullOrEmpty(chatUpdate.ContentUpdate))
{
Console.Write(chatUpdate.ContentUpdate);
}
}
}
ストリーミングでコンテンツがどのように生成されるかを視覚化できます。
StreamMessageAsync(client).GetAwaiter().GetResult();
推論クライアントでサポートされているその他のパラメーターを確認する
推論クライアントで指定できるその他のパラメーターを確認します。 サポートされているすべてのパラメーターとそれに対応するドキュメントの完全な一覧については、「 モデル推論 API リファレンス」を参照してください。
requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage("You are a helpful assistant."),
new ChatRequestUserMessage("How many languages are in the world?")
},
PresencePenalty = 0.1f,
FrequencyPenalty = 0.8f,
MaxTokens = 2048,
StopSequences = { "<|endoftext|>" },
Temperature = 0,
NucleusSamplingFactor = 1,
ResponseFormat = new ChatCompletionsResponseFormatText()
};
response = client.Complete(requestOptions);
Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");
警告
Mistral モデルは、JSON 出力フォーマット (response_format = { "type": "json_object" }
) をサポートしていません。 モデルに JSON 出力を生成するよう指示できます。 ただし、そうした出力が有効な JSON であるとは限りません。
サポートされているパラメーターの一覧にないパラメーターを渡す場合は、追加のパラメーターを使用して、基になるモデルに渡すことができます。 「モデルに追加のパラメーターを渡す」を参照してください。
モデルに追加のパラメーターを渡す
モデル推論 API を使用すると、モデルに追加のパラメーターを渡すことができます。 次のコード例に、モデルに追加のパラメーター logprobs
を渡す方法を示します。
モデル推論 API に追加のパラメーターを渡す前に、モデルでこれらの追加パラメーターがサポートされていることを確認してください。 基になるモデルに要求を行うと、ヘッダー extra-parameters
が値 pass-through
でモデルに渡されます。 この値は、追加のパラメーターをモデルに渡すようエンドポイントに指示します。 モデルで追加のパラメーターを使用しても、モデルで実際に処理できるとは限りません。 モデルのドキュメントを参照して、サポートされている追加パラメーターを確認してください。
requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage("You are a helpful assistant."),
new ChatRequestUserMessage("How many languages are in the world?")
},
AdditionalProperties = { { "logprobs", BinaryData.FromString("true") } },
};
response = client.Complete(requestOptions, extraParams: ExtraParameters.PassThrough);
Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");
Mistral-7B and Mixtral チャット モデルには、次の追加パラメーターを渡すことができます。
名前 | 説明 | タイプ |
---|---|---|
logit_bias |
トークン (トークナイザーのトークン ID で指定) を関連付けられたバイアス値 (-100 から 100) にマップする JSON オブジェクトを受け入れます。 数学的には、サンプリングの前にモデルによって生成されたロジットにバイアスが追加されます。 正確な効果はモデルごとに異なりますが、-1 から 1 の値では選択の可能性が低下または増加し、-100 や 100 などの値では、関連するトークンの選択が禁止されるか、または排他的になります。 | float |
logprobs |
出力トークンのログ確率を返すかどうかを指定します。 true に設定すると、message の content に含まれる各出力トークンのログ確率が返されます。 |
int |
top_logprobs |
0 から 20 までの整数値を指定します。これは、各トークンの位置において、最も出現確率の高いトークンをいくつ返すかを表します。各トークンには、それぞれ関連するログ確率が付与されます。 このパラメーターを使う場合、logprobs は true に設定する必要があります。 |
float |
n |
入力メッセージごとに生成するチャット補完の選択肢の数。 選択肢全体で生成されたトークンの数に基づいて課金されます。 | int |
Mistral-7B チャット モデルと Mistral Nemo チャット モデル
Mistral-7B チャット モデルと Mistral Nemo チャット モデルには、次のようなモデルが含まれます。
Mistral-7B-Instruct 大規模言語モデル (LLM) は、Mistral-7B の手順と微調整されたバージョンであり、次のアーキテクチャを含むトランスフォーマー モデルです。
- グループ化されたクエリ
- スライディング ウィンドウの注意
- バイト フォールバック BPE トークナイザー
次のモデルを使用できます。
ヒント
さらに、MistralAI は、モデルの特定の機能で使用するためにカスタマイズされた API の使用をサポートしています。 モデル プロバイダー固有の API を使用するには、MistralAI ドキュメントを確認するか、推論の例のセクションでコード例を参照してください。
[前提条件]
Azure AI Foundry で Mistral-7B と Mixtral チャット モデルを使用するには、次の前提条件を満たす必要があります。
モデル デプロイ
セルフホステッド マネージド コンピューティングへのデプロイ
Mistral-7B チャット モデルと Mixtral チャット モデルは、Microsoft のセルフホステッド マネージド推論ソリューションにデプロイできます。これにより、モデルの提供方法に関するすべての詳細をカスタマイズおよび制御できます。
セルフホステッド マネージド コンピューティングにデプロイするには、サブスクリプションに十分なクォータが必要です。 十分なクォータを使用できない場合は、「共有クォータを使用するオプションを使用します。このエンドポイントは 168 時間以内に削除されることを確認します」オプションを選択することで、一時的なクォータ アクセスを使用できます。
REST クライアント
モデル推論 API を使用してデプロイされたモデルは、任意の REST クライアントを使用して使用できます。 REST クライアントを使用するには、次の前提条件が満たされている必要があります。
- リクエストを作成するには、エンドポイント URL を渡す必要があります。 エンドポイント URL の形式は
https://your-host-name.your-azure-region.inference.ai.azure.com
です。ここで、your-host-name`` is your unique model deployment host name and
your-azure-region`` はモデルがデプロイされている Azure リージョン (eastus2 など) です。 - モデル デプロイと認証の設定に応じて、サービスに対する認証キーまたは Microsoft Entra ID 資格情報が必要です。 キーは 32 文字の文字列です。
チャット補完を使用する
このセクションでは、Azure AI モデル推論 API をチャットのチャット補完モデルで使用します。
ヒント
モデル推論 API を使用すると、Mistral-7B や Mixtral チャット モデルなど、同じコードと構造を使用して、Azure AI Foundry ポータルにデプロイされたほとんどのモデルと対話できます。
モデルを実行するクライアントを作成する
まず、モデルを実行するクライアントを作成します。 次のコードでは、環境変数に格納されているエンドポイント URL とキーを使用しています。
Microsoft Entra ID をサポートするセルフホステッド オンライン エンドポイントにモデルをデプロイする場合、次のコード スニペットを使用してクライアントを作成できます。
モデルの機能を取得する
/info
ルートは、エンドポイントにデプロイされたモデルに関する情報を返します。 次のメソッドを呼び出してモデルの情報を返します。
GET /info HTTP/1.1
Host: <ENDPOINT_URI>
Authorization: Bearer <TOKEN>
Content-Type: application/json
応答は次のとおりです。
{
"model_name": "mistralai-Mistral-7B-Instruct-v01",
"model_type": "chat-completions",
"model_provider_name": "MistralAI"
}
チャット入力候補要求を作成する
次の例に、モデルに対する基本的なチャット入力候補要求を作成する方法を示します。
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "How many languages are in the world?"
}
]
}
注
mistralai-Mistral-7B-Instruct-v01、mistralai-Mistral-7B-Instruct-v02、mistralai-Mixtral-8x22B-Instruct-v0-1 はシステム メッセージ (role="system"
) をサポートしていません。 モデル推論 API を使用すると、システム メッセージは、使用可能な最も近い機能であるユーザー メッセージに変換されます。 この翻訳は便宜上提供されているものですが、モデルがシステム メッセージの手順に信頼性の高い正しいレベルで従っているかどうかを確認することが重要です。
応答は次のとおりです。モデルの使用状況の統計情報が表示されます。
{
"id": "0a1234b5de6789f01gh2i345j6789klm",
"object": "chat.completion",
"created": 1718726686,
"model": "mistralai-Mistral-7B-Instruct-v01",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.",
"tool_calls": null
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 19,
"total_tokens": 91,
"completion_tokens": 72
}
}
応答の usage
セクションを調べて、プロンプトに使用されたトークンの数、生成されたトークンの合計数、応答生成に使用されたトークンの数を確認します。
コンテンツのストリーミング
既定では、入力候補 API は、生成されたコンテンツ全体を 1 つの応答で返します。 長い入力候補を生成する場合、応答が得られるまでに数秒かかることがあります。
コンテンツをストリーミングして、コンテンツが生成されるにつれ返されるようにできます。 コンテンツをストリーミングすると、コンテンツが使用可能になったときに入力候補の処理を開始できます。 このモードは、データのみのサーバー送信イベントとして応答をストリーム バックするオブジェクトを返します。 メッセージ フィールドではなく、デルタ フィールドからチャンクを抽出します。
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "How many languages are in the world?"
}
],
"stream": true,
"temperature": 0,
"top_p": 1,
"max_tokens": 2048
}
ストリーミングでコンテンツがどのように生成されるかを視覚化できます。
{
"id": "23b54589eba14564ad8a2e6978775a39",
"object": "chat.completion.chunk",
"created": 1718726371,
"model": "mistralai-Mistral-7B-Instruct-v01",
"choices": [
{
"index": 0,
"delta": {
"role": "assistant",
"content": ""
},
"finish_reason": null,
"logprobs": null
}
]
}
ストリーム内の最後のメッセージには、生成プロセスが停止した理由を示す finish_reason
が設定されています。
{
"id": "23b54589eba14564ad8a2e6978775a39",
"object": "chat.completion.chunk",
"created": 1718726371,
"model": "mistralai-Mistral-7B-Instruct-v01",
"choices": [
{
"index": 0,
"delta": {
"content": ""
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 19,
"total_tokens": 91,
"completion_tokens": 72
}
}
推論クライアントでサポートされているその他のパラメーターを確認する
推論クライアントで指定できるその他のパラメーターを確認します。 サポートされているすべてのパラメーターとそれに対応するドキュメントの完全な一覧については、「 モデル推論 API リファレンス」を参照してください。
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "How many languages are in the world?"
}
],
"presence_penalty": 0.1,
"frequency_penalty": 0.8,
"max_tokens": 2048,
"stop": ["<|endoftext|>"],
"temperature" :0,
"top_p": 1,
"response_format": { "type": "text" }
}
{
"id": "0a1234b5de6789f01gh2i345j6789klm",
"object": "chat.completion",
"created": 1718726686,
"model": "mistralai-Mistral-7B-Instruct-v01",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.",
"tool_calls": null
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 19,
"total_tokens": 91,
"completion_tokens": 72
}
}
警告
Mistral モデルは、JSON 出力フォーマット (response_format = { "type": "json_object" }
) をサポートしていません。 モデルに JSON 出力を生成するよう指示できます。 ただし、そうした出力が有効な JSON であるとは限りません。
サポートされているパラメーターの一覧にないパラメーターを渡す場合は、追加のパラメーターを使用して、基になるモデルに渡すことができます。 「モデルに追加のパラメーターを渡す」を参照してください。
モデルに追加のパラメーターを渡す
モデル推論 API を使用すると、モデルに追加のパラメーターを渡すことができます。 次のコード例に、モデルに追加のパラメーター logprobs
を渡す方法を示します。
モデル推論 API に追加のパラメーターを渡す前に、モデルでこれらの追加パラメーターがサポートされていることを確認してください。 基になるモデルに要求を行うと、ヘッダー extra-parameters
が値 pass-through
でモデルに渡されます。 この値は、追加のパラメーターをモデルに渡すようエンドポイントに指示します。 モデルで追加のパラメーターを使用しても、モデルで実際に処理できるとは限りません。 モデルのドキュメントを参照して、サポートされている追加パラメーターを確認してください。
POST /chat/completions HTTP/1.1
Host: <ENDPOINT_URI>
Authorization: Bearer <TOKEN>
Content-Type: application/json
extra-parameters: pass-through
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "How many languages are in the world?"
}
],
"logprobs": true
}
Mistral-7B and Mixtral チャット モデルには、次の追加パラメーターを渡すことができます。
名前 | 説明 | タイプ |
---|---|---|
logit_bias |
トークン (トークナイザーのトークン ID で指定) を関連付けられたバイアス値 (-100 から 100) にマップする JSON オブジェクトを受け入れます。 数学的には、サンプリングの前にモデルによって生成されたロジットにバイアスが追加されます。 正確な効果はモデルごとに異なりますが、-1 から 1 の値では選択の可能性が低下または増加し、-100 や 100 などの値では、関連するトークンの選択が禁止されるか、または排他的になります。 | float |
logprobs |
出力トークンのログ確率を返すかどうかを指定します。 true に設定すると、message の content に含まれる各出力トークンのログ確率が返されます。 |
int |
top_logprobs |
0 から 20 までの整数値を指定します。これは、各トークンの位置において、最も出現確率の高いトークンをいくつ返すかを表します。各トークンには、それぞれ関連するログ確率が付与されます。 このパラメーターを使う場合、logprobs は true に設定する必要があります。 |
float |
n |
入力メッセージごとに生成するチャット補完の選択肢の数。 選択肢全体で生成されたトークンの数に基づいて課金されます。 | int |
推論のその他の例
Mistral モデルのその他の使用方法例については、次の例とチュートリアルを参照してください。
説明 | 言語 | サンプル |
---|---|---|
CURL を使用したリクエスト | Bash (バッシュ) | リンク |
C# 用 Azure AI 推論パッケージ | C# | リンク |
JavaScript 用 Azure AI 推論パッケージ | JavaScript | リンク |
Python 用 Azure AI 推論パッケージ | Python(プログラミング言語) | リンク |
Python Web リクエスト | Python(プログラミング言語) | リンク |
OpenAI SDK (試験段階) | Python(プログラミング言語) | リンク |
LangChain | Python(プログラミング言語) | リンク |
Mistral AI(ミストラルAI) | Python(プログラミング言語) | リンク |
LiteLLM | Python(プログラミング言語) | リンク |
マネージド コンピューティングにデプロイされる Mistral モデルのコストとクォータに関する考慮事項
マネージド コンピューティングにデプロイされた Mistral モデルは、関連するコンピューティング インスタンスのコア時間に基づいて課金されます。 コンピューティング インスタンスのコストは、インスタンスのサイズ、実行中のインスタンス数、実行期間によって決まります。
少ないインスタンス数で開始し、必要に応じてスケールアップすることをおすすめします。 Azure portal でコンピューティング インスタンスのコストを監視できます。