Azure OpenAI SDK-Sprachunterstützung

Verwenden Sie die OpenAI-SDKs mit dem Azure OpenAI v1-Endpunkt, um Modell-Inference-Anwendungen in Python, C#, JavaScript, Java oder Go zu erstellen. Die Beispiele verwenden die Antwort-API für neue Anwendungen und zeigen Chatabschlusse für Anwendungen an, die weiterhin ihre nachrichtenbasierte Schnittstelle verwenden.

Voraussetzungen

  • Ein Azure-Abonnement. Erstellen Sie eine kostenlos , wenn Sie keins haben.
  • Eine Azure OpenAI-Ressource mit einer gpt-5-mini Modellbereitstellung.
  • Ihr Azure OpenAI-Ressourcenendpunkt, zhttps://YOUR-RESOURCE-NAME.openai.azure.com. B. .
  • Bei Microsoft Entra ID Authentifizierung eine Identität, die über die Berechtigung zum Ausführen von Rückschlüssen verfügt. Rollenoptionen finden Sie unter Konfigurieren Microsoft Entra ID Authentifizierung.
  • Für die API-Schlüsselauthentifizierung wird ein Azure OpenAI-Ressourcenschlüssel verwendet. Microsoft Entra ID wird für Produktionsanwendungen empfohlen.
  • Eine unterstützte Sprachlaufzeit und der Paket-Manager für die von Ihnen ausgewählte Sprache.

Der Wert in jeder Anforderung ist Ihr model Azure Modellbereitstellungsname. Die Beispiele verwenden gpt-5-mini; ersetzen Sie sie, wenn Ihre Bereitstellung einen anderen Namen hat.

| QuellcodePaket | API-Oberfläche

Die Beispiele wurden mit OpenAI 2.12.0, Azure.Identity 1.21.0 und .NET 8 getestet. Das OpenAI-Paket zielt auch auf .NET Standard 2.0 und höher .NET Versionen ab.

Installieren der Pakete

Installieren Sie die OpenAI- und Azure Identity-Pakete:

dotnet add package OpenAI
dotnet add package Azure.Identity

Die Befehle fügen ihrem Projekt beide Paketverweise hinzu.

Erstellen einer Antwort mit Microsoft Entra ID

Verwenden und BearerTokenPolicy authentifizieren Sie DefaultAzureCredential sich, ohne einen API-Schlüssel zu speichern.

using Azure.Identity;
using OpenAI.Responses;
using System.ClientModel.Primitives;

#pragma warning disable OPENAI001

var endpoint = new Uri(
    "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/");
var tokenPolicy = new BearerTokenPolicy(
    new DefaultAzureCredential(),
    "https://ai.azure.com/.default");
var openAIClient = new ResponsesClient(
    tokenPolicy,
    new ResponsesClientOptions { Endpoint = endpoint });

var response = await openAIClient.CreateResponseAsync(
    "gpt-5-mini",
    "Explain the purpose of an API in one sentence.");
Console.WriteLine(response.Value.GetOutputText());

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: ResponsesClient

Erstellen einer Antwort mit einem API-Schlüssel

API-Schlüssel werden nicht für die Produktionsverwendung empfohlen. Speichern Sie den Schlüssel in der AZURE_OPENAI_API_KEY Umgebungsvariable, anstatt ihn im Quellcode zu platzieren.

export AZURE_OPENAI_API_KEY="<your-api-key>"

Erstellen Sie dann den Client und fordern Sie Folgendes an:

using OpenAI.Responses;
using System.ClientModel;

#pragma warning disable OPENAI001

var endpoint = new Uri(
    "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/");
var apiKey = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY")
    ?? throw new InvalidOperationException("AZURE_OPENAI_API_KEY is required.");
var openAIClient = new ResponsesClient(
    new ApiKeyCredential(apiKey),
    new ResponsesClientOptions { Endpoint = endpoint });

var response = await openAIClient.CreateResponseAsync(
    "gpt-5-mini",
    "Explain the purpose of an API in one sentence.");
Console.WriteLine(response.Value.GetOutputText());

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: CreateResponseAsync

Verwenden von Chatabschlussen

Verwenden Sie für neue Anwendungen die Antwort-API. Verwenden Sie Chatabschlusse, wenn Sie die nachrichtenbasierte Schnittstelle benötigen oder eine vorhandene Anwendung verwalten.

using Azure.Identity;
using OpenAI;
using OpenAI.Chat;
using System.ClientModel.Primitives;

#pragma warning disable OPENAI001

var endpoint = new Uri(
    "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/");
var tokenPolicy = new BearerTokenPolicy(
    new DefaultAzureCredential(),
    "https://ai.azure.com/.default");
var openAIClient = new ChatClient(
    model: "gpt-5-mini",
    authenticationPolicy: tokenPolicy,
    options: new OpenAIClientOptions { Endpoint = endpoint });

var completion = await openAIClient.CompleteChatAsync([
    new SystemChatMessage("You are a helpful assistant."),
    new UserChatMessage("Explain the purpose of an API.")
]);
Console.WriteLine(completion.Value.Content[0].Text);

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: ChatClient

Streaming einer Antwort

Aufrufen und Verarbeiten von CreateResponseStreamingAsync Textdeltaaktualisierungen, wenn das Modell diese generiert:

using OpenAI.Responses;
using System.ClientModel;

#pragma warning disable OPENAI001

var endpoint = new Uri(
    "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/");
var apiKey = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY")
    ?? throw new InvalidOperationException("AZURE_OPENAI_API_KEY is required.");
var openAIClient = new ResponsesClient(
    new ApiKeyCredential(apiKey),
    new ResponsesClientOptions { Endpoint = endpoint });

// Stream text as the model generates it.
var updates = openAIClient.CreateResponseStreamingAsync(
    "gpt-5-mini",
    "Explain the purpose of an API in one sentence.");
await foreach (var update in updates)
{
    if (update is StreamingResponseOutputTextDeltaUpdate delta)
    {
        Console.Write(delta.Delta);
    }
}

Die folgende gestreamte Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: CreateResponseStreamingAsync

Behandeln von Fehlern und Wiederholungen

Der Client führt automatisch http 408-, 429-, 500-, 502-, 503- und 504-Antworten mit exponentiellem Backoff durch. Konfigurieren Sie die Wiederholungsrichtlinie über die Clientoptionen, wenn Sie ein anderes Verhalten benötigen. Erfassen Sie ClientResultException , um den HTTP-Status und Fehlerdetails für eine fehlgeschlagene Anforderung zu überprüfen.

Behalten Sie die ClientResult<T> von einem Vorgang zurückgegebene Diagnose bei, und überprüfen Sie die unformatierten Antwortheader. Fehlgeschlagene Vorgänge machen Statusinformationen über ClientResultException.

Referenz: Fehlerbehandlungs- und Clientergebnisdetails

Weitere SDK-Beispiele

Quellcode | Paket | REST-API-Referenz | Go-API-Referenz

Die Beispiele erfordern Go 1.25 oder höher. Sie wurden mit github.com/openai/openai-go/v3 3.44.0 und azidentity 1.14.0 getestet.

Installieren der Module

Installieren Sie die Module OpenAI und Azure Identity:

go get github.com/openai/openai-go/v3
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

Das /v3 Suffix ist erforderlich, da es die aktuelle Hauptversion des Go-Moduls identifiziert.

Erstellen einer Antwort mit Microsoft Entra ID

Verwenden Sie DefaultAzureCredential die Azure Authentifizierungsoption, um sich zu authentifizieren, ohne einen API-Schlüssel zu speichern.

package main

import (
	"context"
	"fmt"

	"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"
	"github.com/openai/openai-go/v3/responses"
)

func main() {
	credential, err := azidentity.NewDefaultAzureCredential(nil)
	if err != nil { panic(err) }
	endpoint := "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
	openaiClient := openai.NewClient(
		option.WithBaseURL(endpoint),
		azure.WithTokenCredential(credential, azure.WithTokenCredentialScopes(
			[]string{"https://ai.azure.com/.default"})))
	response, err := openaiClient.Responses.New(context.Background(), responses.ResponseNewParams{
		Model: openai.ChatModel("gpt-5-mini"),
		Input: responses.ResponseNewParamsInputUnion{OfString: openai.String(
			"Explain the purpose of an API in one sentence.")},
	})
	if err != nil { panic(err) }
	fmt.Println(response.OutputText())
}

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: ResponseService.New und WithTokenCredentialScopes

Erstellen einer Antwort mit einem API-Schlüssel

API-Schlüssel werden nicht für die Produktionsverwendung empfohlen. Speichern Sie den Schlüssel in der AZURE_OPENAI_API_KEY Umgebungsvariable, anstatt ihn im Quellcode zu platzieren.

export AZURE_OPENAI_API_KEY="<your-api-key>"

Erstellen Sie dann den Client und fordern Sie Folgendes an:

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/openai/openai-go/v3"
	"github.com/openai/openai-go/v3/option"
	"github.com/openai/openai-go/v3/responses"
)

func main() {
	apiKey := os.Getenv("AZURE_OPENAI_API_KEY")
	if apiKey == "" { panic("AZURE_OPENAI_API_KEY is required") }
	endpoint := "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
	openaiClient := openai.NewClient(
		option.WithBaseURL(endpoint),
		option.WithAPIKey(apiKey))
	response, err := openaiClient.Responses.New(context.Background(), responses.ResponseNewParams{
		Model: openai.ChatModel("gpt-5-mini"),
		Input: responses.ResponseNewParamsInputUnion{OfString: openai.String(
			"Explain the purpose of an API in one sentence.")},
	})
	if err != nil { panic(err) }
	fmt.Println(response.OutputText())
}

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: Responses.New

Verwenden von Chatabschlussen

Verwenden Sie für neue Anwendungen die Antwort-API. Verwenden Sie Chatabschlusse, wenn Sie die nachrichtenbasierte Schnittstelle benötigen oder eine vorhandene Anwendung verwalten.

package main

import (
	"context"
	"fmt"

	"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() {
	credential, err := azidentity.NewDefaultAzureCredential(nil)
	if err != nil { panic(err) }
	endpoint := "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
	openaiClient := openai.NewClient(
		option.WithBaseURL(endpoint),
		azure.WithTokenCredential(credential, azure.WithTokenCredentialScopes(
			[]string{"https://ai.azure.com/.default"})))
	completion, err := openaiClient.Chat.Completions.New(context.Background(),
		openai.ChatCompletionNewParams{
			Model: openai.ChatModel("gpt-5-mini"),
			Messages: []openai.ChatCompletionMessageParamUnion{
				openai.DeveloperMessage("You are a helpful assistant."),
				openai.UserMessage("Explain the purpose of an API.")}})
	if err != nil { panic(err) }
	fmt.Println(completion.Choices[0].Message.Content)
}

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: Chat.Completions.New

Streaming einer Antwort

Aufrufen Responses.NewStreamingund Verarbeiten von Textdeltaereignissen, während das Modell sie generiert:

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/openai/openai-go/v3"
	"github.com/openai/openai-go/v3/option"
	"github.com/openai/openai-go/v3/responses"
)

func main() {
	endpoint := "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
	openaiClient := openai.NewClient(option.WithBaseURL(endpoint),
		option.WithAPIKey(os.Getenv("AZURE_OPENAI_API_KEY")))
	// Stream text as the model generates it.
	stream := openaiClient.Responses.NewStreaming(context.Background(), responses.ResponseNewParams{
		Model: openai.ChatModel("gpt-5-mini"),
		Input: responses.ResponseNewParamsInputUnion{OfString: openai.String(
			"Explain the purpose of an API in one sentence.")},
	})
	for stream.Next() { fmt.Print(stream.Current().Delta) }
	if err := stream.Err(); err != nil { panic(err) }
}

Die folgende gestreamte Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: Responses.NewStreaming

Behandeln von Fehlern und Wiederholungen

Das SDK ruft Verbindungsfehler und HTTP 408-, 409-, 429- und 5xx-Antworten zweimal mit exponentiellem Backoff auf. Verwenden Sie option.WithMaxRetries diese Einstellung, um den Standardwert zu ändern. Überprüfen Sie die Zurückgegebene error vor dem Lesen einer Antwort, und überprüfen errors.As Sie eine openai.Error.

package main

import (
	"context"
	"errors"
	"fmt"
	"os"

	"github.com/openai/openai-go/v3"
	"github.com/openai/openai-go/v3/option"
	"github.com/openai/openai-go/v3/responses"
)

func main() {
	endpoint := "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
	openaiClient := openai.NewClient(option.WithBaseURL(endpoint),
		option.WithAPIKey(os.Getenv("AZURE_OPENAI_API_KEY")), option.WithMaxRetries(4))
	// Send the request and inspect structured service errors.
	result, err := openaiClient.Responses.New(context.Background(), responses.ResponseNewParams{
		Model: openai.ChatModel("gpt-5-mini"),
		Input: responses.ResponseNewParamsInputUnion{OfString: openai.String("Explain an API.")},
	})
	if err != nil {
		var apiError *openai.Error
		if errors.As(err, &apiError) { fmt.Printf("Status: %d; Request ID: %s\n",
			apiError.StatusCode, apiError.Response.Header.Get("x-request-id")) }
		panic(err)
	}
	fmt.Println(result.OutputText())
}

Für eine erfolgreiche Anforderung ist die folgende Ausgabe repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: Fehler und Wiederholungen

Weitere SDK-Beispiele

Quellcode | Paket | REST-API-Referenz | Java-API-Referenz

Die Beispiele erfordern Java 8 oder höher. Sie wurden mit openai-java 4.43.0 und azure-identity 1.18.4 getestet.

Installieren der Pakete

Maven

Fügen Sie ihrem Maven-Projekt die OpenAI- und Azure Identity-Abhängigkeiten hinzu:

<dependencies>
  <dependency>
    <groupId>com.openai</groupId>
    <artifactId>openai-java</artifactId>
                <version>4.43.0</version>
  </dependency>
  <dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
    <version>1.18.4</version>
  </dependency>
</dependencies>

Maven löst die Pakete und ihre transitiven Abhängigkeiten beim Erstellen des Projekts auf.

Gradle

Fügen Sie dem Block in der dependencies Gradle-Builddatei dieselben Pakete hinzu:

dependencies {
        implementation("com.openai:openai-java:4.43.0")
        implementation("com.azure:azure-identity:1.18.4")
}

Gradle löst die Pakete beim Erstellen des Projekts auf.

Erstellen einer Antwort mit Microsoft Entra ID

Verwenden und BearerTokenCredential authentifizieren Sie DefaultAzureCredential sich, ohne einen API-Schlüssel zu speichern.

import com.azure.identity.AuthenticationUtil;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.credential.BearerTokenCredential;
import com.openai.models.responses.ResponseCreateParams;

public class ResponsesExample {
    public static void main(String[] args) {
        String endpoint = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/";
        OpenAIClient openAIClient = OpenAIOkHttpClient.builder()
                .baseUrl(endpoint)
                .credential(BearerTokenCredential.create(
                        AuthenticationUtil.getBearerTokenSupplier(
                                new DefaultAzureCredentialBuilder().build(),
                                "https://ai.azure.com/.default")))
                .build();
        ResponseCreateParams params = ResponseCreateParams.builder()
                .model("gpt-5-mini")
                .input("Explain the purpose of an API in one sentence.")
                .build();
        openAIClient.responses().create(params).output().stream()
                .flatMap(item -> item.message().stream())
                .flatMap(message -> message.content().stream())
                .flatMap(content -> content.outputText().stream())
                .forEach(output -> System.out.println(output.text()));
    }
}

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: AzureEntraIdExample und ResponsesExample

Erstellen einer Antwort mit einem API-Schlüssel

Verwenden Sie keine API-Schlüssel für die Produktion. Speichern Sie den Schlüssel in der AZURE_OPENAI_API_KEY Umgebungsvariable, anstatt ihn im Quellcode zu platzieren.

export AZURE_OPENAI_API_KEY="<your-api-key>"

Erstellen Sie dann den Client und fordern Sie Folgendes an:

import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.responses.ResponseCreateParams;

public class ApiKeyResponsesExample {
    public static void main(String[] args) {
        String endpoint = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/";
        String apiKey = System.getenv("AZURE_OPENAI_API_KEY");
        if (apiKey == null) throw new IllegalStateException(
                "AZURE_OPENAI_API_KEY is required.");
        OpenAIClient openAIClient = OpenAIOkHttpClient.builder()
                .baseUrl(endpoint).apiKey(apiKey).build();
        ResponseCreateParams params = ResponseCreateParams.builder()
                .model("gpt-5-mini")
                .input("Explain the purpose of an API in one sentence.")
                .build();
        openAIClient.responses().create(params).output().stream()
                .flatMap(item -> item.message().stream())
                .flatMap(message -> message.content().stream())
                .flatMap(content -> content.outputText().stream())
                .forEach(output -> System.out.println(output.text()));
    }
}

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: OpenAIOkHttpClient

Verwenden von Chatabschlussen

Verwenden Sie für neue Anwendungen die Antwort-API. Verwenden Sie Chatabschlusse, wenn Sie die nachrichtenbasierte Schnittstelle benötigen oder eine vorhandene Anwendung verwalten.

import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.ChatCompletionCreateParams;

public class ChatExample {
    public static void main(String[] args) {
        String endpoint = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/";
        String apiKey = System.getenv("AZURE_OPENAI_API_KEY");
        if (apiKey == null) throw new IllegalStateException(
                "AZURE_OPENAI_API_KEY is required.");
        OpenAIClient openAIClient = OpenAIOkHttpClient.builder()
                .baseUrl(endpoint).apiKey(apiKey).build();
        ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
                .model("gpt-5-mini")
                .addDeveloperMessage("You are a helpful assistant.")
                .addUserMessage("Explain the purpose of an API.")
                .build();
        openAIClient.chat().completions().create(params).choices().stream()
                .flatMap(choice -> choice.message().content().stream())
                .forEach(System.out::println);
    }
}

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: ChatCompletionCreateParams

Streaming einer Antwort

Aufrufen createStreamingund Verarbeiten von Textdeltaereignissen, während das Modell sie generiert:

import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.core.http.StreamResponse;
import com.openai.models.responses.ResponseCreateParams;
import com.openai.models.responses.ResponseStreamEvent;

public class StreamingExample {
    public static void main(String[] args) {
        String endpoint = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/";
        String apiKey = System.getenv("AZURE_OPENAI_API_KEY");
        if (apiKey == null) throw new IllegalStateException(
                "AZURE_OPENAI_API_KEY is required.");
        OpenAIClient openAIClient = OpenAIOkHttpClient.builder()
                .baseUrl(endpoint).apiKey(apiKey).build();
        // Stream text as the model generates it.
        ResponseCreateParams params = ResponseCreateParams.builder()
                .model("gpt-5-mini")
                .input("Explain the purpose of an API in one sentence.")
                .build();
        try (StreamResponse<ResponseStreamEvent> stream =
                openAIClient.responses().createStreaming(params)) {
            stream.stream().flatMap(event -> event.outputTextDelta().stream())
                    .forEach(delta -> System.out.print(delta.delta()));
        }
    }
}

Die folgende gestreamte Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: responses.createStreaming

Behandeln von Fehlern und Wiederholungen

Das SDK ruft Verbindungsfehler und HTTP 408-, 409-, 429- und 5xx-Antworten zweimal mit exponentiellem Backoff auf. Erfassen Sie OpenAIServiceException , um den HTTP-Status und Fehlerdetails für eine Dienstantwort zu überprüfen und für andere SDK-Fehler abzufangen OpenAIException .

Rufen Sie maxRetries auf OpenAIOkHttpClient.builder() , um die Standardeinstellung zu ändern. Bewahren Sie die Dienstausnahme auf, damit Ihre Anwendung ihren Status protokollieren und Metadaten anfordern kann.

Referenz: Fehlerbehandlung und Wiederholungen

Weitere SDK-Beispiele

Quellcode | Paket | REST-API-Referenz | Azure OpenAI v1-Leitfaden

Die Beispiele erfordern Node.js 20 oder höher. Sie wurden mit openai 6.46.0 und @azure/identity 4.13.1 getestet. Verwenden Sie openai 5.18.0 oder höher, wenn Sie einen Microsoft Entra Tokenanbieter als apiKeyübergeben.

Installieren der Pakete

Installieren Sie die OpenAI- und Azure Identity-Pakete:

npm install openai @azure/identity

Mit dem Befehl werden ihrem Projekt beide Pakete hinzugefügt.

Erstellen einer Antwort mit Microsoft Entra ID

Verwenden und getBearerTokenProvider authentifizieren Sie DefaultAzureCredential sich, ohne einen API-Schlüssel zu speichern. Der Tokenanbieter aktualisiert das Zugriffstoken bei Bedarf.

import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
import OpenAI from "openai";

const endpoint = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/";
const tokenProvider = getBearerTokenProvider(
  new DefaultAzureCredential(),
  "https://ai.azure.com/.default",
);
const openai = new OpenAI({ baseURL: endpoint, apiKey: tokenProvider });

async function main() {
  const response = await openai.responses.create({
    model: "gpt-5-mini",
    input: "Explain the purpose of an API in one sentence.",
  });
  console.log(response.output_text);
}

main().catch(console.error);

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: OpenAI Client- und Azure OpenAI v1-Authentifizierung

Erstellen einer Antwort mit einem API-Schlüssel

API-Schlüssel werden nicht für die Produktionsverwendung empfohlen. Speichern Sie den Schlüssel in der AZURE_OPENAI_API_KEY Umgebungsvariable, anstatt ihn im Quellcode zu platzieren.

export AZURE_OPENAI_API_KEY="<your-api-key>"

Erstellen Sie dann den Client und fordern Sie Folgendes an:

import OpenAI from "openai";

const endpoint = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/";
const apiKey = process.env["AZURE_OPENAI_API_KEY"];
if (!apiKey) throw new Error("AZURE_OPENAI_API_KEY is required.");

const openai = new OpenAI({ baseURL: endpoint, apiKey });

async function main() {
  const response = await openai.responses.create({
    model: "gpt-5-mini",
    input: "Explain the purpose of an API in one sentence.",
  });
  console.log(response.output_text);
}

main().catch(console.error);

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: responses.create

Verwenden von Chatabschlussen

Verwenden Sie für neue Anwendungen die Antwort-API. Verwenden Sie Chatabschlusse, wenn Sie die nachrichtenbasierte Schnittstelle benötigen oder eine vorhandene Anwendung verwalten.

import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
import OpenAI from "openai";

const endpoint = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/";
const tokenProvider = getBearerTokenProvider(
  new DefaultAzureCredential(),
  "https://ai.azure.com/.default",
);
const openai = new OpenAI({ baseURL: endpoint, apiKey: tokenProvider });

async function main() {
  const completion = await openai.chat.completions.create({
    model: "gpt-5-mini",
    messages: [
      { role: "system", content: "You are a helpful assistant." },
      { role: "user", content: "Explain the purpose of an API." },
    ],
  });
  console.log(completion.choices[0]?.message.content ?? "No response returned.");
}

main().catch(console.error);

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Das Beibehalten messages innerhalb der Anforderung stellt die kontextbezogene Eingabe bereit, die für die role Werte erforderlich ist. Wenn Sie das Array separat definieren, deklarieren Sie es als OpenAI.Chat.ChatCompletionMessageParam[].

Referenz: chat.completions.create

Streaming einer Antwort

Legen Sie stream fest, trueund verarbeiten Sie Textdelta-Ereignisse, wenn das Modell sie generiert:

import OpenAI from "openai";

const endpoint = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/";
const apiKey = process.env["AZURE_OPENAI_API_KEY"];
if (!apiKey) throw new Error("AZURE_OPENAI_API_KEY is required.");
const openai = new OpenAI({ baseURL: endpoint, apiKey });

async function main() {
  // Stream text as the model generates it.
  const stream = await openai.responses.create({
    model: "gpt-5-mini",
    input: "Explain the purpose of an API in one sentence.",
    stream: true,
  });
  for await (const event of stream) {
    if (event.type === "response.output_text.delta") {
      process.stdout.write(event.delta);
    }
  }
}

main().catch(console.error);

Die folgende gestreamte Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: responses.create Streaming

Behandeln von Fehlern und Wiederholungen

Das SDK führt automatisch Verbindungsfehler, Timeouts, HTTP 408, 409, 429 und 5xx-Antworten zweimal mit exponentiellem Backoff durch. Legen Sie maxRetries den OpenAI Client fest, um dieses Verhalten zu ändern. Erfassen Sie APIError , um den HTTP-Status, die Anforderungs-ID und Fehlerdetails für eine fehlgeschlagene Anforderung zu überprüfen.

Im folgenden Beispiel werden vier Wiederholungsversuche festgelegt und die Anforderungs-ID für erfolgreiche und fehlgeschlagene Anforderungen aufgezeichnet:

import OpenAI from "openai";

const endpoint = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/";
const apiKey = process.env["AZURE_OPENAI_API_KEY"];
if (!apiKey) throw new Error("AZURE_OPENAI_API_KEY is required.");
const openai = new OpenAI({ baseURL: endpoint, apiKey, maxRetries: 4 });

async function main() {
  try {
    // Send the request and record its request ID.
    const response = await openai.responses.create({
      model: "gpt-5-mini",
      input: "Explain the purpose of an API in one sentence.",
    });
    console.log(response.output_text);
    console.log(`Request ID: ${response._request_id}`);
  } catch (error) {
    if (error instanceof OpenAI.APIError) {
      console.error(`Status: ${error.status}; Request ID: ${error.requestID}`);
    }
    throw error;
  }
}

main().catch(console.error);

Für eine erfolgreiche Anforderung ist die folgende Ausgabe repräsentativ. Der Antworttext und die Anforderungs-ID variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.
Request ID: <request-id>

Referenz: Anfordern von IDs, Fehlern und Wiederholungen

Weitere SDK-Beispiele

Quellcode | Paket | API-Referenz

Die Beispiele erfordern Python 3.9 oder höher. Sie wurden mit openai 2.46.0 und azure-identity 1.25.3 getestet. Verwenden Sie openai 1.106.0 oder höher, wenn Sie einen Microsoft Entra Tokenanbieter als api_keyübergeben.

Installieren der Pakete

Installieren Sie die OpenAI- und Azure Identity-Pakete:

pip install openai azure-identity

Der Befehl installiert beide Pakete in der aktiven Python Umgebung.

Erstellen einer Antwort mit Microsoft Entra ID

Verwenden und get_bearer_token_provider authentifizieren Sie DefaultAzureCredential sich, ohne einen API-Schlüssel zu speichern. Der Tokenanbieter aktualisiert das Zugriffstoken bei Bedarf.

from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import OpenAI

endpoint = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://ai.azure.com/.default"
)
openai = OpenAI(base_url=endpoint, api_key=token_provider)

response = openai.responses.create(
    model="gpt-5-mini",
    input="Explain the purpose of an API in one sentence.",
)
print(response.output_text)

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: OpenAI Client und get_bearer_token_provider

Erstellen einer Antwort mit einem API-Schlüssel

API-Schlüssel werden nicht für die Produktionsverwendung empfohlen. Speichern Sie den Schlüssel in der AZURE_OPENAI_API_KEY Umgebungsvariable, anstatt ihn im Quellcode zu platzieren.

export AZURE_OPENAI_API_KEY="<your-api-key>"

Erstellen Sie dann den Client und fordern Sie Folgendes an:

import os
from openai import OpenAI

endpoint = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
api_key = os.environ["AZURE_OPENAI_API_KEY"]
openai = OpenAI(base_url=endpoint, api_key=api_key)

response = openai.responses.create(
    model="gpt-5-mini",
    input="Explain the purpose of an API in one sentence.",
)
print(response.output_text)

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: responses.create

Verwenden von Chatabschlussen

Verwenden Sie für neue Anwendungen die Antwort-API. Verwenden Sie Chatabschlusse, wenn Sie die nachrichtenbasierte Schnittstelle benötigen oder eine vorhandene Anwendung verwalten.

from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import OpenAI

endpoint = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://ai.azure.com/.default"
)
openai = OpenAI(base_url=endpoint, api_key=token_provider)

completion = openai.chat.completions.create(
    model="gpt-5-mini",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Explain the purpose of an API."},
    ],
)
print(completion.choices[0].message.content)

Die folgende Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: chat.completions.create

Streaming einer Antwort

Legen Sie stream fest, Trueund verarbeiten Sie Textdelta-Ereignisse, wenn das Modell sie generiert:

import os
from openai import OpenAI

endpoint = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
openai = OpenAI(
    base_url=endpoint,
    api_key=os.environ["AZURE_OPENAI_API_KEY"],
)

# Stream text as the model generates it.
stream = openai.responses.create(
    model="gpt-5-mini",
    input="Explain the purpose of an API in one sentence.",
    stream=True,
)
for event in stream:
    if event.type == "response.output_text.delta":
        print(event.delta, end="", flush=True)

Die folgende gestreamte Ausgabe ist repräsentativ. Der genaue Wortlaut kann variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.

Referenz: responses.create Streaming

Behandeln von Fehlern und Wiederholungen

Das SDK führt automatisch Verbindungsfehler, Timeouts, HTTP 408, 409, 429 und 5xx-Antworten zweimal mit exponentiellem Backoff durch. Legen Sie max_retries den OpenAI Client fest, um dieses Verhalten zu ändern. Erfassen Sie openai.APIStatusError den HTTP-Status, die Anforderungs-ID und die Antwort auf eine fehlgeschlagene Anforderung.

Im folgenden Beispiel werden vier Wiederholungsversuche festgelegt und die Anforderungs-ID für erfolgreiche und fehlgeschlagene Anforderungen aufgezeichnet:

import os
import openai as openai_sdk
from openai import OpenAI

endpoint = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
openai = OpenAI(
    base_url=endpoint,
    api_key=os.environ["AZURE_OPENAI_API_KEY"],
    max_retries=4,
)

try:
    # Send the request and record its request ID.
    response = openai.responses.create(
        model="gpt-5-mini",
        input="Explain the purpose of an API in one sentence.",
    )
    print(response.output_text)
    print(f"Request ID: {response._request_id}")
except openai_sdk.APIStatusError as error:
    print(f"Status: {error.status_code}; Request ID: {error.request_id}")
    raise

Für eine erfolgreiche Anforderung ist die folgende Ausgabe repräsentativ. Der Antworttext und die Anforderungs-ID variieren:

An API allows software applications to communicate and exchange data through a defined set of rules.
Request ID: <request-id>

Referenz: Anfordern von IDs, Fehlern und Wiederholungen

Weitere SDK-Beispiele

Problembehandlung

  • Vergewissern Sie sich bei einer 401 Antwort403, dass der beabsichtigte Identitäts- oder API-Schlüssel auf die Azure OpenAI-Ressource zugreifen kann.
  • Vergewissern Sie sich bei einer 404 Antwort, dass die Basis-URL endet /openai/v1/ und model einen gültigen Bereitstellungsnamen enthält.
  • Aktualisieren Sie für einen Paket- oder Typfehler das SDK, und vergleichen Sie die installierte Version mit der auf dieser Seite getesteten Version.
  • Überprüfen Sie bei einem Modellparameterfehler, ob das bereitgestellte Modell den Parameter unterstützt. Die Parameterunterstützung kann sich zwischen Modellfamilien unterscheiden.