Migreren naar de OpenAI-JavaScript-API-bibliotheek 4.x (klassiek)

Alleen van toepassing op:Foundry (klassiek) portal. Dit artikel is niet beschikbaar voor de nieuwe Foundry-portal. Meer informatie over de nieuwe portal.

Opmerking

Koppelingen in dit artikel kunnen inhoud openen in de nieuwe Microsoft Foundry-documentatie in plaats van de Foundry-documentatie (klassiek) die u nu bekijkt.

Belangrijk

Raadpleeg het artikel over de LEVENSCYCLUS van de API voor de meest recente API-voorbeelden.

De client verifiëren

Er zijn verschillende manieren om API-aanvragen te verifiëren voor Azure OpenAI. We raden u ten zeerste aan om Microsoft Entra ID tokens te gebruiken. Zie de documentatie Azure Identity voor meer informatie.

Microsoft Entra ID

Er zijn verschillende manieren om te verifiëren met de Azure OpenAI met behulp van Microsoft Entra ID tokens. De standaardinstelling is om de klasse DefaultAzureCredential uit het @azure/identity-pakket te gebruiken, maar uw toepassing gebruikt mogelijk een andere referentieklasse. Voor deze handleiding gaan we ervan uit dat u de DefaultAzureCredential klasse gebruikt. U kunt als volgt aanmeldgegevens maken:

import { DefaultAzureCredential } from "@azure/identity";
const credential = new DefaultAzureCredential();

Geef dit object door aan het tweede argument van de OpenAIClient constructor.

Om de AzureOpenAI-client te verifiëren, moeten we echter de functie getBearerTokenProvider van het pakket @azure/identity gebruiken. Met deze functie maakt u een tokenprovider die AzureOpenAI intern wordt gebruikt om tokens voor elke aanvraag te verkrijgen. De tokenprovider wordt als volgt gemaakt:

import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
const credential = new DefaultAzureCredential();
const scope = "https://ai.azure.com/.default";
const azureADTokenProvider = getBearerTokenProvider(credential, scope);

azureADTokenProvider wordt doorgegeven aan het optiesobject bij het maken van de AzureOpenAI client.

(Sterk afgeraden) API-sleutel

Gebruik geen API-sleutels in productie omdat ze minder veilig zijn dan andere verificatiemethoden. Eerder hebt u als volgt objecten gemaakt AzureKeyCredential om te verifiëren OpenAIClient:

import { AzureKeyCredential } from "@azure/openai";
const apiKey = new AzureKeyCredential("your API key");

Aan de andere kant AzureOpenAI kan worden geverifieerd met een API-sleutel door de AZURE_OPENAI_API_KEY omgevingsvariabele in te stellen of door de apiKey tekenreekseigenschap in te stellen in het optiesobject bij het maken van de AzureOpenAI client.

Belangrijk

Gebruik API-sleutels met voorzichtigheid. Neem de API-sleutel niet rechtstreeks in uw code op en plaats deze nooit openbaar. Als u een API-sleutel gebruikt, slaat u deze veilig op in Azure Key Vault. Zie API-sleutels met Azure Key Vault voor meer informatie over het veilig gebruiken van API-sleutels in uw apps.

Zie Authenticate requests to Azure AI-services voor meer informatie over beveiliging van AI-services.

De client samenstellen

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);

Het eindpunt van de Azure OpenAI-resource kan worden opgegeven door de optie endpoint in te stellen, maar kan ook worden geladen door de client vanuit de omgevingsvariabele AZURE_OPENAI_ENDPOINT. Dit is de aanbevolen manier om het eindpunt in te stellen, omdat de client in verschillende omgevingen kan worden gebruikt zonder de code te wijzigen en het eindpunt ook te beschermen tegen blootstelling in de code.

De API-versie moet worden opgegeven. Dit is nodig om ervoor te zorgen dat bestaande code niet wordt verbroken tussen preview-API-versies. Raadpleeg API-versiebeheerdocumentatie voor meer informatie over Azure OpenAI API-versies. Daarnaast is de deployment eigenschap niet vereist, maar het wordt aanbevolen om in te stellen. Zodra deployment deze is ingesteld, wordt deze gebruikt als de standaardimplementatie voor alle bewerkingen waarvoor deze is vereist. Als de client niet met de deployment optie is gemaakt, moet de model eigenschap in het object Opties worden ingesteld met de implementatienaam. Audiobewerkingen zoals audio.transcriptions.create vereisen dat de client wordt gemaakt met de deployment optie die is ingesteld op de implementatienaam.

API-verschillen

De OpenAIClient en AzureOpenAI clients hebben belangrijke verschillen:

  • OpenAIClient geeft bewerkingen weer als een platte lijst met methoden, zoals client.getChatCompletions. AzureOpenAI groepeert bewerkingen in geneste groepen, zoals client.chat.completions.create.
  • OpenAIClientgebruikt andere namen dan de Azure OpenAI-API. De API gebruikt bijvoorbeeld snake case, maar de clienttoepassing gebruikt camelCase. AzureOpenAIgebruikt dezelfde namen als de Azure OpenAI-API.

Migratievoorbeelden

De volgende secties bevatten voorbeelden van het migreren van OpenAIClient naar AzureOpenAI.

Chatresultaten

const result = await client.chat.completions.create({ messages, model: '', max_tokens: 100 });

Let op het volgende:

  • De getChatCompletions methode is vervangen door de chat.completions.create methode.
  • De messages parameter wordt nu doorgegeven in het optiesobject met de messages eigenschap.
  • Wijzig de naam van de maxTokens eigenschap in max_tokens en verwijder de deploymentName parameter. Over het algemeen zijn de namen van de eigenschappen in het options object hetzelfde als in de Azure OpenAI-API. De API gebruikt snake case in plaats van de camelCase-conventie die in OpenAIClient wordt gebruikt. Deze naamconventie is van toepassing op alle eigenschappen voor alle aanvragen en antwoorden in de AzureOpenAI client.
  • De deploymentName parameter is niet nodig als de client is gemaakt met de deployment optie. Als de client niet is gemaakt met de deployment optie, moet de model eigenschap in het optieobject worden ingesteld met de implementatienaam.

Voltooiingen van streaminggesprekken

const stream = await client.chat.completions.create({ model: '', messages, max_tokens: 100, stream: true });

Azure op uw gegevens

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" wordt geïmporteerd, waarmee Azure-specifieke definities (bijvoorbeeld data_sources) worden toegevoegd aan de clienttypen.
  • De azureExtensionOptions eigenschap is vervangen door de binnenste data_sources eigenschap.
  • De eigenschap parameters is toegevoegd om de parameters van de extensie te verpakken, die het schema van de Azure OpenAI-API spiegelt.
  • Eigenschappen in camelCase zijn vervangen door snake_case eigenschappen.

Audiotranscriptie

import { createReadStream } from "fs";

const result = await client.audio.transcriptions.create({
  model: '',
  file: createReadStream(audioFilePath),
});
  • De getAudioTranscription methode is vervangen door de audio.transcriptions.create methode.
  • De AzureOpenAI moet worden geconfigureerd met de deployment-optie ingesteld op de implementatienaam om audiobewerkingen zoals audio.transcriptions.create mogelijk te maken.
  • De model eigenschap moet worden ingesteld in het optiesobject, maar de waarde wordt niet gebruikt in de bewerking, dus u kunt deze gerust instellen op een willekeurige waarde.
  • De file eigenschap accepteert verschillende typen, waaronder Buffer, fs.ReadaStreamen Blob in dit voorbeeld wordt een bestand gestreamd vanaf schijf met behulp van fs.createReadStream.

Audiovertaling

import { createReadStream } from "fs";

const result = await client.audio.translations.create({
  model: '',
  file: createReadStream(audioFilePath),
});
  • De getAudioTranslation methode is vervangen door de audio.translations.create methode.
  • Alle andere wijzigingen zijn hetzelfde als in het voorbeeld van audiotranscriptie.

Embedderingen

In het volgende voorbeeld ziet u hoe u de getEmbeddings methode-aanroep migreert.

const embeddings = await client.embeddings.create({ input, model: '' });
  • De getEmbeddings methode is vervangen door de embeddings.create methode.
  • De input parameter wordt nu doorgegeven in het optiesobject met de input eigenschap.
  • De deploymentName parameter is verwijderd. De deploymentName parameter is niet nodig als de client is gemaakt met de deployment optie. Als de client niet is gemaakt met de deployment optie, moet de model eigenschap in het optieobject worden ingesteld met de implementatienaam.

Afbeeldingsgeneratie

In het volgende voorbeeld ziet u hoe u de getImages methode-aanroep migreert.

  const results = await client.images.generate({ prompt, model: '', n, size });
  • De getImages methode is vervangen door de images.generate methode.
  • De prompt parameter wordt nu doorgegeven in het optiesobject met de prompt eigenschap.
  • De deploymentName parameter is verwijderd. De deploymentName parameter is niet nodig als de client is gemaakt met de deployment optie. Als de client niet is gemaakt met de deployment optie, moet de model eigenschap in het optieobject worden ingesteld met de implementatienaam.

Inhoudsfilter

Resultaten van inhoudsfilters maken deel uit van de antwoordtypen voor chat-voltooiingen in OpenAIClient. AzureOpenAI Heeft echter geen direct equivalent aan de contentFilterResults eigenschap in de ChatCompletion.Choice interface. De resultaten van het inhoudsfilter kunnen worden geopend door "@azure/openai/types" te importeren en toegang te krijgen tot de eigenschap content_filter_results. In het volgende voorbeeld ziet u hoe u toegang kunt krijgen tot de resultaten van het inhoudsfilter.

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;
  ...
}
  • Eigenschappen in camelCase zijn vervangen door snake_case eigenschappen.
  • "@azure/openai/types" wordt geïmporteerd, waarmee Azure-specifieke definities (bijvoorbeeld content_filter_results) worden toegevoegd aan de clienttypen, raadpleegt u de sectie Azure typen voor meer informatie.

Typen vergelijken

De volgende tabel verkent verschillende typenamen uit @azure/openai en toont de dichtstbijzijnde openai equivalent. De namen verschillen illustreren een aantal van de hierboven genoemde wijzigingen. Deze tabel bevat een overzicht en meer details en codevoorbeelden vindt u in de volgende secties.

Oude typenaam Dichtstbijzijnd nieuw type Symbooltype Beschrijving wijzigen
OpenAIClient AzureOpenAI Klasse Deze klasse vervangt het voormalige en heeft geen methoden die er gemeen mee zijn. Zie de sectie over AzureOpenAI hieronder.
AudioResult Transcription/Transcription gebruikersinterface Afhankelijk van de aanroepende bewerking vervangen de twee interfaces de vorige
AudioResultFormat inline samenvoegingstype van de response_format eigenschap Alternatieve naam Het bestaat niet
AudioResultSimpleJson Transcription/Transcription gebruikersinterface Afhankelijk van de aanroepende bewerking vervangen de twee interfaces de vorige
AudioResultVerboseJson N/A gebruikersinterface
AudioSegment N/A gebruikersinterface
AudioTranscriptionTask N/A Alternatieve naam
AzureChatEnhancementConfiguration, ContentFilterSuccessResultDetailsForPrompt, 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, 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 Interfaces en Aliassen Zie de sectie Azure typen hieronder
AzureKeyCredential N/A Klasse De API-sleutel kan worden opgegeven als tekenreekswaarde
ChatChoice ChatCompletion.Choice gebruikersinterface
ChatChoiceLogProbabilityInfo Logprobs gebruikersinterface
ChatCompletions ChatCompletion en ChatCompletionChunk gebruikersinterface
ChatCompletionsFunctionToolCall ChatCompletionMessageToolCall gebruikersinterface
ChatRequestFunctionMessage ChatCompletionFunctionMessageParam gebruikersinterface
ChatRequestMessage ChatCompletionMessageParam gebruikersinterface
ChatRequestMessageUnion ChatCompletionMessageParam
ChatRequestSystemMessage ChatCompletionSystemMessageParam gebruikersinterface
ChatRequestToolMessage ChatCompletionToolMessageParam gebruikersinterface
ChatRequestUserMessage ChatCompletionUserMessageParam gebruikersinterface
ChatResponseMessage Delta / ChatCompletionMessage gebruikersinterface
ChatRole N/A Alternatieve naam
ChatTokenLogProbabilityInfo TopLogprob gebruikersinterface
ChatTokenLogProbabilityResult ChatCompletionTokenLogprob gebruikersinterface
Choice Choice gebruikersinterface
Completions Completion gebruikersinterface
CompletionsFinishReason N/A Alternatieve naam
CompletionsLogProbabilityModel Logprobs gebruikersinterface
CompletionsUsage CompletionUsage gebruikersinterface
EmbeddingItem Embedding gebruikersinterface
Embeddings CreateEmbeddingResponse gebruikersinterface
EmbeddingsUsage CreateEmbeddingResponse.Usage gebruikersinterface
EventStream Stream gebruikersinterface
FunctionCall FunctionCall gebruikersinterface
FunctionCallPreset N/A Alternatieve naam
FunctionDefinition Function gebruikersinterface
FunctionName N/A Alternatieve naam
GetAudioTranscriptionOptions TranscriptionCreateParams gebruikersinterface
GetAudioTranslationOptions TranslationCreateParams gebruikersinterface
GetChatCompletionsOptions ChatCompletionCreateParamsNonStreaming en ChatCompletionCreateParamsStreaming gebruikersinterface
GetCompletionsOptions CompletionCreateParams gebruikersinterface
GetEmbeddingsOptions EmbeddingCreateParams gebruikersinterface
GetImagesOptions ImageGenerateParams gebruikersinterface
ImageGenerationData Image gebruikersinterface
ImageGenerationQuality N/A Alternatieve naam
ImageGenerationResponseFormat N/A Alternatieve naam
ImageGenerations ImagesResponse gebruikersinterface
ImageGenerationStyle N/A Alternatieve naam
ImageSize N/A Alternatieve naam
MaxTokensFinishDetails N/A gebruikersinterface
OpenAIClientOptions AzureClientOptions gebruikersinterface
OpenAIError OpenAIError gebruikersinterface
OpenAIKeyCredential N/A Klasse
StopFinishDetails N/A gebruikersinterface

Azure typen

AzureOpenAI maakt verbinding met de Azure OpenAI en kan alle bewerkingen aanroepen die beschikbaar zijn in de service. De typen aanvragen en antwoorden worden echter overgenomen van de OpenAI en worden nog niet bijgewerkt om de aanvullende functies weer te geven die exclusief worden ondersteund door de Azure OpenAI-service. TypeScript-gebruikers moeten "@azure/openai/types" importeren uit @azure/openai@2.0.0-beta.1 waarmee Azure specifieke definities worden samengevoegd in bestaande typen. Voorbeelden in de sectie Migratievoorbeelden laten zien hoe je dit moet doen.