Migrera till OpenAI JavaScript API-biblioteket 4.x (klassisk)

Gäller endast för:Foundry-portalen (klassisk). Den här artikeln är inte tillgänglig för den nya Foundry-portalen. Läs mer om den nya portalen.

Anmärkning

Länkar i den här artikeln kan öppna innehåll i den nya Microsoft Foundry-dokumentationen i stället för den foundry-dokumentation (klassisk) som du visar nu.

Viktigt!

De senaste API-exemplen finns i artikeln OM API-livscykel.

Autentisera klienten

Det finns flera sätt att autentisera API-begäranden till Azure OpenAI. Vi rekommenderar starkt att du använder Microsoft Entra ID token. Mer information finns i dokumentationen Azure Identity.

Microsoft Entra ID

Det finns flera sätt att autentisera med Azure OpenAI med hjälp av Microsoft Entra ID token. Standardsättet är att använda klassen DefaultAzureCredential från paketet @azure/identity, men programmet kanske använder en annan klass för autentiseringsuppgifter. I den här guiden förutsätter vi att du använder DefaultAzureCredential klassen. Du kan skapa en autentiseringsuppgift på följande sätt:

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

Skicka det här objektet till konstruktorns OpenAIClient andra argument.

För att kunna autentisera AzureOpenAI-klienten måste vi dock använda funktionen getBearerTokenProvider från paketet @azure/identity. Den här funktionen skapar en tokenprovider som AzureOpenAI använder internt för att hämta token för varje begäran. Tokenprovidern skapas på följande sätt:

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

azureADTokenProvider skickas till alternativobjektet när klienten skapas AzureOpenAI .

(Starkt avrådd) API-nyckel

Använd inte API-nycklar i produktion eftersom de är mindre säkra än andra autentiseringsmetoder. Tidigare skapade du AzureKeyCredential objekt på följande sätt för att autentisera OpenAIClient:

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

Å andra sidan AzureOpenAI kan autentiseras med en API-nyckel genom att ange AZURE_OPENAI_API_KEY miljövariabeln eller genom att ange strängegenskapen apiKey i alternativobjektet AzureOpenAI när klienten skapas.

Viktigt!

Använd API-nycklar med försiktighet. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt. Om du använder en API-nyckel lagrar du den på ett säkert sätt i Azure Key Vault. Mer information om hur du använder API-nycklar på ett säkert sätt i dina appar finns i API-nycklar med Azure Key Vault.

Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI services.

Konstruera klienten

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

Slutpunkten för Azure OpenAI-resursen kan anges genom att ange alternativet endpoint, men den kan också läsas in av klienten från miljövariabeln AZURE_OPENAI_ENDPOINT. Det här är det rekommenderade sättet att ange slutpunkten eftersom den tillåter att klienten används i olika miljöer utan att ändra koden och även för att skydda slutpunkten från att exponeras i koden.

API-versionen måste anges, detta är nödvändigt för att säkerställa att befintlig kod inte bryts mellan förhandsversioner av API:et. Mer information om Azure OpenAI API-versioner finns i dokumentationen om API-versionshantering. Dessutom krävs inte egenskapen deployment , men vi rekommenderar att du anger den. När deployment har ställts in används den som standarddistribution för alla åtgärder som kräver det. Om klienten inte skapas med deployment-alternativet, ska model-egenskapen i alternativobjektet anges med distributionsnamnet. Ljudåtgärder som audio.transcriptions.create kräver dock att klienten skapas med deployment alternativet inställt på distributionsnamnet.

Skillnader i API:er

Klienterna OpenAIClient och AzureOpenAI har viktiga skillnader:

  • OpenAIClient presenterar åtgärder som en platt lista över metoder, till exempel client.getChatCompletions. AzureOpenAI gruppera åtgärder i kapslade grupper, till exempel client.chat.completions.create.
  • OpenAIClientanvänder andra namn än Azure OpenAI API. Till exempel använder API:et snake case, men klienten använder camel case. AzureOpenAIanvänder samma namn som Azure OpenAI API.

Migreringsexempel

Följande avsnitt innehåller exempel på hur du migrerar från OpenAIClient till AzureOpenAI.

Chatten har slutförts

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

Notera följande:

  • Metoden getChatCompletions har ersatts med chat.completions.create -metoden.
  • Parametern messages skickas nu i alternativobjektet med egenskapen messages .
  • Byt namn på maxTokens egenskapen till max_tokens och ta bort parametern deploymentName . I allmänhet är namnen på egenskaperna i options objektet desamma som i Azure OpenAI API. API:t använder snake case i stället för den camel case-konvention som används i OpenAIClient. Den här namngivningskonventionen gäller för alla egenskaper för alla begäranden och svar i AzureOpenAI klienten.
  • Parametern deploymentName behövs inte om klienten skapades med alternativet deployment . Om klienten inte har skapats med deployment-alternativet, bör model-egenskapen i alternativobjektet anges med distributionsnamnet.

Slutförande av direktuppspelningschatt

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

Azure för dina data

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" importeras vilket lägger till Azure-specifika definitioner (till exempel data_sources) till klienttyperna.
  • Egenskapen azureExtensionOptions har ersatts med den inre data_sources egenskapen.
  • Egenskapen parameters har lagts till för att omsluta parametrarna för tillägget, vilket speglar schemat för Azure OpenAI API.
  • Camel case-egenskaper har ersatts med snake case-egenskaper.

Ljudavskrift

import { createReadStream } from "fs";

const result = await client.audio.transcriptions.create({
  model: '',
  file: createReadStream(audioFilePath),
});
  • Metoden getAudioTranscription har ersatts med audio.transcriptions.create -metoden.
  • AzureOpenAI måste konstrueras med deployment alternativet som är inställt på distributionsnamnet för att kunna använda ljudoperationer som audio.transcriptions.create.
  • Egenskapen model måste anges i alternativobjektet, men dess värde används inte i åtgärden, så du kan ställa in den på valfritt värde.
  • Egenskapen file accepterar olika typer, inklusive Buffer, fs.ReadaStreamoch Blob men i det här exemplet strömmas en fil från disken med hjälp av fs.createReadStream.

Ljudöversättning

import { createReadStream } from "fs";

const result = await client.audio.translations.create({
  model: '',
  file: createReadStream(audioFilePath),
});
  • Metoden getAudioTranslation har ersatts med audio.translations.create -metoden.
  • Alla andra ändringar är desamma som i exemplet med ljudavskrift.

Inbäddningar

I följande exempel visas hur du migrerar metodanropet getEmbeddings .

const embeddings = await client.embeddings.create({ input, model: '' });
  • Metoden getEmbeddings har ersatts med embeddings.create -metoden.
  • Parametern input skickas nu i alternativobjektet med egenskapen input .
  • Parametern deploymentName har tagits bort. Parametern deploymentName behövs inte om klienten skapades med alternativet deployment . Om klienten inte har skapats med deployment-alternativet, bör model-egenskapen i alternativobjektet anges med distributionsnamnet.

Bildgenerering

I följande exempel visas hur du migrerar metodanropet getImages .

  const results = await client.images.generate({ prompt, model: '', n, size });
  • Metoden getImages har ersatts med images.generate -metoden.
  • Parametern prompt skickas nu i alternativobjektet med egenskapen prompt .
  • Parametern deploymentName har tagits bort. Parametern deploymentName behövs inte om klienten skapades med alternativet deployment . Om klienten inte har skapats med deployment-alternativet, bör model-egenskapen i alternativobjektet anges med distributionsnamnet.

Innehållsfilter

Resultat av innehållsfilter är en del av svarstyperna för chattavslut i OpenAIClient. Har dock AzureOpenAI ingen direkt motsvarighet till contentFilterResults egenskapen i ChatCompletion.Choice gränssnittet. Du kan komma åt innehållsfilterresultatet genom att importera "@azure/openai/types" och komma åt egenskapen content_filter_results. I följande exempel visas hur du får åtkomst till resultatet av innehållsfiltret.

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;
  ...
}
  • Camel case-egenskaper har ersatts med snake case-egenskaper.
  • När "@azure/openai/types" importeras, vilket lägger till Azure-specifika definitioner (till exempel content_filter_results) till klienttyperna, se avsnittet Azure-typer för mer information.

Jämföra typer

I följande tabell utforskas flera typnamn från @azure/openai och visar deras närmaste openai motsvarande. Namnskillnaderna illustrerar flera av ovan nämnda ändringar. Den här tabellen ger en översikt och mer information och kodexempel finns i följande avsnitt.

Namn på gammal typ Närmaste nya typ Symboltyp Ändra beskrivning
OpenAIClient AzureOpenAI Class Den här klassen ersätter den förra och har inga gemensamma metoder. Se avsnittet om AzureOpenAI nedan.
AudioResult Transcription/Transcription Gränssnitt Beroende på anropsåtgärden ersätter de två gränssnitten den tidigare
AudioResultFormat inline union type för response_format egenskapen Alias Den finns inte
AudioResultSimpleJson Transcription/Transcription Gränssnitt Beroende på anropsåtgärden ersätter de två gränssnitten den tidigare
AudioResultVerboseJson N/A Gränssnitt
AudioSegment N/A Gränssnitt
AudioTranscriptionTask N/A Alias
AzureChatEnhancementConfiguration, AzureChatEnhancements, AzureChatExtensionConfiguration, AzureChatExtensionConfigurationUnion, AzureChatExtensionDataSourceResponseCitation, AzureChatExtensionsMessageContext, AzureChatExtensionType, AzureChatGroundingEnhancementConfiguration, AzureChatOCREnhancementConfiguration, AzureCosmosDBChatExtensionConfiguration, AzureCosmosDBFieldMappingOptions, AzureExtensionsOptions, AzureGroundingEnhancement, AzureGroundingEnhancementCoordinatePoint, AzureGroundingEnhancementLine, AzureGroundingEnhancementLineSpan, AzureSearchChatExtensionConfiguration, ContentFilterCitedDetectionResult, AzureSearchIndexFieldMappingOptions, AzureMachineLearningIndexChatExtensionConfiguration, ContentFilterDetectionResult, AzureSearchQueryType, ContentFilterBlocklistIdResult, ContentFilterErrorResults, ContentFilterSeverity, ContentFilterResult, ContentFilterResultsForPrompt, ContentFilterSuccessResultsForChoice, ContentFilterSuccessResultDetailsForPrompt, ContentFilterResultsForChoice, ContentFilterResultDetailsForPrompt, ElasticsearchIndexFieldMappingOptions, ElasticsearchChatExtensionConfiguration, ImageGenerationContentFilterResults, ImageGenerationPromptFilterResults, OnYourDataAccessTokenAuthenticationOptions, ElasticsearchQueryType, OnYourDataDeploymentNameVectorizationSource, OnYourDataAuthenticationOptionsUnion, OnYourDataEncodedApiKeyAuthenticationOptions, OnYourDataEndpointVectorizationSource, OnYourDataConnectionStringAuthenticationOptions, OnYourDataApiKeyAuthenticationOptions, OnYourDataKeyAndKeyIdAuthenticationOptions, OnYourDataAuthenticationOptions, PineconeChatExtensionConfiguration, OnYourDataModelIdVectorizationSource, OnYourDataSystemAssignedManagedIdentityAuthenticationOptions, OnYourDataUserAssignedManagedIdentityAuthenticationOptions, OnYourDataVectorizationSource, OnYourDataVectorizationSourceType, OnYourDataVectorizationSourceUnion, PineconeFieldMappingOptions N/A Gränssnitt och alias Se avsnittet Azure typer nedan
AzureKeyCredential N/A Class API-nyckeln kan anges som ett strängvärde
ChatChoice ChatCompletion.Choice Gränssnitt
ChatChoiceLogProbabilityInfo Logprobs Gränssnitt
ChatCompletions ChatCompletion och ChatCompletionChunk Gränssnitt
ChatCompletionsFunctionToolCall ChatCompletionMessageToolCall Gränssnitt
ChatRequestFunctionMessage ChatCompletionFunctionMessageParam Gränssnitt
ChatRequestMessage ChatCompletionMessageParam Gränssnitt
ChatRequestMessageUnion ChatCompletionMessageParam
ChatRequestSystemMessage ChatCompletionSystemMessageParam Gränssnitt
ChatRequestToolMessage ChatCompletionToolMessageParam Gränssnitt
ChatRequestUserMessage ChatCompletionUserMessageParam Gränssnitt
ChatResponseMessage Delta / ChatCompletionMessage Gränssnitt
ChatRole N/A Alias
ChatTokenLogProbabilityInfo TopLogprob Gränssnitt
ChatTokenLogProbabilityResult ChatCompletionTokenLogprob Gränssnitt
Choice Choice Gränssnitt
Completions Completion Gränssnitt
CompletionsFinishReason N/A Alias
CompletionsLogProbabilityModel Logprobs Gränssnitt
CompletionsUsage CompletionUsage Gränssnitt
EmbeddingItem Embedding Gränssnitt
Embeddings CreateEmbeddingResponse Gränssnitt
EmbeddingsUsage CreateEmbeddingResponse.Usage Gränssnitt
EventStream Stream Gränssnitt
FunctionCall FunctionCall Gränssnitt
FunctionCallPreset N/A Alias
FunctionDefinition Function Gränssnitt
FunctionName N/A Alias
GetAudioTranscriptionOptions TranscriptionCreateParams Gränssnitt
GetAudioTranslationOptions TranslationCreateParams Gränssnitt
GetChatCompletionsOptions ChatCompletionCreateParamsNonStreaming och ChatCompletionCreateParamsStreaming Gränssnitt
GetCompletionsOptions CompletionCreateParams Gränssnitt
GetEmbeddingsOptions EmbeddingCreateParams Gränssnitt
GetImagesOptions ImageGenerateParams Gränssnitt
ImageGenerationData Image Gränssnitt
ImageGenerationQuality N/A Alias
ImageGenerationResponseFormat N/A Alias
ImageGenerations ImagesResponse Gränssnitt
ImageGenerationStyle N/A Alias
ImageSize N/A Alias
MaxTokensFinishDetails N/A Gränssnitt
OpenAIClientOptions AzureClientOptions Gränssnitt
OpenAIError OpenAIError Gränssnitt
OpenAIKeyCredential N/A Class
StopFinishDetails N/A Gränssnitt

Azure-typer

AzureOpenAI ansluter till Azure OpenAI och kan anropa alla åtgärder som är tillgängliga i tjänsten. Men typerna av begäranden och svar ärvs från OpenAI och har ännu inte uppdaterats för att återspegla de ytterligare funktioner som stöds uteslutande av Azure OpenAI-tjänsten. TypeScript-användare måste importera "@azure/openai/types" från @azure/openai@2.0.0-beta.1 som sammanfogar Azure-specifika definitioner till befintliga typer. Exempel i avsnittet migreringsexempel visar hur man gör detta.