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.
Visualizzazione attuale:Versione del portale Foundry (versione classica) - Passa alla versione per il nuovo portale Foundry
Nota
I collegamenti in questo articolo potrebbero aprire contenuto nella nuova documentazione di Microsoft Foundry anziché nella documentazione di Foundry (versione classica) visualizzata.
Questo articolo fornisce indicazioni sulla migrazione delle applicazioni da Azure AI Inference SDK a OpenAI SDK. OpenAI SDK offre compatibilità più ampia, accesso alle funzionalità OpenAI più recenti e codice semplificato con modelli unificati in Azure OpenAI e Foundry Models.
Nota
OpenAI SDK fa riferimento alle librerie client (ad esempio il pacchetto Python openai o javaScript openai pacchetto npm) che si connettono agli endpoint API OpenAI v1. Questi SDK hanno il proprio controllo delle versioni separato dalla versione dell'API, ad esempio Go OpenAI SDK è attualmente nella versione 3, ma si connette ancora agli endpoint API OpenAI v1 con /openai/v1/ nel percorso URL.
Vantaggi della migrazione
La migrazione all'SDK OpenAI offre diversi vantaggi:
- supporto del modello Broader: funziona con Azure OpenAI nei modelli Foundry e altri modelli foundry di provider come DeepSeek e Grok
- api Unified API: usa le stesse librerie e client SDK per gli endpoint OpenAI e Azure OpenAI
- funzionalità Latest: accesso alle funzionalità OpenAI più recenti senza attendere aggiornamenti specifici di Azure
- Autenticazione semplificata: supporto predefinito per la chiave API e l'autenticazione Microsoft Entra ID
-
Controllo delle versioni api implicite: l'API v1 elimina la necessità di aggiornare
api-versionfrequentemente i parametri
Differenze principali
La tabella seguente illustra le principali differenze tra i due SDK:
| Aspetto | AZURE AI Inference SDK | OpenAI SDK |
|---|---|---|
| Classe client | ChatCompletionsClient |
OpenAI |
| Formato endpoint | https://<resource>.services.ai.azure.com/models |
https://<resource>.openai.azure.com/openai/v1/ |
| Versione dell'API | Obbligatorio nell'URL o nel parametro | Non obbligatorio (usa l'API v1) |
| Parametro del modello | Facoltativo (per endpoint multimodelli) | Obbligatorio (nome della distribuzione) |
| Autenticazione | credenziali Azure solo | Chiave API o credenziali di Azure |
Installazione
Installare OpenAI SDK:
pip install openai
Per l'autenticazione Microsoft Entra ID, installare anche:
pip install azure-identity
Configurazione client
Con l'autenticazione con chiave API:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
base_url="https://<resource>.openai.azure.com/openai/v1/",
)
Con l'autenticazione Microsoft Entra ID:
from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(),
"https://ai.azure.com/.default"
)
client = OpenAI(
base_url="https://<resource>.openai.azure.com/openai/v1/",
api_key=token_provider,
)
Completamenti della chat
completion = client.chat.completions.create(
model="DeepSeek-V3.1", # Required: your deployment name
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is Azure AI?"}
]
)
print(completion.choices[0].message.content)
Streaming
stream = client.chat.completions.create(
model="DeepSeek-V3.1",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Write a poem about Azure."}
],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
Incorporamenti
from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(DefaultAzureCredential(),
"https://ai.azure.com/.default")
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key = token_provider,
)
response = client.embeddings.create(
input = "How do I use Python in VS Code?",
model = "text-embedding-3-large" // Use the name of your deployment
)
print(response.data[0].embedding)
Installazione
Installare OpenAI SDK:
dotnet add package OpenAI
Per l'autenticazione Microsoft Entra ID, installare anche:
dotnet add package Azure.Identity
Configurazione client
Con l'autenticazione con chiave API:
using OpenAI;
using OpenAI.Chat;
using System.ClientModel;
ChatClient client = new(
model: "gpt-4o-mini", // Your deployment name
credential: new ApiKeyCredential(Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY")),
options: new OpenAIClientOptions() {
Endpoint = new Uri("https://<resource>.openai.azure.com/openai/v1/")
}
);
Con l'autenticazione Microsoft Entra ID:
using Azure.Identity;
using OpenAI;
using OpenAI.Chat;
using System.ClientModel.Primitives;
#pragma warning disable OPENAI001
BearerTokenPolicy tokenPolicy = new(
new DefaultAzureCredential(),
"https://ai.azure.com/.default"
);
ChatClient client = new(
model: "gpt-4o-mini", // Your deployment name
authenticationPolicy: tokenPolicy,
options: new OpenAIClientOptions() {
Endpoint = new Uri("https://<resource>.openai.azure.com/openai/v1/")
}
);
Completamenti della chat
using OpenAI.Chat;
ChatCompletion completion = client.CompleteChat(
new SystemChatMessage("You are a helpful assistant."),
new UserChatMessage("What is Azure AI?")
);
Console.WriteLine(completion.Content[0].Text);
Streaming
using OpenAI.Chat;
CollectionResult<StreamingChatCompletionUpdate> updates = client.CompleteChatStreaming(
new SystemChatMessage("You are a helpful assistant."),
new UserChatMessage("Write a poem about Azure.")
);
foreach (StreamingChatCompletionUpdate update in updates)
{
foreach (ChatMessageContentPart part in update.ContentUpdate)
{
Console.Write(part.Text);
}
}
Incorporamenti
using OpenAI;
using OpenAI.Embeddings;
using System.ClientModel;
EmbeddingClient client = new(
"text-embedding-3-small",
credential: new ApiKeyCredential("API-KEY"),
options: new OpenAIClientOptions()
{
Endpoint = new Uri("https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1")
}
);
string input = "This is a test";
OpenAIEmbedding embedding = client.GenerateEmbedding(input);
ReadOnlyMemory<float> vector = embedding.ToFloats();
Console.WriteLine($"Embeddings: [{string.Join(", ", vector.ToArray())}]");
Installazione
Installare OpenAI SDK:
npm install openai
Per l'autenticazione Microsoft Entra ID, installare anche:
npm install @azure/identity
Configurazione client
Con l'autenticazione con chiave API:
import { OpenAI } from "openai";
const client = new OpenAI({
baseURL: "https://<resource>.openai.azure.com/openai/v1/",
apiKey: process.env.AZURE_OPENAI_API_KEY
});
Con l'autenticazione Microsoft Entra ID:
import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
import { OpenAI } from "openai";
const tokenProvider = getBearerTokenProvider(
new DefaultAzureCredential(),
'https://ai.azure.com/.default'
);
const client = new OpenAI({
baseURL: "https://<resource>.openai.azure.com/openai/v1/",
apiKey: tokenProvider
});
Completamenti della chat
const completion = await client.chat.completions.create({
model: "DeepSeek-V3.1", // Required: your deployment name
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "What is Azure AI?" }
]
});
console.log(completion.choices[0].message.content);
Streaming
const stream = await client.chat.completions.create({
model: "DeepSeek-V3.1",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Write a poem about Azure." }
],
stream: true
});
for await (const chunk of stream) {
if (chunk.choices[0]?.delta?.content) {
process.stdout.write(chunk.choices[0].delta.content);
}
}
Incorporamenti
import OpenAI from "openai";
import { getBearerTokenProvider, DefaultAzureCredential } from "@azure/identity";
const tokenProvider = getBearerTokenProvider(
new DefaultAzureCredential(),
'https://ai.azure.com/.default');
const client = new OpenAI({
baseURL: "https://<resource>.openai.azure.com/openai/v1/",
apiKey: tokenProvider
});
const embedding = await client.embeddings.create({
model: "text-embedding-3-large", // Required: your deployment name
input: "The quick brown fox jumped over the lazy dog",
encoding_format: "float",
});
console.log(embedding);
Installazione
Aggiungere OpenAI SDK al progetto. Controllare il repository GitHub Java di OpenAI per la versione più recente e le istruzioni di installazione.
Per l'autenticazione Microsoft Entra ID, aggiungere anche:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.18.0</version>
</dependency>
Configurazione client
Con l'autenticazione con chiave API:
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
OpenAIClient client = OpenAIOkHttpClient.builder()
.baseUrl("https://<resource>.openai.azure.com/openai/v1/")
.apiKey(System.getenv("AZURE_OPENAI_API_KEY"))
.build();
Con l'autenticazione Microsoft Entra ID:
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
DefaultAzureCredential tokenCredential = new DefaultAzureCredentialBuilder().build();
OpenAIClient client = OpenAIOkHttpClient.builder()
.baseUrl("https://<resource>.openai.azure.com/openai/v1/")
.credential(BearerTokenCredential.create(
AuthenticationUtil.getBearerTokenSupplier(
tokenCredential,
"https://ai.azure.com/.default"
)
))
.build();
Completamenti della chat
import com.openai.models.chat.completions.*;
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.addSystemMessage("You are a helpful assistant.")
.addUserMessage("What is Azure AI?")
.model("DeepSeek-V3.1") // Required: your deployment name
.build();
ChatCompletion completion = client.chat().completions().create(params);
System.out.println(completion.choices().get(0).message().content());
Streaming
import com.openai.models.chat.completions.*;
import java.util.stream.Stream;
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.addSystemMessage("You are a helpful assistant.")
.addUserMessage("Write a poem about Azure.")
.model("DeepSeek-V3.1") // Required: your deployment name
.build();
Stream<ChatCompletionChunk> stream = client.chat().completions().createStreaming(params);
stream.forEach(chunk -> {
if (chunk.choices() != null && !chunk.choices().isEmpty()) {
String content = chunk.choices().get(0).delta().content();
if (content != null) {
System.out.print(content);
}
}
});
Incorporamenti
package com.openai.example;
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.embeddings.EmbeddingCreateParams;
import com.openai.models.embeddings.EmbeddingModel;
public final class EmbeddingsExample {
private EmbeddingsExample() {}
public static void main(String[] args) {
// Configures using one of:
// - The `OPENAI_API_KEY` environment variable
// - The `OPENAI_BASE_URL` and `AZURE_OPENAI_KEY` environment variables
OpenAIClient client = OpenAIOkHttpClient.fromEnv();
EmbeddingCreateParams createParams = EmbeddingCreateParams.builder()
.input("The quick brown fox jumped over the lazy dog")
.model(EmbeddingModel.TEXT_EMBEDDING_3_SMALL)
.build();
System.out.println(client.embeddings().create(createParams));
}
}
Installazione
Installare OpenAI SDK:
go get github.com/openai/openai-go/v3
Per l'autenticazione Microsoft Entra ID, installare anche:
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
Configurazione client
Con l'autenticazione con chiave API:
import (
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/option"
)
client := openai.NewClient(
option.WithBaseURL("https://<resource>.openai.azure.com/openai/v1/"),
option.WithAPIKey(os.Getenv("AZURE_OPENAI_API_KEY")),
)
Con l'autenticazione Microsoft Entra ID:
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/azure"
"github.com/openai/openai-go/v3/option"
)
tokenCredential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
panic(err)
}
client := openai.NewClient(
option.WithBaseURL("https://<resource>.openai.azure.com/openai/v1/"),
azure.WithTokenCredential(tokenCredential),
)
Completamenti della chat
import (
"context"
"fmt"
"github.com/openai/openai-go/v3"
)
chatCompletion, err := client.Chat.Completions.New(context.TODO(), openai.ChatCompletionNewParams{
Messages: []openai.ChatCompletionMessageParamUnion{
openai.SystemMessage("You are a helpful assistant."),
openai.UserMessage("What is Azure AI?"),
},
Model: "DeepSeek-V3.1", // Required: your deployment name
})
if err != nil {
panic(err.Error())
}
fmt.Println(chatCompletion.Choices[0].Message.Content)
Streaming
import (
"context"
"fmt"
"github.com/openai/openai-go/v3"
)
stream := client.Chat.Completions.NewStreaming(context.TODO(), openai.ChatCompletionNewParams{
Messages: []openai.ChatCompletionMessageParamUnion{
openai.SystemMessage("You are a helpful assistant."),
openai.UserMessage("Write a poem about Azure."),
},
Model: "DeepSeek-V3.1", // Required: your deployment name
})
for stream.Next() {
chunk := stream.Current()
if len(chunk.Choices) > 0 && chunk.Choices[0].Delta.Content != "" {
fmt.Print(chunk.Choices[0].Delta.Content)
}
}
if err := stream.Err(); err != nil {
panic(err.Error())
}
Incorporamenti
package main
import (
"context"
"fmt"
"log"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/azure"
"github.com/openai/openai-go/v3/option"
)
func main() {
tokenCredential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("Error creating credential:%s", err)
}
// Create a client with Azure OpenAI endpoint and Entra ID credentials
client := openai.NewClient(
option.WithBaseURL("https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"),
azure.WithTokenCredential(tokenCredential),
)
inputText := "The quick brown fox jumped over the lazy dog"
// Make the embedding request synchronously
resp, err := client.Embeddings.New(context.Background(), openai.EmbeddingNewParams{
Model: openai.EmbeddingModel("text-embedding-3-large"), // Use your deployed model name on Azure
Input: openai.EmbeddingNewParamsInputUnion{
OfArrayOfStrings: []string{inputText},
},
})
if err != nil {
log.Fatalf("Failed to get embedding: %s", err)
}
if len(resp.Data) == 0 {
log.Fatalf("No embedding data returned.")
}
// Print embedding information
embedding := resp.Data[0].Embedding
fmt.Printf("Embedding Length: %d\n", len(embedding))
fmt.Println("Embedding Values:")
for _, value := range embedding {
fmt.Printf("%f, ", value)
}
fmt.Println()
}
Modelli di migrazione comuni
Gestione dei parametri del modello
-
Azure AI Inference SDK: il parametro
modelè facoltativo per gli endpoint a modello singolo, ma necessario per gli endpoint multimodello. -
OpenAI SDK: il
modelparametro è sempre obbligatorio e deve essere impostato sul nome della distribuzione.
Formato URL endpoint
-
Azure AI Inference SDK: usa
https://<resource>.services.ai.azure.com/models. -
OpenAI SDK: usa
https://<resource>.openai.azure.com/openai/v1(si connette all'API OpenAI v1).
Struttura della risposta
La struttura della risposta è simile ma presenta alcune differenze:
Azure AI Inference SDK : restituisce un oggettocon . -
OpenAI SDK: restituisce l'oggetto
ChatCompletionconchoices[].message.content.
Entrambi gli SDK forniscono modelli di accesso simili ai dati di risposta, tra cui:
- Contenuto del messaggio
- Utilizzo dei token
- Informazioni sul modello
- Motivo della conclusione
Elenco di controllo per la migrazione
Usare questo elenco di controllo per garantire una migrazione senza problemi:
- Installare OpenAI SDK per il linguaggio di programmazione
- Aggiornare il codice di autenticazione (chiave API o Microsoft Entra ID)
- Modificare gli URL degli endpoint da
.services.ai.azure.com/modelsa.openai.azure.com/openai/v1/ - Modificare l'ambito delle credenziali da
https://cognitiveservices.azure.com/.defaultahttps://ai.azure.com/.default - Aggiornare il codice di inizializzazione client
- Specificare sempre il parametro
modelcon il nome del deployment - Aggiornare le chiamate al metodo di richiesta (
complete→chat.completions.create) - Aggiornare il codice di streaming, se applicabile
- Aggiornare la gestione degli errori per usare le eccezioni OpenAI SDK
- Testare tutte le funzionalità accuratamente
- Aggiornare la documentazione e i commenti del codice
Risoluzione dei problemi
Errori di autenticazione
Se si verificano errori di autenticazione:
- Verificare che la chiave API sia corretta e non sia scaduta
- Per Microsoft Entra ID, verificare che l'applicazione disponga delle autorizzazioni corrette
- Verificare che l'ambito delle credenziali sia impostato su
https://ai.azure.com/.default
Errori dell'endpoint
Se ricevi errori dell'endpoint:
- Verificare che il formato dell'URL dell'endpoint includa
/openai/v1/alla fine. - Verificare che il nome della risorsa sia corretto.
- Verificare che la distribuzione del modello esista e sia attiva.
Errori del modello non trovati
Se si ricevono errori di tipo "modello non trovato":
- Assicurati di utilizzare il nome della distribuzione, non il nome del modello.
- Verificare che la distribuzione sia attiva nella risorsa Microsoft Foundry.
- Verificare che il nome della distribuzione corrisponda esattamente (con distinzione tra maiuscole e minuscole).