Växla mellan OpenAI- och Azure OpenAI-slutpunkter

Den här artikeln visar hur du växlar till den nya enhetliga slutpunkten för slutförande av OpenAI v1-chatt. Den omfattar vanliga ändringar och skillnader när du arbetar med OpenAI och Azure OpenAI.

OpenAI och Azure OpenAI förlitar sig på ett vanligt Python-klientbibliotek, men du behövde göra små ändringar i koden för att växla fram och tillbaka mellan slutpunkterna. Den nya enhetliga slutpunkten för slutförande av OpenAI v1-chatt eliminerar behovet av separata Azure-specifika kodsökvägar.

Authentication

Vi rekommenderar nyckellös autentisering med hjälp av Microsoft Entra-ID. Om det inte är möjligt använder du en API-nyckel och lagrar den i Azure Key Vault. Du kan använda en miljövariabel för testning utanför dina Azure-miljöer.

API-nyckelautentisering

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY")
)

Microsoft Entra-autentisering

Microsoft Entra-autentisering stöds endast med Azure OpenAI-resurser. Slutför följande steg:

  1. Installera Azure Identity-klientbiblioteket:

    pip install azure-identity
    
  2. Konfigurera OpenAI-klientobjektet på följande sätt:

    from azure.identity import DefaultAzureCredential, get_bearer_token_provider
    from openai import OpenAI
    
    credential = DefaultAzureCredential()
    token_provider = get_bearer_token_provider(
        credential,
        "https://cognitiveservices.azure.com/.default"
    )
    
    client = OpenAI(
        base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/", 
        api_key = token_provider,
    )
    

    Tips/Råd

    DefaultAzureCredential kan optimeras för den miljö där appen körs. Mer information finns i Anpassa StandardAzureCredential.

  3. Tilldela lämpliga behörigheter för rollbaserad åtkomstkontroll i Azure (RBAC). Mer information finns i Rollbaserad åtkomstkontroll i Azure (RBAC).

    När du kör i Azure tilldelar du roller till den hanterade identitet som används av Azure-värdresursen. När du kör i den lokala utvecklingsmiljön tilldelar du roller till den användare som kör appen.

using OpenAI;
using System;
using System.ClientModel;

string apiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY");
OpenAIClient client = new(new ApiKeyCredential(apiKey));

Microsoft Entra-autentisering

Microsoft Entra-autentisering stöds endast med Azure OpenAI-resurser. Slutför följande steg:

  1. Installera Azure Identity-klientbiblioteket:

    dotnet add package Azure.Identity
    
  2. Konfigurera OpenAIClient-objektet enligt följande:

    using Azure.Identity;
    using OpenAI;
    using System;
    using System.ClientModel.Primitives;
    
    // code omitted for brevity
    
    DefaultAzureCredential credential = new();
    BearerTokenPolicy tokenPolicy = new(credential, "https://cognitiveservices.azure.com/.default");
    
    OpenAIClientOptions clientOptions = new()
    {
        Endpoint = new Uri($"{resourceEndpoint}/openai/v1/")
    };
    
    OpenAIClient client = new(tokenPolicy, clientOptions);
    

    Tips/Råd

    DefaultAzureCredential kan optimeras för den miljö där appen körs. Mer information finns i Anpassa StandardAzureCredential.

  3. Tilldela lämpliga behörigheter för rollbaserad åtkomstkontroll i Azure (RBAC). Mer information finns i Rollbaserad åtkomstkontroll i Azure (RBAC).

    När du kör i Azure tilldelar du roller till den hanterade identitet som används av Azure-värdresursen. När du kör i den lokala utvecklingsmiljön tilldelar du roller till den användare som kör appen.

import { OpenAI } from "openai";
import "dotenv/config";

const apiKey = process.env["OPENAI_API_KEY"];

if (!endpoint) {
  throw new Error("Please set the OPENAI_API_KEY environment variable.");
}

const client = new OpenAI({ apiKey });

Microsoft Entra-autentisering

Microsoft Entra-autentisering stöds endast med Azure OpenAI-resurser. Slutför följande steg:

  1. Installera Azure Identity-klientbiblioteket:

    npm install @azure/identity
    
  2. Konfigurera OpenAI-klientobjektet på följande sätt:

    import { OpenAI } from "openai";
    import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
    import "dotenv/config";
    
    const endpoint = process.env["AZURE_OPENAI_ENDPOINT"];
    
    if (!endpoint) {
      throw new Error("Please set the AZURE_OPENAI_ENDPOINT environment variable.");
    }
    
    const scope = "https://cognitiveservices.azure.com/.default";
    const azureADTokenProvider = getBearerTokenProvider(new DefaultAzureCredential(), scope);
    const client = new OpenAI({ baseURL: endpoint + "/openai/v1", apiKey: azureADTokenProvider });
    

    Tips/Råd

    DefaultAzureCredential kan optimeras för den miljö där appen körs. Mer information finns i Anpassa StandardAzureCredential.

  3. Tilldela lämpliga behörigheter för rollbaserad åtkomstkontroll i Azure (RBAC). Mer information finns i Rollbaserad åtkomstkontroll i Azure (RBAC).

    När du kör i Azure tilldelar du roller till den hanterade identitet som används av Azure-värdresursen. När du kör i den lokala utvecklingsmiljön tilldelar du roller till den användare som kör appen.

import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;

public class OpenAISample {

    public static void main(String[] args) {
        OpenAIClient openAIClient = OpenAIOkHttpClient.builder()
                .apiKey(System.getenv("OPENAI_API_KEY"))
                .build();
    }
}

Microsoft Entra-autentisering

Microsoft Entra-autentisering stöds endast med Azure OpenAI-resurser. Slutför följande steg:

  1. Inkludera azure-identity-beroendet i projektet.

  2. Konfigurera OpenAIClient-objektet enligt följande:

    import com.azure.identity.AuthenticationUtil;
    import com.azure.identity.DefaultAzureCredential;
    import com.azure.identity.DefaultAzureCredentialBuilder;
    import com.openai.client.OpenAIClient;
    import com.openai.client.okhttp.OpenAIOkHttpClient;
    import com.openai.credential.BearerTokenCredential;
    
    import java.util.function.Supplier;
    
    public class AzureOpenAISample {
    
        public static void main(String[] args) {
            DefaultAzureCredential tokenCredential = new DefaultAzureCredentialBuilder().build();
            Supplier<String> bearerTokenSupplier = AuthenticationUtil.getBearerTokenSupplier(
                    tokenCredential, "https://cognitiveservices.azure.com/.default");
            OpenAIClient azureOpenAIClient = OpenAIOkHttpClient.builder()
                    .fromEnv()
                    // Set the Azure Entra ID
                    .credential(BearerTokenCredential.create(bearerTokenSupplier))
                    .build();
        }
    }
    

    Tips/Råd

    DefaultAzureCredential kan optimeras för den miljö där appen körs. Mer information finns i Anpassa StandardAzureCredential.

  3. Tilldela lämpliga behörigheter för rollbaserad åtkomstkontroll i Azure (RBAC). Mer information finns i Rollbaserad åtkomstkontroll i Azure (RBAC).

    När du kör i Azure tilldelar du roller till den hanterade identitet som används av Azure-värdresursen. När du kör i den lokala utvecklingsmiljön tilldelar du roller till den användare som kör appen.

// import (
//    "github.com/openai/openai-go/v3"
//    "github.com/openai/openai-go/v3/option"
// )

client := openai.NewClient(
    option.WithAPIKey(os.Getenv("OPENAI_API_KEY")),
)

Microsoft Entra-autentisering

Microsoft Entra-autentisering stöds endast med Azure OpenAI-resurser. Slutför följande steg:

  1. Inkludera azure-identity-beroendet i projektet.

  2. Konfigurera OpenAIClient-objektet enligt följande:

    // import (
    //    "github.com/openai/openai-go/v3"
    //    "github.com/openai/openai-go/v3/azure"
    //    "github.com/openai/openai-go/v3/option"
    // )
    
    client := openai.NewClient(
        option.WithBaseURL("https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"),
        azure.WithTokenCredential(cred),
    )
    

    Tips/Råd

    DefaultAzureCredential kan optimeras för den miljö där appen körs. Mer information finns i Anpassa StandardAzureCredential.

  3. Tilldela lämpliga behörigheter för rollbaserad åtkomstkontroll i Azure (RBAC). Mer information finns i Rollbaserad åtkomstkontroll i Azure (RBAC).

    När du kör i Azure tilldelar du roller till den hanterade identitet som används av Azure-värdresursen. När du kör i den lokala utvecklingsmiljön tilldelar du roller till den användare som kör appen.

Ange modellen

OpenAI använder nyckelordsargumentet model för att ange vilken modell som ska användas. Azure OpenAI har begreppet unika modelldistributioner. När du använder Azure OpenAI model bör du referera till det underliggande distributionsnamnet som du valde när du distribuerade modellen.

Viktigt!

Azure OpenAI och OpenAI hanterar modellnamn på olika sätt i API-anrop. OpenAI behöver bara modellnamnet. Azure OpenAI behöver alltid distributionsnamnet, även när du använder modellparametern. Du måste använda distributionsnamnet i stället för modellnamnet när du anropar Azure OpenAI-API:er. Vår dokumentation visar ofta distributionsnamn som matchar modellnamn för att visa vilken modell som fungerar med varje API-slutpunkt. Välj valfri namngivningskonvention för distributionsnamn som fungerar bäst för dig.

response = client.responses.create(   
    model="gpt-4.1-nano", 
    input="This is a test."
)

chat_completion = client.chat.completions.create(
    model="gpt-4o", 
    messages="<messages>"
)

embedding = client.embeddings.create(
    model="text-embedding-3-large", 
    input="<input>"
)

OpenAI använder parametern model för att ange vilken modell som ska användas. Azure OpenAI har begreppet unika modelldistributioner. När du använder Azure OpenAI model bör du referera till det underliggande distributionsnamnet som du valde när du distribuerade modellen.

Viktigt!

Azure OpenAI och OpenAI hanterar modellnamn på olika sätt i API-anrop. OpenAI behöver bara modellnamnet. Azure OpenAI behöver alltid distributionsnamnet, även när du använder modellparametern. Du måste använda distributionsnamnet i stället för modellnamnet när du anropar Azure OpenAI-API:er. Vår dokumentation visar ofta distributionsnamn som matchar modellnamn för att visa vilken modell som fungerar med varje API-slutpunkt. Välj valfri namngivningskonvention för distributionsnamn som fungerar bäst för dig.

string modelName = "gpt-4.1-nano";
OpenAIResponseClient response = client.GetOpenAIResponseClient(modelName);

modelName = "gpt-4o";
ChatClient chatCompletion = client.GetChatClient(modelName);

modelName = "text-embedding-3-large";
EmbeddingClient embedding = client.GetEmbeddingClient(modelName);

OpenAI använder nyckelordsargumentet model för att ange vilken modell som ska användas. Azure OpenAI har begreppet unika modelldistributioner. När du använder Azure OpenAI model bör du referera till det underliggande distributionsnamnet som du valde när du distribuerade modellen.

Viktigt!

Azure OpenAI och OpenAI hanterar modellnamn på olika sätt i API-anrop. OpenAI behöver bara modellnamnet. Azure OpenAI behöver alltid distributionsnamnet, även när du använder modellparametern. Du måste använda distributionsnamnet i stället för modellnamnet när du anropar Azure OpenAI-API:er. Vår dokumentation visar ofta distributionsnamn som matchar modellnamn för att visa vilken modell som fungerar med varje API-slutpunkt. Välj valfri namngivningskonvention för distributionsnamn som fungerar bäst för dig.

const response = await client.responses.create({
  model: "gpt-4.1-nano",
  input: "This is a test",
});

const chatCompletions = await client.chat.completions.create({
  model: "gpt-4o",
  messages: ["<messages>"],
});

const embeddings = await client.embeddings.create({
  model: "text-embedding-3-large",
  input: "<input>",
});

OpenAI använder nyckelordsargumentet model för att ange vilken modell som ska användas. Azure OpenAI har begreppet unika modelldistributioner. När du använder Azure OpenAI model bör du referera till det underliggande distributionsnamnet som du valde när du distribuerade modellen.

Viktigt!

Azure OpenAI och OpenAI hanterar modellnamn på olika sätt i API-anrop. OpenAI behöver bara modellnamnet. Azure OpenAI behöver alltid distributionsnamnet, även när du använder modellparametern. Du måste använda distributionsnamnet i stället för modellnamnet när du anropar Azure OpenAI-API:er. Vår dokumentation visar ofta distributionsnamn som matchar modellnamn för att visa vilken modell som fungerar med varje API-slutpunkt. Välj valfri namngivningskonvention för distributionsnamn som fungerar bäst för dig.

ResponseCreateParams responseCreateParams = ResponseCreateParams.builder()
        .input("This is a test")
        .model(ChatModel.GPT_4_1_NANO)
        .build();

Response response = client.responses().create(responseCreateParams);

ChatCompletionCreateParams chatCompletionCreateParams = ChatCompletionCreateParams.builder()
        .model(ChatModel.GPT_4O)
        .addUserMessage("<message>")
        .build();

ChatCompletion chatCompletion = client.chat().completions().create(chatCompletionCreateParams);

EmbeddingCreateParams embeddingCreateParams = EmbeddingCreateParams.builder()
        .input("<input>")
        .model(EmbeddingModel.TEXT_EMBEDDING_3_LARGE)
        .build();

CreateEmbeddingResponse createEmbeddingResponse = client.embeddings().create(embeddingCreateParams);

OpenAI använder nyckelordsargumentet Model för att ange vilken modell som ska användas. Azure OpenAI har begreppet unika modelldistributioner. När du använder Azure OpenAI Model bör du referera till det underliggande distributionsnamnet som du valde när du distribuerade modellen.

Viktigt!

Azure OpenAI och OpenAI hanterar modellnamn på olika sätt i API-anrop. OpenAI behöver bara modellnamnet. Azure OpenAI behöver alltid distributionsnamnet, även när du använder modellparametern. Du måste använda distributionsnamnet i stället för modellnamnet när du anropar Azure OpenAI-API:er. Vår dokumentation visar ofta distributionsnamn som matchar modellnamn för att visa vilken modell som fungerar med varje API-slutpunkt. Välj valfri namngivningskonvention för distributionsnamn som fungerar bäst för dig.

resp, err := client.Responses.New(context.TODO(), responses.ResponseNewParams{
    Model: "gpt-4.1-nano", 
    Input: responses.ResponseNewParamsInputUnion{
        OfString: openai.String("This is a test."),
    },
})

resp, err := client.Chat.Completions.New(context.TODO(), openai.ChatCompletionNewParams{
    Model: "gpt-4o", 
    Messages: []openai.ChatCompletionMessageParamUnion{
        // messages
    },
})

resp, err := client.Embeddings.New(context.TODO(), openai.EmbeddingNewParams{
    Model: "text-embedding-3-large", 
    Input: openai.EmbeddingNewParamsInputUnion{
        OfString: openai.String("<input>"),
    },
})

Azure OpenAI-inbäddning har stöd för flera indata

OpenAI och Azure OpenAI stöder för närvarande indatamatriser på upp till 2 048 indataobjekt för text-embedding-ada-002. Båda kräver att maxgränsen för indatatoken per API-begäran förblir under 8 191 för den här modellen.

inputs = ["A", "B", "C"] 

embedding = client.embeddings.create(
    input=inputs,
    model="text-embedding-3-large"
)
string[] inputs = [ "A", "B", "C" ];

EmbeddingClient embedding = client.GetEmbeddingClient(
    model: "text-embedding-3-large"
).GenerateEmbedding(
    input: inputs
);
const embeddings = await client.embeddings.create({
    model: "text-embedding-3-large",
    inputs: ["A", "B", "C"],
})
EmbeddingCreateParams embeddingCreateParams = EmbeddingCreateParams.builder()
        .inputOfArrayOfStrings(List.of("A", "B", "C"))
        .model(EmbeddingModel.TEXT_EMBEDDING_3_LARGE)
        .build();

CreateEmbeddingResponse createEmbeddingResponse = client.embeddings().create(embeddingCreateParams);
resp, err := client.Embeddings.New(context.TODO(), openai.EmbeddingNewParams{
    Model: "text-embedding-3-large",
    Input: openai.EmbeddingNewParamsInputUnion{
        OfArrayOfStrings: []string{"A", "B", "C"},
    },
})