Azure AI Model Inference API | Azure Machine Learning
[アーティクル]
Azure AI Model Inference は、基本モデルの共通の機能セットを公開する API であり、開発者がさまざまなモデルセットからの予測を一定かつ一貫した方法で利用するために使用できます。 開発者は、使用している基になるコードを変更することなく、Azure AI Studio にデプロイされたさまざまなモデルと対話できます。
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.AZUREAI_ENDPOINT_URL,
new AzureKeyCredential(process.env.AZUREAI_ENDPOINT_KEY)
);
Microsoft Entra ID をサポートするエンドポイントの場合は、次のようにクライアントを作成できます。
import ModelClient from "@azure-rest/ai-inference";
import { isUnexpected } from "@azure-rest/ai-inference";
import { AzureDefaultCredential } from "@azure/identity";
const client = new ModelClient(
process.env.AZUREAI_ENDPOINT_URL,
new AzureDefaultCredential()
);
ChatCompletionsClient client = new ChatCompletionsClient(
new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL"))
);
Microsoft Entra ID (旧称 Azure Active Directory) をサポートするエンドポイントの場合:
ChatCompletionsClient client = new ChatCompletionsClient(
new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
new DefaultAzureCredential(includeInteractiveCredentials: true)
);
POST /chat/completions?api-version=2024-04-01-preview
Authorization: Bearer <bearer-token>
Content-Type: application/json
機能拡張
Azure AI Model Inference API では、モデルがサブスクライブできる一連のモダリティとパラメーターが指定されます。 ただし、一部のモデルには、API によって示される機能が追加されている場合があります。 このような場合、この API を使用すると、開発者はそれらをペイロードに追加のパラメーターとして渡すことができます。
ヘッダー extra-parameters: pass-through を設定することで、この API は不明なパラメーターを基になるモデルに直接渡そうとします。 モデルでそのパラメーターを処理できる場合、要求は完了します。
次の例は、Azure AI Model Inference API で指定されていない、Mistral-Large でサポートされる safe_prompt パラメーターを渡す要求を示しています。
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
model_extras={
"safe_mode": True
}
)
print(response.choices[0].message.content)
ヒント
Azure AI 推論 SDK を使用している場合、model_extras を使用すると、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({
"extra-parameters": "pass-through",
body: {
messages: messages,
safe_mode: true
}
});
console.log(response.choices[0].message.content)
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}");
Request
POST /chat/completions?api-version=2024-04-01-preview
Authorization: Bearer <bearer-token>
Content-Type: application/json
extra-parameters: pass-through
import json
from azure.ai.inference.models import SystemMessage, UserMessage, ChatCompletionsResponseFormatJSON
from azure.core.exceptions import HttpResponseError
try:
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
response_format=ChatCompletionsResponseFormatJSON()
)
except HttpResponseError as ex:
if ex.status_code == 422:
response = json.loads(ex.response._content.decode('utf-8'))
if isinstance(response, dict) and "detail" in response:
for offending in response["detail"]:
param = ".".join(offending["loc"])
value = offending["input"]
print(
f"Looks like the model doesn't support the parameter '{param}' with value '{value}'"
)
else:
raise ex
try {
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,
response_format: { type: "json_object" }
}
});
}
catch (error) {
if (error.status_code == 422) {
var response = JSON.parse(error.response._content)
if (response.detail) {
for (const offending of response.detail) {
var param = offending.loc.join(".")
var value = offending.input
console.log(`Looks like the model doesn't support the parameter '${param}' with value '${value}'`)
}
}
}
else
{
throw error
}
}
try
{
requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage("You are a helpful assistant"),
new ChatRequestUserMessage("How many languages are in the world?"),
},
ResponseFormat = new ChatCompletionsResponseFormatJSON()
};
response = client.Complete(requestOptions);
Console.WriteLine(response.Value.Choices[0].Message.Content);
}
catch (RequestFailedException ex)
{
if (ex.Status == 422)
{
Console.WriteLine($"Looks like the model doesn't support a parameter: {ex.Message}");
}
else
{
throw;
}
}
Request
POST /chat/completions?api-version=2024-04-01-preview
Authorization: Bearer <bearer-token>
Content-Type: application/json
Azure AI モデル推論 API は、Azure AI Content Safety をサポートしています。 Azure AI Content Safety をオンにしてデプロイを使用する場合、入力と出力は、有害なコンテンツの出力を検出して防ぐことを目的とした一連の分類モデルを通過します。 コンテンツ フィルタリング (プレビュー) システムは、入力プロンプトと出力される入力候補の両方で、有害な可能性があるコンテンツ特有のカテゴリを検出し、アクションを実行します。
from azure.ai.inference.models import AssistantMessage, UserMessage, SystemMessage
from azure.core.exceptions import HttpResponseError
try:
response = client.complete(
messages=[
SystemMessage(content="You are an AI assistant that helps people find information."),
UserMessage(content="Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."),
]
)
print(response.choices[0].message.content)
except HttpResponseError as ex:
if ex.status_code == 400:
response = json.loads(ex.response._content.decode('utf-8'))
if isinstance(response, dict) and "error" in response:
print(f"Your request triggered an {response['error']['code']} error:\n\t {response['error']['message']}")
else:
raise ex
else:
raise ex
try {
var messages = [
{ role: "system", content: "You are an AI assistant that helps people find information." },
{ role: "user", content: "Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills." },
]
var response = await client.path("/chat/completions").post({
body: {
messages: messages,
}
});
console.log(response.body.choices[0].message.content)
}
catch (error) {
if (error.status_code == 400) {
var response = JSON.parse(error.response._content)
if (response.error) {
console.log(`Your request triggered an ${response.error.code} error:\n\t ${response.error.message}`)
}
else
{
throw error
}
}
}
try
{
requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage("You are an AI assistant that helps people find information."),
new ChatRequestUserMessage(
"Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."
),
},
};
response = client.Complete(requestOptions);
Console.WriteLine(response.Value.Choices[0].Message.Content);
}
catch (RequestFailedException ex)
{
if (ex.ErrorCode == "content_filter")
{
Console.WriteLine($"Your query has trigger Azure Content Safeaty: {ex.Message}");
}
else
{
throw;
}
}
Request
POST /chat/completions?api-version=2024-04-01-preview
Authorization: Bearer <bearer-token>
Content-Type: application/json
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant"
},
{
"role": "user",
"content": "Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."
}
],
"temperature": 0,
"top_p": 1,
}
回答
{
"status": 400,
"code": "content_filter",
"message": "The response was filtered",
"param": "messages",
"type": null
}
作業の開始
Azure AI モデル推論 API は現在、サーバーレス API エンドポイントやマネージド オンライン エンドポイントとしてデプロイされた特定のモデルでサポートされています。 サポート対象のモデルのいずれかをデプロイし、まったく同じコードを使用して予測を使用します。
Azure AI モデル推論 API のリファレンス セクションを調べて、Azure AI Studio と Azure Machine Learning スタジオによってデプロイされたモデル (チャット入力候補モデルなど) を使用するためのパラメーターとオプションを確認してください。 サーバーレス API エンドポイントとマネージド コンピューティング エンドポイント (旧称マネージド オンライン エンドポイント) がサポートされています。