適用対象:Foundry (クラシック) ポータル。 この記事は、新しい Foundry ポータルでは使用できません。
新しいポータルの詳細を確認します。
注
この記事のリンクは、現在表示している Foundry (クラシック) ドキュメントではなく、新しい Microsoft Foundry ドキュメントのコンテンツを開く場合があります。
Important
最新の API の例については、 API ライフサイクルに関する記事を参照してください。
クライアントの認証
Azure OpenAI への API リクエストを認証するための方法はいくつかあります。 Microsoft Entra ID トークンを使用することを強くお勧めします。 詳細については、Azure ID のドキュメントを参照してください。
Microsoft Entra ID
Microsoft Entra ID トークンを使用して Azure OpenAI で認証するには、いくつかの方法があります。 既定の方法では、DefaultAzureCredential パッケージの @azure/identity クラスを使用しますが、アプリケーションで別の資格情報クラスが使用されている可能性があります。 このガイドでは、DefaultAzureCredential クラスを使用することを前提とします。 資格情報は次の方法で作成できます。
import { DefaultAzureCredential } from "@azure/identity";
const credential = new DefaultAzureCredential();
このオブジェクトを、 OpenAIClient コンストラクターの 2 番目の引数に渡します。
ただし、AzureOpenAI クライアントを認証するには、getBearerTokenProvider パッケージの @azure/identity 関数を使用する必要があります。 この関数によってトークン プロバイダーが作成され、これが AzureOpenAI の内部で各要求のトークンを取得するために使用されます。 トークン プロバイダーの作成方法は次のとおりです。
import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
const credential = new DefaultAzureCredential();
const scope = "https://ai.azure.com/.default";
const azureADTokenProvider = getBearerTokenProvider(credential, scope);
azureADTokenProvider は AzureOpenAI クライアントの作成時にオプション オブジェクトに渡されます。
(推奨されません) API キー
API キーは他の認証方法よりも安全性が低いため、運用環境では使用しないでください。 以前は、OpenAIClientを認証するために、次のようにAzureKeyCredentialオブジェクトを作成しました。
import { AzureKeyCredential } from "@azure/openai";
const apiKey = new AzureKeyCredential("your API key");
一方、AzureOpenAI は、AZURE_OPENAI_API_KEY 環境変数を設定するか、apiKey クライアントの作成時にオプション オブジェクトに AzureOpenAI 文字列プロパティを設定することで、API キーを使用して認証できます。
Important
API キーは慎重に使用してください。 API キーは、コード内に直接含めないようにし、絶対に公開しないでください。 API キーを使用する場合は、Azure Key Vaultに安全に格納します。 アプリで API キーを安全に使用する方法の詳細については、「Azure Key Vault を使用した
AI サービスのセキュリティの詳細については、「Authenticate requests to Azure AI サービス」を参照してください。
クライアントを構築する
import { AzureOpenAI } from "openai";
const deployment = "Your Azure OpenAI deployment";
const apiVersion = "2024-04-01-preview";
const options = { azureADTokenProvider, deployment, apiVersion }
const client = new AzureOpenAI(options);
Azure OpenAI リソースのエンドポイントは、endpoint オプションを設定することで指定できますが、環境変数 AZURE_OPENAI_ENDPOINT からクライアントによって読み込むこともできます。 エンドポイントを設定するにはこの方法をお勧めします。その理由は、コードを変更しなくてもクライアントをさまざまな環境で使用できるようになることと、エンドポイントがコード内で公開されないよう保護できることです。
API バージョンの指定は必須です。これが必要であるのは、プレビュー API バージョン間で既存のコードの動作に支障が生じることがないようにするためです。 OpenAI API のバージョンの詳細については、API のバージョン管理に関するドキュメントを参照 Azureしてください。 また、deployment プロパティは必須ではありませんが、設定することをお勧めします。
deployment が設定済みのときは、これを必要とするすべての操作の既定のデプロイとして使用されます。 クライアントの作成時に deployment オプションが指定されない場合は、オプション オブジェクト内の model プロパティでデプロイ名が設定されている必要があります。 ただし、オーディオ操作 (たとえば audio.transcriptions.create) を行うには、クライアントの作成時に deployment オプションがデプロイ名に設定されていることが必要です。
API の相違点
OpenAIClientクライアントとAzureOpenAI クライアントには、主な違いがあります。
-
OpenAIClientは、client.getChatCompletionsなどのメソッドのフラット リストとして操作を示します。AzureOpenAIは、入れ子になったグループ (client.chat.completions.createなど) の操作をグループ化します。 -
OpenAIClientでは、Azure OpenAI API とは異なる名前が使用されます。 たとえば、API ではスネーク ケースが使用されますが、クライアントではキャメル ケースが使用されます。AzureOpenAIでは、Azure OpenAI API と同じ名前が使用されます。
移行の例
次のセクションでは、 OpenAIClient から AzureOpenAIに移行する方法の例を示します。
チャット入力候補
const result = await client.chat.completions.create({ messages, model: '', max_tokens: 100 });
次の点に注意してください。
-
getChatCompletionsメソッドはchat.completions.createメソッドで置き換えられました。 -
messagesパラメーターはオプション オブジェクト内でmessagesプロパティを使用して渡されるようになりました。 -
maxTokensプロパティの名前をmax_tokensに変更し、deploymentNameパラメーターを削除します。 一般に、optionsオブジェクト内のプロパティの名前は、Azure OpenAI API の名前と同じです。 API では、OpenAIClientで使用されるキャメル ケース規則の代わりにスネーク ケースが使用されます。 この名前付け規則は、AzureOpenAIクライアントのすべての要求と応答のすべてのプロパティに適用されます。 -
deploymentNameパラメーターは、クライアントがdeploymentオプションを指定して作成された場合は必要ありません。 クライアントの作成時にdeploymentオプションが指定されなかった場合は、オプション オブジェクト内のmodelプロパティでデプロイ名が設定されている必要があります。
チャット補完のストリーミング
const stream = await client.chat.completions.create({ model: '', messages, max_tokens: 100, stream: true });
Azureをデータに利用する
import "@azure/openai/types";
const azureSearchEndpoint = "Your Azure Search resource endpoint";
const azureSearchIndexName = "Your Azure Search index name";
const result = await client.chat.completions.create({ model: '', messages, data_sources: [{
type: "azure_search",
parameters: {
endpoint: azureSearchEndpoint,
index_name: azureSearchIndexName,
authentication: {
type: "system_assigned_managed_identity",
}
}
}]
});
-
"@azure/openai/types"がインポートされ、クライアントの種類にAzure固有の定義 (data_sourcesなど) が追加されます。 -
azureExtensionOptionsプロパティは内側のdata_sourcesプロパティで置き換えられました。 - Azure OpenAI API のスキーマを反映する拡張機能のパラメーターをラップするために、
parametersプロパティが追加されました。 - キャメル ケースのプロパティはスネーク ケースのプロパティで置き換えられました。
音声文字起こし
import { createReadStream } from "fs";
const result = await client.audio.transcriptions.create({
model: '',
file: createReadStream(audioFilePath),
});
-
getAudioTranscriptionメソッドはaudio.transcriptions.createメソッドで置き換えられました。 -
AzureOpenAIなどのオーディオ操作を使用するには、deploymentの構築時にaudio.transcriptions.createオプションがデプロイ名に設定されている必要があります。 -
modelプロパティはオプション オブジェクト内で設定されている必要がありますが、その値は操作で使用されないため、任意の値に自由に設定できます。 -
fileプロパティはBuffer、fs.ReadaStream、Blobなど、さまざまな型を受け入れますが、この例ではfs.createReadStreamを使用してファイルをディスクからストリーミングします。
オーディオ翻訳
import { createReadStream } from "fs";
const result = await client.audio.translations.create({
model: '',
file: createReadStream(audioFilePath),
});
-
getAudioTranslationメソッドはaudio.translations.createメソッドで置き換えられました。 - その他の変更はすべて、オーディオ文字起こしの例と同じです。
埋め込み
次の例では、getEmbeddings メソッド呼び出しを移行する方法を示します。
const embeddings = await client.embeddings.create({ input, model: '' });
-
getEmbeddingsメソッドはembeddings.createメソッドで置き換えられました。 -
inputパラメーターはオプション オブジェクト内でinputプロパティを使用して渡されるようになりました。 -
deploymentNameパラメーターは削除されました。deploymentNameパラメーターは、クライアントがdeploymentオプションを指定して作成された場合は必要ありません。 クライアントの作成時にdeploymentオプションが指定されなかった場合は、オプション オブジェクト内のmodelプロパティでデプロイ名が設定されている必要があります。
イメージの生成
次の例では、getImages メソッド呼び出しを移行する方法を示します。
const results = await client.images.generate({ prompt, model: '', n, size });
-
getImagesメソッドはimages.generateメソッドで置き換えられました。 -
promptパラメーターはオプション オブジェクト内でpromptプロパティを使用して渡されるようになりました。 -
deploymentNameパラメーターは削除されました。deploymentNameパラメーターは、クライアントがdeploymentオプションを指定して作成された場合は必要ありません。 クライアントの作成時にdeploymentオプションが指定されなかった場合は、オプション オブジェクト内のmodelプロパティでデプロイ名が設定されている必要があります。
コンテンツ フィルター
コンテンツ フィルターの結果は、OpenAIClient でのチャット補完の応答の型の一部分です。 ただし、AzureOpenAI には contentFilterResults インターフェイスの ChatCompletion.Choice プロパティに直接相当するものはありません。 コンテンツ フィルターの結果には、"@azure/openai/types" をインポートし、content_filter_results プロパティにアクセスすることでアクセスできます。 次の例は、コンテンツ フィルターの結果にアクセスする方法を示しています。
import "@azure/openai/types";
const result = await client.chat.completions.create({ model: '', messages });
for (const choice of results.choices) {
const filterResults = choice.content_filter_results;
if (!filterResults) {
console.log("No content filter is found");
return;
}
if (filterResults.error) {
console.log(
`Content filter ran into the error ${filterResults.error.code}: ${filterResults.error.message}`);
}
const { hate, sexual, self_harm, violence } = filterResults;
...
}
- キャメル ケースのプロパティはスネーク ケースのプロパティで置き換えられました。
-
"@azure/openai/types"がインポートされ、クライアントの種類にAzure固有の定義 (たとえば、content_filter_results) が追加されます。詳細については、「Azure 型」セクションを参照してください。
型の比較
次の表では、@azure/openai のいくつかの型名を調べ、最も近い openai と同等の名前を示します。 名前の違いには、前述のさまざまな変更が現れています。 この表の内容は概要であり、詳細とコード サンプルはその後のセクションで示します。
| 以前の型名 | 最も近い新しい型 | シンボル型 | 変更の説明 |
|---|---|---|---|
OpenAIClient |
AzureOpenAI |
クラス | このクラスは以前のクラスを置き換えるものですが、共通するメソッドはありません。 以下の AzureOpenAI のセクションを参照してください。 |
AudioResult |
Transcription/Transcription |
インターフェイス | 呼び出し操作に応じて、この 2 つのインターフェイスが以前のインターフェイスを置き換えます。 |
AudioResultFormat |
response_format プロパティのインライン ユニオン型 |
エイリアス | 存在しない |
AudioResultSimpleJson |
Transcription/Transcription |
インターフェイス | 呼び出し操作に応じて、この 2 つのインターフェイスが以前のインターフェイスを置き換えます。 |
AudioResultVerboseJson |
N/A | インターフェイス | |
AudioSegment |
N/A | インターフェイス | |
AudioTranscriptionTask |
N/A | エイリアス | |
AzureChatEnhancementConfiguration、AzureChatEnhancements、AzureChatExtensionConfiguration、AzureChatExtensionConfigurationUnion、AzureChatExtensionDataSourceResponseCitation、AzureChatExtensionsMessageContext、AzureChatExtensionType、AzureChatGroundingEnhancementConfiguration、AzureChatOCREnhancementConfiguration、AzureCosmosDBChatExtensionConfiguration、AzureCosmosDBFieldMappingOptions、AzureExtensionsOptions、AzureGroundingEnhancement、AzureGroundingEnhancementCoordinatePoint、AzureGroundingEnhancementLine、AzureGroundingEnhancementLineSpan、AzureMachineLearningIndexChatExtensionConfiguration、AzureSearchChatExtensionConfiguration、AzureSearchIndexFieldMappingOptions、AzureSearchQueryType、ContentFilterBlocklistIdResult、ContentFilterCitedDetectionResult、ContentFilterDetectionResult、ContentFilterErrorResults、ContentFilterResult、ContentFilterResultDetailsForPrompt、ContentFilterResultsForChoice、ContentFilterSeverity、ContentFilterResultsForPrompt、ContentFilterSuccessResultDetailsForPrompt、ContentFilterSuccessResultsForChoice、ElasticsearchChatExtensionConfiguration、ElasticsearchIndexFieldMappingOptions、ElasticsearchQueryType、ImageGenerationContentFilterResults、ImageGenerationPromptFilterResults、OnYourDataAccessTokenAuthenticationOptions、OnYourDataApiKeyAuthenticationOptions、OnYourDataAuthenticationOptions、OnYourDataAuthenticationOptionsUnion、OnYourDataConnectionStringAuthenticationOptions、OnYourDataDeploymentNameVectorizationSource、OnYourDataEncodedApiKeyAuthenticationOptions、OnYourDataEndpointVectorizationSource、OnYourDataKeyAndKeyIdAuthenticationOptions、OnYourDataModelIdVectorizationSource、OnYourDataSystemAssignedManagedIdentityAuthenticationOptions、OnYourDataUserAssignedManagedIdentityAuthenticationOptions、OnYourDataVectorizationSource、OnYourDataVectorizationSourceType、OnYourDataVectorizationSourceUnion、PineconeChatExtensionConfiguration、PineconeFieldMappingOptions |
N/A | インターフェイスとエイリアス | 以下の「Azureの種類」セクションを参照してください |
AzureKeyCredential |
N/A | クラス | API キーを文字列値として指定できます。 |
ChatChoice |
ChatCompletion.Choice |
インターフェイス | |
ChatChoiceLogProbabilityInfo |
Logprobs |
インターフェイス | |
ChatCompletions |
ChatCompletion および ChatCompletionChunk |
インターフェイス | |
ChatCompletionsFunctionToolCall |
ChatCompletionMessageToolCall |
インターフェイス | |
ChatRequestFunctionMessage |
ChatCompletionFunctionMessageParam |
インターフェイス | |
ChatRequestMessage |
ChatCompletionMessageParam |
インターフェイス | |
ChatRequestMessageUnion |
ChatCompletionMessageParam |
||
ChatRequestSystemMessage |
ChatCompletionSystemMessageParam |
インターフェイス | |
ChatRequestToolMessage |
ChatCompletionToolMessageParam |
インターフェイス | |
ChatRequestUserMessage |
ChatCompletionUserMessageParam |
インターフェイス | |
ChatResponseMessage |
Delta / ChatCompletionMessage |
インターフェイス | |
ChatRole |
N/A | エイリアス | |
ChatTokenLogProbabilityInfo |
TopLogprob |
インターフェイス | |
ChatTokenLogProbabilityResult |
ChatCompletionTokenLogprob |
インターフェイス | |
Choice |
Choice |
インターフェイス | |
Completions |
Completion |
インターフェイス | |
CompletionsFinishReason |
N/A | エイリアス | |
CompletionsLogProbabilityModel |
Logprobs |
インターフェイス | |
CompletionsUsage |
CompletionUsage |
インターフェイス | |
EmbeddingItem |
Embedding |
インターフェイス | |
Embeddings |
CreateEmbeddingResponse |
インターフェイス | |
EmbeddingsUsage |
CreateEmbeddingResponse.Usage |
インターフェイス | |
EventStream |
Stream |
インターフェイス | |
FunctionCall |
FunctionCall |
インターフェイス | |
FunctionCallPreset |
N/A | エイリアス | |
FunctionDefinition |
Function |
インターフェイス | |
FunctionName |
N/A | エイリアス | |
GetAudioTranscriptionOptions |
TranscriptionCreateParams |
インターフェイス | |
GetAudioTranslationOptions |
TranslationCreateParams |
インターフェイス | |
GetChatCompletionsOptions |
ChatCompletionCreateParamsNonStreaming および ChatCompletionCreateParamsStreaming |
インターフェイス | |
GetCompletionsOptions |
CompletionCreateParams |
インターフェイス | |
GetEmbeddingsOptions |
EmbeddingCreateParams |
インターフェイス | |
GetImagesOptions |
ImageGenerateParams |
インターフェイス | |
ImageGenerationData |
Image |
インターフェイス | |
ImageGenerationQuality |
N/A | エイリアス | |
ImageGenerationResponseFormat |
N/A | エイリアス | |
ImageGenerations |
ImagesResponse |
インターフェイス | |
ImageGenerationStyle |
N/A | エイリアス | |
ImageSize |
N/A | エイリアス | |
MaxTokensFinishDetails |
N/A | インターフェイス | |
OpenAIClientOptions |
AzureClientOptions |
インターフェイス | |
OpenAIError |
OpenAIError |
インターフェイス | |
OpenAIKeyCredential |
N/A | クラス | |
StopFinishDetails |
N/A | インターフェイス |
Azureの種類
AzureOpenAI は、Azure OpenAI に接続し、サービスで使用可能なすべての操作を呼び出すことができます。 ただし、要求と応答の種類は OpenAI から継承され、Azure OpenAI サービスによって排他的にサポートされる追加機能を反映するようにまだ更新されていません。 TypeScript ユーザーは、"@azure/openai/types" を @azure/openai@2.0.0-beta.1 からインポートする必要があります。この場合、Azure固有の定義が既存の型にマージされます。
移行の例セクションでは、これを行う方法を示します。