OpenAI JavaScript API ライブラリ 4.x (クラシック) への移行

適用対象: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 を使用した API キー」を参照してください。

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固有の定義が既存の型にマージされます。 移行の例セクションでは、これを行う方法を示します。