Udostępnij przez


Jak przełączać się między punktami końcowymi OpenAI i Azure OpenAI

W tym artykule przedstawiamy, jak przełączyć się na nowy zintegrowany punkt końcowy uzupełniania czatu OpenAI w wersji 1. Obejmuje ona typowe zmiany i różnice podczas pracy z usługami OpenAI i Azure OpenAI.

Chociaż interfejsy OpenAI i Azure OpenAI opierają się na wspólnej bibliotece klienta języka Python, wprowadzono niewielkie zmiany, które trzeba było wprowadzić w kodzie w celu zamiany między punktami końcowymi. Nowy ujednolicony punkt końcowy uzupełniania czatu OpenAI w wersji 1 eliminuje konieczność oddzielnych ścieżek kodu specyficznych dla platformy Azure.

Authentication

Zalecamy uwierzytelnianie bez klucza przy użyciu identyfikatora Entra firmy Microsoft. Jeśli nie jest to możliwe, użyj klucza interfejsu API i zapisz go w usłudze Azure Key Vault. Możesz użyć zmiennej środowiskowej do testowania poza środowiskami platformy Azure.

Uwierzytelnianie klucza interfejsu API

import os
from openai import OpenAI

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

Uwierzytelnianie usługi Microsoft Entra

Uwierzytelnianie Microsoft Entra jest obsługiwane tylko w przypadku zasobów usługi Azure OpenAI. Wykonaj następujące kroki:

  1. Zainstaluj bibliotekę klienta usługi Azure Identity:

    pip install azure-identity
    
  2. Skonfiguruj obiekt klienta OpenAI w następujący sposób:

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

    Wskazówka

    DefaultAzureCredential można zoptymalizować pod kątem środowiska, w którym działa aplikacja. Aby uzyskać więcej informacji, zobacz Jak dostosować DefaultAzureCredential.

  3. Przypisz odpowiednie uprawnienia kontroli dostępu opartej na rolach (RBAC) platformy Azure. Aby uzyskać więcej informacji, zobacz Kontrola dostępu oparta na rolach (RBAC) na platformie Azure.

    Podczas uruchamiania na platformie Azure przypisz role do tożsamości zarządzanej używanej przez zasób hosta platformy Azure. Podczas uruchamiania w lokalnym środowisku programistycznym przypisz role do użytkownika, na którym działa aplikacja.

using OpenAI;
using System;
using System.ClientModel;

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

Uwierzytelnianie usługi Microsoft Entra

Uwierzytelnianie Microsoft Entra jest obsługiwane tylko w przypadku zasobów usługi Azure OpenAI. Wykonaj następujące kroki:

  1. Zainstaluj bibliotekę klienta usługi Azure Identity:

    dotnet add package Azure.Identity
    
  2. OpenAIClient Skonfiguruj obiekt w następujący sposób:

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

    Wskazówka

    DefaultAzureCredential można zoptymalizować pod kątem środowiska, w którym działa aplikacja. Aby uzyskać więcej informacji, zobacz Jak dostosować DefaultAzureCredential.

  3. Przypisz odpowiednie uprawnienia kontroli dostępu opartej na rolach (RBAC) platformy Azure. Aby uzyskać więcej informacji, zobacz Kontrola dostępu oparta na rolach (RBAC) na platformie Azure.

    Podczas uruchamiania na platformie Azure przypisz role do tożsamości zarządzanej używanej przez zasób hosta platformy Azure. Podczas uruchamiania w lokalnym środowisku programistycznym przypisz role do użytkownika, na którym działa aplikacja.

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

Uwierzytelnianie usługi Microsoft Entra

Uwierzytelnianie Microsoft Entra jest obsługiwane tylko w przypadku zasobów usługi Azure OpenAI. Wykonaj następujące kroki:

  1. Zainstaluj bibliotekę klienta usługi Azure Identity:

    npm install @azure/identity
    
  2. Skonfiguruj obiekt klienta OpenAI w następujący sposób:

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

    Wskazówka

    DefaultAzureCredential można zoptymalizować pod kątem środowiska, w którym działa aplikacja. Aby uzyskać więcej informacji, zobacz Jak dostosować DefaultAzureCredential.

  3. Przypisz odpowiednie uprawnienia kontroli dostępu opartej na rolach (RBAC) platformy Azure. Aby uzyskać więcej informacji, zobacz Kontrola dostępu oparta na rolach (RBAC) na platformie Azure.

    Podczas uruchamiania na platformie Azure przypisz role do tożsamości zarządzanej używanej przez zasób hosta platformy Azure. Podczas uruchamiania w lokalnym środowisku programistycznym przypisz role do użytkownika, na którym działa aplikacja.

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

Uwierzytelnianie usługi Microsoft Entra

Uwierzytelnianie Microsoft Entra jest obsługiwane tylko w przypadku zasobów usługi Azure OpenAI. Wykonaj następujące kroki:

  1. Uwzględnij zależność azure-identity w projekcie.

  2. OpenAIClient Skonfiguruj obiekt w następujący sposób:

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

    Wskazówka

    DefaultAzureCredential można zoptymalizować pod kątem środowiska, w którym działa aplikacja. Aby uzyskać więcej informacji, zobacz Jak dostosować DefaultAzureCredential.

  3. Przypisz odpowiednie uprawnienia kontroli dostępu opartej na rolach (RBAC) platformy Azure. Aby uzyskać więcej informacji, zobacz Kontrola dostępu oparta na rolach (RBAC) na platformie Azure.

    Podczas uruchamiania na platformie Azure przypisz role do tożsamości zarządzanej używanej przez zasób hosta platformy Azure. Podczas uruchamiania w lokalnym środowisku programistycznym przypisz role do użytkownika, na którym działa aplikacja.

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

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

Uwierzytelnianie usługi Microsoft Entra

Uwierzytelnianie Microsoft Entra jest obsługiwane tylko w przypadku zasobów usługi Azure OpenAI. Wykonaj następujące kroki:

  1. Uwzględnij zależność azure-identity w projekcie.

  2. OpenAIClient Skonfiguruj obiekt w następujący sposób:

    // 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),
    )
    

    Wskazówka

    DefaultAzureCredential można zoptymalizować pod kątem środowiska, w którym działa aplikacja. Aby uzyskać więcej informacji, zobacz Jak dostosować DefaultAzureCredential.

  3. Przypisz odpowiednie uprawnienia kontroli dostępu opartej na rolach (RBAC) platformy Azure. Aby uzyskać więcej informacji, zobacz Kontrola dostępu oparta na rolach (RBAC) na platformie Azure.

    Podczas uruchamiania na platformie Azure przypisz role do tożsamości zarządzanej używanej przez zasób hosta platformy Azure. Podczas uruchamiania w lokalnym środowisku programistycznym przypisz role do użytkownika, na którym działa aplikacja.

Określanie modelu

Interfejs OpenAI używa argumentu kluczowego model , aby określić, który model ma być używany. Usługa Azure OpenAI ma koncepcję unikatowych wdrożeń modelu. Gdy używasz usługi Azure OpenAI, model powinno odnosić się do nazwy wdrożenia, którą wybrałeś podczas wdrażania modelu.

Ważne

Interfejsy Azure OpenAI i OpenAI traktują nazwy modeli inaczej w wywołaniach API. Interfejs OpenAI wymaga tylko nazwy modelu. Usługa Azure OpenAI zawsze potrzebuje nazwy wdrożenia, nawet jeśli używasz parametru modelu. Podczas wywoływania interfejsów API usługi Azure OpenAI należy użyć nazwy wdrożenia zamiast nazwy modelu. W naszej dokumentacji często przedstawiono nazwy wdrożeń, które pasują do nazw modeli, aby pokazać, który model działa z każdym punktem końcowym interfejsu API. Wybierz dowolną konwencję nazewnictwa dla nazw wdrożeń, które najlepiej ci się sprawdzają.

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

Interfejs OpenAI używa parametru model , aby określić, który model ma być używany. Usługa Azure OpenAI ma koncepcję unikatowych wdrożeń modelu. Gdy używasz usługi Azure OpenAI, model powinno odnosić się do nazwy wdrożenia, którą wybrałeś podczas wdrażania modelu.

Ważne

Interfejsy Azure OpenAI i OpenAI traktują nazwy modeli inaczej w wywołaniach API. Interfejs OpenAI wymaga tylko nazwy modelu. Usługa Azure OpenAI zawsze potrzebuje nazwy wdrożenia, nawet jeśli używasz parametru modelu. Podczas wywoływania interfejsów API usługi Azure OpenAI należy użyć nazwy wdrożenia zamiast nazwy modelu. W naszej dokumentacji często przedstawiono nazwy wdrożeń, które pasują do nazw modeli, aby pokazać, który model działa z każdym punktem końcowym interfejsu API. Wybierz dowolną konwencję nazewnictwa dla nazw wdrożeń, które najlepiej ci się sprawdzają.

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

Interfejs OpenAI używa argumentu kluczowego model , aby określić, który model ma być używany. Usługa Azure OpenAI ma koncepcję unikatowych wdrożeń modelu. Gdy używasz usługi Azure OpenAI, model powinno odnosić się do nazwy wdrożenia, którą wybrałeś podczas wdrażania modelu.

Ważne

Interfejsy Azure OpenAI i OpenAI traktują nazwy modeli inaczej w wywołaniach API. Interfejs OpenAI wymaga tylko nazwy modelu. Usługa Azure OpenAI zawsze potrzebuje nazwy wdrożenia, nawet jeśli używasz parametru modelu. Podczas wywoływania interfejsów API usługi Azure OpenAI należy użyć nazwy wdrożenia zamiast nazwy modelu. W naszej dokumentacji często przedstawiono nazwy wdrożeń, które pasują do nazw modeli, aby pokazać, który model działa z każdym punktem końcowym interfejsu API. Wybierz dowolną konwencję nazewnictwa dla nazw wdrożeń, które najlepiej ci się sprawdzają.

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>",
});

Interfejs OpenAI używa argumentu kluczowego model , aby określić, który model ma być używany. Usługa Azure OpenAI ma koncepcję unikatowych wdrożeń modelu. Gdy używasz usługi Azure OpenAI, model powinno odnosić się do nazwy wdrożenia, którą wybrałeś podczas wdrażania modelu.

Ważne

Interfejsy Azure OpenAI i OpenAI traktują nazwy modeli inaczej w wywołaniach API. Interfejs OpenAI wymaga tylko nazwy modelu. Usługa Azure OpenAI zawsze potrzebuje nazwy wdrożenia, nawet jeśli używasz parametru modelu. Podczas wywoływania interfejsów API usługi Azure OpenAI należy użyć nazwy wdrożenia zamiast nazwy modelu. W naszej dokumentacji często przedstawiono nazwy wdrożeń, które pasują do nazw modeli, aby pokazać, który model działa z każdym punktem końcowym interfejsu API. Wybierz dowolną konwencję nazewnictwa dla nazw wdrożeń, które najlepiej ci się sprawdzają.

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

Interfejs OpenAI używa argumentu kluczowego Model , aby określić, który model ma być używany. Usługa Azure OpenAI ma koncepcję unikatowych wdrożeń modelu. Gdy używasz usługi Azure OpenAI, Model powinno odnosić się do nazwy wdrożenia, którą wybrałeś podczas wdrażania modelu.

Ważne

Interfejsy Azure OpenAI i OpenAI traktują nazwy modeli inaczej w wywołaniach API. Interfejs OpenAI wymaga tylko nazwy modelu. Usługa Azure OpenAI zawsze potrzebuje nazwy wdrożenia, nawet jeśli używasz parametru modelu. Podczas wywoływania interfejsów API usługi Azure OpenAI należy użyć nazwy wdrożenia zamiast nazwy modelu. W naszej dokumentacji często przedstawiono nazwy wdrożeń, które pasują do nazw modeli, aby pokazać, który model działa z każdym punktem końcowym interfejsu API. Wybierz dowolną konwencję nazewnictwa dla nazw wdrożeń, które najlepiej ci się sprawdzają.

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>"),
    },
})

Osadzanie w usłudze Azure OpenAI obsługuje wiele danych wejściowych

OpenAI i Azure OpenAI wspierają obecnie tablice wejściowe do 2 048 elementów wejściowych dla programu text-embedding-ada-002. Oba wymagają maksymalnego limitu tokenów wejściowych dla każdego żądania API, aby pozostały poniżej 8191 dla tego modelu.

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"},
    },
})