Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica solo a:Portale di Foundry (versione classica). Questo articolo non è disponibile per il nuovo portale foundry.
Altre informazioni sul nuovo portale.
Annotazioni
I collegamenti in questo articolo potrebbero aprire contenuto nella nuova documentazione di Microsoft Foundry anziché nella documentazione di Foundry (versione classica) visualizzata.
Importante
Per gli esempi di API più recenti, vedere l'articolo ciclo di vita dell'API.
Autenticazione del client
Esistono diversi modi per autenticare le richieste API per Azure OpenAI. È consigliabile usare token di Microsoft Entra ID. Per altre informazioni, vedere la documentazione Azure Identity.
Microsoft Entra ID
Esistono diversi modi per eseguire l'autenticazione con Azure OpenAI usando token di Microsoft Entra ID. Il modo predefinito consiste nell'usare la classe DefaultAzureCredential dal pacchetto @azure/identity, ma l'applicazione potrebbe usare una classe di credenziali diversa. Ai fini di questa guida, si presuppone che si stia usando la classe DefaultAzureCredential. È possibile creare credenziali come indicato di seguito:
import { DefaultAzureCredential } from "@azure/identity";
const credential = new DefaultAzureCredential();
Questo oggetto viene quindi passato al secondo argomento dei costruttori client OpenAIClient e AssistantsClient.
Per autenticare il client AzureOpenAI, tuttavia, è necessario usare la funzione getBearerTokenProvider dal pacchetto @azure/identity. Questa funzione crea un provider di token che AzureOpenAI usa internamente per ottenere i token per ogni richiesta. Il provider di token viene creato come segue:
import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
const credential = new DefaultAzureCredential();
const scope = "https://ai.azure.com/.default";
const azureADTokenProvider = getBearerTokenProvider(credential, scope);
azureADTokenProvider viene passato all'oggetto options durante la creazione del client AzureOpenAI.
(Altamente scoraggiato) Chiave API
Le chiavi API non sono consigliate per l'uso in produzione perché sono meno sicure di altri metodi di autenticazione. In precedenza, gli oggetti AzureKeyCredential venivano creati come indicato di seguito per autenticare OpenAIClient o AssistantsClient:
import { AzureKeyCredential } from "@azure/openai";
const apiKey = new AzureKeyCredential("your API key");
D’altra parte, è possibile eseguire l'autenticazione di AzureOpenAI con una chiave API impostando la variabile di ambiente AZURE_OPENAI_API_KEY o impostando la proprietà della stringa apiKey nell’oggetto Opzioni durante la creazione del client AzureOpenAI.
Importante
Utilizzare le chiavi API con cautela. Non includere la chiave API direttamente nel codice e non esporla mai pubblicamente. Se si usa una chiave API, archiviarla in modo sicuro in Azure Key Vault. Per altre informazioni sull'uso sicuro delle chiavi API nelle app, vedere ChiaviAPI con Azure Key Vault.
Per altre informazioni sulla sicurezza dei servizi di intelligenza artificiale, vedere Autorizzazione delle richieste a Servizi di Azure AI.
Costruzione del client
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);
L'endpoint della risorsa OpenAI Azure può essere specificato impostando l'opzione endpoint, ma può anche essere caricata dal client dalla variabile di ambiente AZURE_OPENAI_ENDPOINT. Questo è il modo consigliato per impostare l'endpoint perché consente al client di essere usato in ambienti differenti senza modificare il codice e anche per proteggere l'endpoint dall'esposizione nel codice.
Per specificare la versione dell'API, è necessario assicurarsi che il codice esistente non si interrompa tra le versioni dell'API di anteprima. Per altre informazioni sulle versioni Azure dell'API OpenAI, vedere la documentazione relativa al controllo delle versioni API. Inoltre, la proprietà deployment non è necessaria, ma è consigliabile impostarla. Dopo aver impostato deployment, viene usato come distribuzione predefinita per tutte le operazioni che lo richiedono. Se il client non è stato creato con l'opzione deployment, la proprietà model nell'oggetto opzione deve essere impostata con il nome della distribuzione. Tuttavia, le operazioni audio come audio.transcriptions.create richiedono che il client venga creato con l'opzione deployment impostata sul nome della distribuzione.
Differenze tra LE API
Esistono differenze principali tra i client OpenAIClient e AssistantsClient e il client AzureOpenAI:
- Le operazioni sono rappresentate come un elenco semplice di metodi in e
OpenAIClientAssistantsClient, ad esempioclient.getChatCompletions. InAzureOpenAIle operazioni sono raggruppate in gruppi annidati, ad esempioclient.chat.completions.create. -
OpenAIClienteAssistantsClientrinominare molti dei nomi usati nell'API OpenAI Azure. Ad esempio, il case serpente viene usato nell'API, ma nel client viene usato il case camel. InAzureOpenAIi nomi vengono mantenuti uguali a quello dell'API OpenAI Azure.
Esempi di migrazione
Nelle sezioni seguenti vengono forniti esempi di come eseguire la migrazione da OpenAIClient e AssistantsClient a AzureOpenAI.
Completamenti della chat
const result = await client.chat.completions.create({ messages, model: '', max_tokens: 100 });
Nota quanto segue:
- Il metodo
getChatCompletionsè stato sostituito dal metodochat.completions.create. - Il parametro
messagesviene ora passato nell'oggetto options con la proprietàmessages. - La proprietà
maxTokensè stata rinominata inmax_tokense il parametrodeploymentNameè stato rimosso. In genere, i nomi delle proprietà nell'oggettooptionssono uguali a quelli dell'API OpenAI di Azure, seguendo la convenzione snake case anziché la convenzione camel case usata nellaAssistantsClient. Questo vale per tutte le proprietà in tutte le richieste e le risposte nel clientAzureOpenAI. - Il parametro
deploymentNamenon è necessario se il client è stato creato con l'opzionedeployment. Se il client non è stato creato con l'opzionedeployment, la proprietàmodelnell'oggetto opzione deve essere impostata con il nome della distribuzione.
Completamento della chat in streaming
const stream = await client.chat.completions.create({ model: '', messages, max_tokens: 100, stream: true });
Azure sui tuoi dati
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"viene importato che aggiunge definizioni specifiche di Azure (ad esempio,data_sources) ai tipi client. - La proprietà
azureExtensionOptionsè stata sostituita con la proprietà internadata_sources. - La proprietà
parametersè stata aggiunta per eseguire il wrapping dei parametri dell'estensione, che rispecchia lo schema dell'API OpenAI Azure. - Le proprietà del case Camel sono state sostituite con le proprietà del case serpente.
Trascrizione audio
import { createReadStream } from "fs";
const result = await client.audio.transcriptions.create({
model: '',
file: createReadStream(audioFilePath),
});
- Il metodo
getAudioTranscriptionè stato sostituito dal metodoaudio.transcriptions.create. -
AzureOpenAIdeve essere costruito con l'opzionedeploymentimpostata sul nome della distribuzione per usare operazioni audio comeaudio.transcriptions.create. - La proprietà
modeldeve essere impostata nell'oggetto options, ma il relativo valore non viene usato nell'operazione, quindi è possibile impostarlo su qualsiasi valore. - La proprietà
fileaccetta diversi tipi, tra cuiBuffer,fs.ReadaStreameBlob, ma in questo esempio un file viene trasmesso dal disco usandofs.createReadStream.
Traduzione audio
import { createReadStream } from "fs";
const result = await client.audio.translations.create({
model: '',
file: createReadStream(audioFilePath),
});
- Il metodo
getAudioTranslationè stato sostituito dal metodoaudio.translations.create. - Tutte le altre modifiche sono le stesse dell'esempio di trascrizione audio.
Assistants
Negli esempi seguenti viene illustrato come eseguire la migrazione di alcuni metodi di AssistantsClient.
Creazione dell'assistente
const options = ...;
const assistantResponse = await assistantsClient.beta.assistants.create(
options
);
- Il metodo
createAssistantè stato sostituito dal metodobeta.assistants.create
Creazione di thread
Nell'esempio seguente viene illustrato come eseguire la migrazione della chiamata a un metodo createThread.
const assistantThread = await assistantsClient.beta.threads.create();
- Il metodo
createThreadè stato sostituito dal metodobeta.threads.create
Creazione messaggio
Nell'esempio seguente viene illustrato come eseguire la migrazione della chiamata a un metodo createMessage.
const threadResponse = await assistantsClient.beta.threads.messages.create(
assistantThread.id,
{
role,
content: message,
}
);
- Il metodo
createMessageè stato sostituito dal metodobeta.threads.messages.create. - La specifica del messaggio è stata spostata da un elenco di parametri a un oggetto.
Runs
Per eseguire un assistente in un thread, il metodo createRun viene usato per creare un'operazione e quindi viene usato un loop per interrogare lo stato dell'operazione fino a raggiungere uno stato terminale. Nell'esempio seguente viene illustrato come eseguire la migrazione della creazione e del polling dell'esecuzione.
Questo codice può essere migrato e semplificato usando il metodo createAndPoll, che crea un'esecuzione ed esegue il polling fino a quando non si trova in uno stato terminale.
const runResponse = await assistantsClient.beta.threads.runs.createAndPoll(
assistantThread.id,
{
assistant_id: assistantResponse.id,
},
{ pollIntervalMs: 500 }
);
- Il metodo
createRunè stato sostituito dai metodibeta.threads.runs.createecreateAndPoll. - Il metodo
createAndPollviene usato per creare un'esecuzione ed eseguirne il polling fino a quando non si trova in uno stato terminale.
Elaborazione dei risultati dell'esecuzione
È possibile scorrere le pagine usando il for await loop.
for await (const runMessageDatum of runMessages) {
for (const item of runMessageDatum.content) {
...
}
}
Incorporamenti
Nell'esempio seguente viene illustrato come eseguire la migrazione della chiamata a un metodo getEmbeddings.
const embeddings = await client.embeddings.create({ input, model: '' });
- Il metodo
getEmbeddingsè stato sostituito dal metodoembeddings.create. - Il parametro
inputviene ora passato nell'oggetto options con la proprietàinput. - Il parametro
deploymentNameè stato rimosso. Il parametrodeploymentNamenon è necessario se il client è stato creato con l'opzionedeployment. Se il client non è stato creato con l'opzionedeployment, la proprietàmodelnell'oggetto opzione deve essere impostata con il nome della distribuzione.
Generazione di immagini
Nell'esempio seguente viene illustrato come eseguire la migrazione della chiamata a un metodo getImages.
const results = await client.images.generate({ prompt, model: '', n, size });
- Il metodo
getImagesè stato sostituito dal metodoimages.generate. - Il parametro
promptviene ora passato nell'oggetto options con la proprietàprompt. - Il parametro
deploymentNameè stato rimosso. Il parametrodeploymentNamenon è necessario se il client è stato creato con l'opzionedeployment. Se il client non è stato creato con l'opzionedeployment, la proprietàmodelnell'oggetto opzione deve essere impostata con il nome della distribuzione.
Filtro di contenuto
I risultati del filtro del contenuto fanno parte dei tipi di risposta di completamento della chat in OpenAIClient. Tuttavia, AzureOpenAI non ha un equivalente diretto alla proprietà contentFilterResults nell'interfaccia ChatCompletion.Choice. È possibile accedere ai risultati del filtro contenuto importando "@azure/openai/types" e accedendo alla proprietà content_filter_results. Nell'esempio seguente viene illustrato come accedere ai risultati del filtro dei contenuti.
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;
...
}
- Le proprietà del case Camel sono state sostituite con le proprietà del case serpente.
-
"@azure/openai/types"viene importato che aggiunge definizioni specifiche Azure (ad esempio, content_filter_results) ai tipi client, vedere la sezione Azure types per altre informazioni.
Confronto tra tipi
Nella tabella seguente vengono esaminati diversi nomi di tipo da @azure/openai e vengono visualizzati i relativi openai equivalenti più vicini. Le differenze tra i nomi illustrano diverse modifiche indicate in precedenza. Questa tabella offre una panoramica e altri dettagli e esempi di codice sono disponibili nelle sezioni seguenti.
| Nome di tipo precedente | Nuovo tipo più vicino | Tipo di simbolo | Descrizione delle modifiche |
|---|---|---|---|
OpenAIClient |
AzureOpenAI |
Classe | Questa classe sostituisce il precedente e non ha metodi in comune con esso. Vedere la sezione su AzureOpenAI di seguito. |
AudioResult |
Transcription/Transcription |
Interfaccia | A seconda dell'operazione chiamante, le due interfacce sostituiscono quella precedente |
AudioResultFormat |
tipo di unione inline della proprietà response_format |
Alias | Non esiste |
AudioResultSimpleJson |
Transcription/Transcription |
Interfaccia | A seconda dell'operazione chiamante, le due interfacce sostituiscono quella precedente |
AudioResultVerboseJson |
N/A | Interfaccia | |
AudioSegment |
N/A | Interfaccia | |
AudioTranscriptionTask |
N/A | Alias | |
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 | Interfacce e alias | Vedere la sezione tipi di Azure di seguito |
AzureKeyCredential |
N/A | Classe | La chiave API può essere fornita come valore stringa |
ChatChoice |
ChatCompletion.Choice |
Interfaccia | |
ChatChoiceLogProbabilityInfo |
Logprobs |
Interfaccia | |
ChatCompletions |
ChatCompletion e ChatCompletionChunk |
Interfaccia | |
ChatCompletionsFunctionToolCall |
ChatCompletionMessageToolCall |
Interfaccia | |
ChatRequestFunctionMessage |
ChatCompletionFunctionMessageParam |
Interfaccia | |
ChatRequestMessage |
ChatCompletionMessageParam |
Interfaccia | |
ChatRequestMessageUnion |
ChatCompletionMessageParam |
||
ChatRequestSystemMessage |
ChatCompletionSystemMessageParam |
Interfaccia | |
ChatRequestToolMessage |
ChatCompletionToolMessageParam |
Interfaccia | |
ChatRequestUserMessage |
ChatCompletionUserMessageParam |
Interfaccia | |
ChatResponseMessage |
Delta / ChatCompletionMessage |
Interfaccia | |
ChatRole |
N/A | Alias | |
ChatTokenLogProbabilityInfo |
TopLogprob |
Interfaccia | |
ChatTokenLogProbabilityResult |
ChatCompletionTokenLogprob |
Interfaccia | |
Choice |
Choice |
Interfaccia | |
Completions |
Completion |
Interfaccia | |
CompletionsFinishReason |
N/A | Alias | |
CompletionsLogProbabilityModel |
Logprobs |
Interfaccia | |
CompletionsUsage |
CompletionUsage |
Interfaccia | |
EmbeddingItem |
Embedding |
Interfaccia | |
Embeddings |
CreateEmbeddingResponse |
Interfaccia | |
EmbeddingsUsage |
CreateEmbeddingResponse.Usage |
Interfaccia | |
EventStream |
Stream |
Interfaccia | |
FunctionCall |
FunctionCall |
Interfaccia | |
FunctionCallPreset |
N/A | Alias | |
FunctionDefinition |
Function |
Interfaccia | |
FunctionName |
N/A | Alias | |
GetAudioTranscriptionOptions |
TranscriptionCreateParams |
Interfaccia | |
GetAudioTranslationOptions |
TranslationCreateParams |
Interfaccia | |
GetChatCompletionsOptions |
ChatCompletionCreateParamsNonStreaming e ChatCompletionCreateParamsStreaming |
Interfaccia | |
GetCompletionsOptions |
CompletionCreateParams |
Interfaccia | |
GetEmbeddingsOptions |
EmbeddingCreateParams |
Interfaccia | |
GetImagesOptions |
ImageGenerateParams |
Interfaccia | |
ImageGenerationData |
Image |
Interfaccia | |
ImageGenerationQuality |
N/A | Alias | |
ImageGenerationResponseFormat |
N/A | Alias | |
ImageGenerations |
ImagesResponse |
Interfaccia | |
ImageGenerationStyle |
N/A | Alias | |
ImageSize |
N/A | Alias | |
MaxTokensFinishDetails |
N/A | Interfaccia | |
OpenAIClientOptions |
AzureClientOptions |
Interfaccia | |
OpenAIError |
OpenAIError |
Interfaccia | |
OpenAIKeyCredential |
N/A | Classe | |
StopFinishDetails |
N/A | Interfaccia |
tipi di Azure
AzureOpenAI si connette al Azure OpenAI e può chiamare tutte le operazioni disponibili nel servizio. Tuttavia, i tipi di richieste e risposte vengono ereditati dal OpenAI e non vengono ancora aggiornati per riflettere le funzionalità aggiuntive supportate esclusivamente dal servizio OpenAI Azure. Gli utenti typeScript dovranno importare "@azure/openai/types" da @azure/openai@2.0.0-beta.1 che unisce definizioni specifiche di Azure in tipi esistenti. Esempi nella sezione Esempi di migrazione illustrano come farlo.