Bagikan melalui


Cara beralih antara endpoint OpenAI dan Azure OpenAI

Artikel ini memperlihatkan kepada Anda cara beralih ke titik akhir penyelesaian obrolan OpenAI v1 terpadu yang baru. Ini mencakup perubahan dan perbedaan umum saat Anda bekerja dengan OpenAI dan Azure OpenAI.

Meskipun OpenAI dan Azure OpenAI mengandalkan pustaka klien Python yang sama, ada beberapa perubahan kecil yang perlu Anda lakukan pada kode Anda untuk berpindah bolak-balik antara endpoint. Titik akhir penyelesaian obrolan OpenAI v1 terpadu baru menghilangkan kebutuhan akan jalur kode khusus Azure yang terpisah.

Authentication

Kami merekomendasikan autentikasi tanpa kunci menggunakan ID Microsoft Entra. Jika tidak memungkinkan, gunakan kunci API dan simpan di Azure Key Vault. Anda dapat menggunakan variabel lingkungan untuk pengujian di luar lingkungan Azure Anda.

Autentikasi kunci API

import os
from openai import OpenAI

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

Microsoft Entra otentikasi

Autentikasi Microsoft Entra hanya didukung dengan sumber daya Azure OpenAI. Selesaikan langkah-langkah berikut:

  1. Instal pustaka klien Azure Identity:

    pip install azure-identity
    
  2. Konfigurasikan objek klien OpenAI sebagai berikut:

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

    Petunjuk / Saran

    DefaultAzureCredential dapat dioptimalkan untuk lingkungan tempat aplikasi Anda berjalan. Untuk informasi selengkapnya, lihat Cara menyesuaikan DefaultAzureCredential.

  3. Tetapkan izin kontrol akses berbasis peran (RBAC) Azure yang sesuai. Untuk informasi selengkapnya, lihat Kontrol akses berbasis peran Azure (RBAC).

    Ketika dijalankan di Azure, tugaskan peran kepada identitas terkelola yang digunakan oleh sumber daya host Azure. Saat berjalan di lingkungan pengembangan lokal, tetapkan peran kepada pengguna yang menjalankan aplikasi.

using OpenAI;
using System;
using System.ClientModel;

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

Microsoft Entra otentikasi

Autentikasi Microsoft Entra hanya didukung dengan sumber daya Azure OpenAI. Selesaikan langkah-langkah berikut:

  1. Instal pustaka klien Azure Identity:

    dotnet add package Azure.Identity
    
  2. Konfigurasikan OpenAIClient objek sebagai berikut:

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

    Petunjuk / Saran

    DefaultAzureCredential dapat dioptimalkan untuk lingkungan tempat aplikasi Anda berjalan. Untuk informasi selengkapnya, lihat Cara menyesuaikan DefaultAzureCredential.

  3. Tetapkan izin kontrol akses berbasis peran (RBAC) Azure yang sesuai. Untuk informasi selengkapnya, lihat Kontrol akses berbasis peran Azure (RBAC).

    Ketika dijalankan di Azure, tugaskan peran kepada identitas terkelola yang digunakan oleh sumber daya host Azure. Saat berjalan di lingkungan pengembangan lokal, tetapkan peran kepada pengguna yang menjalankan aplikasi.

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 otentikasi

Autentikasi Microsoft Entra hanya didukung dengan sumber daya Azure OpenAI. Selesaikan langkah-langkah berikut:

  1. Instal pustaka klien Azure Identity:

    npm install @azure/identity
    
  2. Konfigurasikan objek klien OpenAI sebagai berikut:

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

    Petunjuk / Saran

    DefaultAzureCredential dapat dioptimalkan untuk lingkungan tempat aplikasi Anda berjalan. Untuk informasi selengkapnya, lihat Cara menyesuaikan DefaultAzureCredential.

  3. Tetapkan izin kontrol akses berbasis peran (RBAC) Azure yang sesuai. Untuk informasi selengkapnya, lihat Kontrol akses berbasis peran Azure (RBAC).

    Ketika dijalankan di Azure, tugaskan peran kepada identitas terkelola yang digunakan oleh sumber daya host Azure. Saat berjalan di lingkungan pengembangan lokal, tetapkan peran kepada pengguna yang menjalankan aplikasi.

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 otentikasi

Autentikasi Microsoft Entra hanya didukung dengan sumber daya Azure OpenAI. Selesaikan langkah-langkah berikut:

  1. Sertakan dependensi azure-identity dalam proyek Anda.

  2. Konfigurasikan OpenAIClient objek sebagai berikut:

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

    Petunjuk / Saran

    DefaultAzureCredential dapat dioptimalkan untuk lingkungan tempat aplikasi Anda berjalan. Untuk informasi selengkapnya, lihat Cara menyesuaikan DefaultAzureCredential.

  3. Tetapkan izin kontrol akses berbasis peran (RBAC) Azure yang sesuai. Untuk informasi selengkapnya, lihat Kontrol akses berbasis peran Azure (RBAC).

    Ketika dijalankan di Azure, tugaskan peran kepada identitas terkelola yang digunakan oleh sumber daya host Azure. Saat berjalan di lingkungan pengembangan lokal, tetapkan peran kepada pengguna yang menjalankan aplikasi.

// 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 otentikasi

Autentikasi Microsoft Entra hanya didukung dengan sumber daya Azure OpenAI. Selesaikan langkah-langkah berikut:

  1. Sertakan dependensi azure-identity dalam proyek Anda.

  2. Konfigurasikan OpenAIClient objek sebagai berikut:

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

    Petunjuk / Saran

    DefaultAzureCredential dapat dioptimalkan untuk lingkungan tempat aplikasi Anda berjalan. Untuk informasi selengkapnya, lihat Cara menyesuaikan DefaultAzureCredential.

  3. Tetapkan izin kontrol akses berbasis peran (RBAC) Azure yang sesuai. Untuk informasi selengkapnya, lihat Kontrol akses berbasis peran Azure (RBAC).

    Ketika dijalankan di Azure, tugaskan peran kepada identitas terkelola yang digunakan oleh sumber daya host Azure. Saat berjalan di lingkungan pengembangan lokal, tetapkan peran kepada pengguna yang menjalankan aplikasi.

Tentukan model

OpenAI menggunakan model argumen kata kunci untuk menentukan model apa yang akan digunakan. Azure OpenAI memiliki konsep penyebaran model unik. Saat Anda menggunakan Azure OpenAI, model harus merujuk ke nama penyebaran yang mendasari yang Anda pilih saat Anda menyebarkan model.

Penting

Azure OpenAI dan OpenAI menangani nama model secara berbeda dalam panggilan API. OpenAI hanya membutuhkan nama model. Azure OpenAI selalu memerlukan nama penyebaran, bahkan ketika Anda menggunakan parameter model. Anda harus menggunakan nama penyebaran alih-alih nama model saat memanggil API Azure OpenAI. Dokumentasi kami sering menunjukkan nama penyebaran yang cocok dengan nama model untuk menunjukkan model mana yang berfungsi dengan setiap titik akhir API. Pilihlah konvensi penamaan apa saja untuk nama penyebaran yang paling sesuai bagi Anda.

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 menggunakan model parameter untuk menentukan model apa yang akan digunakan. Azure OpenAI memiliki konsep penyebaran model unik. Saat Anda menggunakan Azure OpenAI, model harus merujuk ke nama penyebaran yang mendasari yang Anda pilih saat Anda menyebarkan model.

Penting

Azure OpenAI dan OpenAI menangani nama model secara berbeda dalam panggilan API. OpenAI hanya membutuhkan nama model. Azure OpenAI selalu memerlukan nama penyebaran, bahkan ketika Anda menggunakan parameter model. Anda harus menggunakan nama penyebaran alih-alih nama model saat memanggil API Azure OpenAI. Dokumentasi kami sering menunjukkan nama penyebaran yang cocok dengan nama model untuk menunjukkan model mana yang berfungsi dengan setiap titik akhir API. Pilihlah konvensi penamaan apa saja untuk nama penyebaran yang paling sesuai bagi Anda.

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 menggunakan model argumen kata kunci untuk menentukan model apa yang akan digunakan. Azure OpenAI memiliki konsep penyebaran model unik. Saat Anda menggunakan Azure OpenAI, model harus merujuk ke nama penyebaran yang mendasari yang Anda pilih saat Anda menyebarkan model.

Penting

Azure OpenAI dan OpenAI menangani nama model secara berbeda dalam panggilan API. OpenAI hanya membutuhkan nama model. Azure OpenAI selalu memerlukan nama penyebaran, bahkan ketika Anda menggunakan parameter model. Anda harus menggunakan nama penyebaran alih-alih nama model saat memanggil API Azure OpenAI. Dokumentasi kami sering menunjukkan nama penyebaran yang cocok dengan nama model untuk menunjukkan model mana yang berfungsi dengan setiap titik akhir API. Pilihlah konvensi penamaan apa saja untuk nama penyebaran yang paling sesuai bagi Anda.

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 menggunakan model argumen kata kunci untuk menentukan model apa yang akan digunakan. Azure OpenAI memiliki konsep penyebaran model unik. Saat Anda menggunakan Azure OpenAI, model harus merujuk ke nama penyebaran yang mendasari yang Anda pilih saat Anda menyebarkan model.

Penting

Azure OpenAI dan OpenAI menangani nama model secara berbeda dalam panggilan API. OpenAI hanya membutuhkan nama model. Azure OpenAI selalu memerlukan nama penyebaran, bahkan ketika Anda menggunakan parameter model. Anda harus menggunakan nama penyebaran alih-alih nama model saat memanggil API Azure OpenAI. Dokumentasi kami sering menunjukkan nama penyebaran yang cocok dengan nama model untuk menunjukkan model mana yang berfungsi dengan setiap titik akhir API. Pilihlah konvensi penamaan apa saja untuk nama penyebaran yang paling sesuai bagi Anda.

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 menggunakan Model argumen kata kunci untuk menentukan model apa yang akan digunakan. Azure OpenAI memiliki konsep penyebaran model unik. Saat Anda menggunakan Azure OpenAI, Model harus merujuk ke nama penyebaran yang mendasari yang Anda pilih saat Anda menyebarkan model.

Penting

Azure OpenAI dan OpenAI menangani nama model secara berbeda dalam panggilan API. OpenAI hanya membutuhkan nama model. Azure OpenAI selalu memerlukan nama penyebaran, bahkan ketika Anda menggunakan parameter model. Anda harus menggunakan nama penyebaran alih-alih nama model saat memanggil API Azure OpenAI. Dokumentasi kami sering menunjukkan nama penyebaran yang cocok dengan nama model untuk menunjukkan model mana yang berfungsi dengan setiap titik akhir API. Pilihlah konvensi penamaan apa saja untuk nama penyebaran yang paling sesuai bagi Anda.

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

Penyematan Azure OpenAI dukung input berganda

OpenAI dan Azure OpenAI saat ini mendukung array input hingga 2.048 item input untuk text-embedding-ada-002. Keduanya memerlukan batas token input maksimum per permintaan API agar tetap di bawah 8.191 untuk model ini.

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