Azure suporte à linguagem SDK do OpenAI

Use os SDKs do OpenAI com o ponto de extremidade Azure OpenAI v1 para criar aplicativos de inferência de modelo em Python, C#, JavaScript, Java ou Go. Os exemplos usam a API de Respostas para novos aplicativos e mostram Preenchimentos de Chat para aplicativos que ainda usam sua interface baseada em mensagem.

Pré-requisitos

  • Uma assinatura do Azure. Crie um gratuitamente se você não tiver um.
  • Um Azure recurso OpenAI com uma gpt-5-mini implantação de modelo.
  • Seu Azure ponto de extremidade de recurso do OpenAI, como https://YOUR-RESOURCE-NAME.openai.azure.com.
  • Para Microsoft Entra ID autenticação, uma identidade que tem permissão para executar a inferência. Para obter opções de função, consulte Configurar Microsoft Entra ID autenticação.
  • Para autenticação de chave de API, uma chave de recurso Azure OpenAI. Microsoft Entra ID é recomendado para aplicativos de produção.
  • Um gerenciador de pacotes e runtime de idioma com suporte para o idioma selecionado.

O model valor em cada solicitação é o nome de implantação do modelo Azure. Os exemplos usam gpt-5-mini; substitua-o se sua implantação tiver um nome diferente.

Código-fonte | Pacote | Superfície da API

Os exemplos foram testados com OpenAI 2.12.0, Azure.Identity 1.21.0 e .NET 8. O pacote OpenAI também tem como destino .NET Standard 2.0 e versões de .NET posteriores.

Instalar os pacotes

Instale os pacotes OpenAI e Azure Identity:

dotnet add package OpenAI
dotnet add package Azure.Identity

Os comandos adicionam as duas referências de pacote ao seu projeto.

Criar uma resposta com Microsoft Entra ID

Use DefaultAzureCredential e BearerTokenPolicy autentique sem armazenar uma chave de API.

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

A saída a seguir é representativa. A redação exata pode variar:

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

Referência: ResponsesClient

Criar uma resposta com uma chave de API

As chaves de API não são recomendadas para uso em produção. Armazene a chave na AZURE_OPENAI_API_KEY variável de ambiente em vez de colocá-la no código-fonte.

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

Em seguida, crie o cliente e solicite:

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

A saída a seguir é representativa. A redação exata pode variar:

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

Referência: CreateResponseAsync

Usar conclusões de chat

Para novos aplicativos, use a API de Respostas. Use conclusões de chat quando precisar de sua interface baseada em mensagem ou se estiver mantendo um aplicativo existente.

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

A saída a seguir é representativa. A redação exata pode variar:

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

Referência: ChatClient

Transmitir uma resposta

Chamar CreateResponseStreamingAsync e processar atualizações delta de texto conforme o modelo as gera:

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

A saída transmitida a seguir é representativa. A redação exata pode variar:

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

Referência: CreateResponseStreamingAsync

Manipular erros e novas tentativas

O cliente tenta automaticamente respostas HTTP 408, 429, 500, 502, 503 e 504 com retirada exponencial. Configure a política de repetição por meio das opções do cliente quando você precisar de um comportamento diferente. Captura ClientResultException para inspecionar o status HTTP e os detalhes de erro de uma solicitação com falha.

Para diagnóstico, mantenha o ClientResult<T> retornado por uma operação e inspecione seus cabeçalhos de resposta brutos. Operações com falha expõem informações de status por meio de ClientResultException.

Referência: Tratamento de erros e detalhes do resultado do cliente

Mais exemplos de SDK

Código-fonte | Pacote | Referência da | Referência da API go

Os exemplos exigem o Go 1.25 ou posterior. Foram testados com github.com/openai/openai-go/v3 3.44.0 e azidentity 1.14.0.

Instalar os módulos

Instale os módulos OpenAI e Azure Identity:

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

O /v3 sufixo é necessário porque identifica a versão principal atual do módulo Go.

Criar uma resposta com Microsoft Entra ID

Use DefaultAzureCredential e a opção de autenticação Azure para autenticar sem armazenar uma chave de API.

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

A saída a seguir é representativa. A redação exata pode variar:

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

Referência: ResponseService.New e WithTokenCredentialScopes

Criar uma resposta com uma chave de API

As chaves de API não são recomendadas para uso em produção. Armazene a chave na AZURE_OPENAI_API_KEY variável de ambiente em vez de colocá-la no código-fonte.

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

Em seguida, crie o cliente e solicite:

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

A saída a seguir é representativa. A redação exata pode variar:

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

Referência: Responses.New

Usar conclusões de chat

Para novos aplicativos, use a API de Respostas. Use conclusões de chat quando precisar de sua interface baseada em mensagem ou se estiver mantendo um aplicativo existente.

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

A saída a seguir é representativa. A redação exata pode variar:

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

Referência: Chat.Completions.New

Transmitir uma resposta

Chame Responses.NewStreaminge processe eventos delta de texto à medida que o modelo os gera:

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

A saída transmitida a seguir é representativa. A redação exata pode variar:

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

Referência: Responses.NewStreaming

Manipular erros e novas tentativas

O SDK repete erros de conexão e respostas HTTP 408, 409, 429 e 5xx duas vezes com retirada exponencial. Use option.WithMaxRetries para alterar o padrão. Verifique o retornado error antes de ler uma resposta e use errors.As para inspecionar um 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())
}

Para uma solicitação bem-sucedida, a saída a seguir é representativa. A redação exata pode variar:

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

Referência: Erros e novas tentativas

Mais exemplos de SDK

Código-fonte | Pacote | Referência da | referência da API Java

Os exemplos exigem Java 8 ou posterior. Foram testados com openai-java 4.43.0 e azure-identity 1.18.4.

Instalar os pacotes

Maven

Adicione as dependências OpenAI e Azure Identity ao seu projeto Maven:

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

O Maven resolve os pacotes e suas dependências transitivas quando você cria o projeto.

Gradle

Adicione os mesmos pacotes ao dependencies bloco no arquivo de build do Gradle:

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

O Gradle resolve os pacotes quando você cria o projeto.

Criar uma resposta com Microsoft Entra ID

Use DefaultAzureCredential e BearerTokenCredential autentique sem armazenar uma chave de API.

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

A saída a seguir é representativa. A redação exata pode variar:

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

Referência: AzureEntraIdExample e ResponsesExample

Criar uma resposta com uma chave de API

Não use chaves de API para produção. Armazene a chave na AZURE_OPENAI_API_KEY variável de ambiente em vez de colocá-la no código-fonte.

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

Em seguida, crie o cliente e solicite:

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

A saída a seguir é representativa. A redação exata pode variar:

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

Referência: OpenAIOkHttpClient

Usar conclusões de chat

Para novos aplicativos, use a API de Respostas. Use conclusões de chat quando precisar de sua interface baseada em mensagem ou se estiver mantendo um aplicativo existente.

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

A saída a seguir é representativa. A redação exata pode variar:

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

Referência: ChatCompletionCreateParams

Transmitir uma resposta

Chame createStreaminge processe eventos delta de texto à medida que o modelo os gera:

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

A saída transmitida a seguir é representativa. A redação exata pode variar:

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

Referência: responses.createStreaming

Manipular erros e novas tentativas

O SDK repete erros de conexão e respostas HTTP 408, 409, 429 e 5xx duas vezes com retirada exponencial. Pegue OpenAIServiceException para inspecionar o status HTTP e os detalhes de erro de uma resposta de serviço e capturar OpenAIException outras falhas do SDK.

maxRetries Chame OpenAIOkHttpClient.builder() para alterar o padrão. Preserve a exceção de serviço para que seu aplicativo possa registrar seu status e solicitar metadados.

Referência: Tratamento de erros e novas tentativas

Mais exemplos de SDK

Código-fonte | Pacote | Referência da | diretrizes do Azure OpenAI v1

Os exemplos exigem Node.js 20 ou posterior. Foram testados com openai 6.46.0 e @azure/identity 4.13.1. Use openai 5.18.0 ou posterior ao passar um provedor de token Microsoft Entra como apiKey.

Instalar os pacotes

Instale os pacotes OpenAI e Azure Identity:

npm install openai @azure/identity

O comando adiciona ambos os pacotes ao seu projeto.

Criar uma resposta com Microsoft Entra ID

Use DefaultAzureCredential e getBearerTokenProvider autentique sem armazenar uma chave de API. O provedor de token atualiza o token de acesso quando necessário.

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

A saída a seguir é representativa. A redação exata pode variar:

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

Referência: OpenAI autenticação do cliente e do Azure OpenAI v1

Criar uma resposta com uma chave de API

As chaves de API não são recomendadas para uso em produção. Armazene a chave na AZURE_OPENAI_API_KEY variável de ambiente em vez de colocá-la no código-fonte.

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

Em seguida, crie o cliente e solicite:

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

A saída a seguir é representativa. A redação exata pode variar:

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

Referência: responses.create

Usar conclusões de chat

Para novos aplicativos, use a API de Respostas. Use conclusões de chat quando precisar de sua interface baseada em mensagem ou se estiver mantendo um aplicativo existente.

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

A saída a seguir é representativa. A redação exata pode variar:

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

Manter messages dentro da solicitação fornece a digitação contextual necessária para os role valores. Se você definir a matriz separadamente, declare-a como OpenAI.Chat.ChatCompletionMessageParam[].

Referência: chat.completions.create

Transmitir uma resposta

Defina stream como true, e processe eventos delta de texto à medida que o modelo os gera:

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

A saída transmitida a seguir é representativa. A redação exata pode variar:

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

Referência: responses.create streaming

Manipular erros e novas tentativas

O SDK tenta automaticamente erros de conexão, tempos limite, HTTP 408, 409, 429 e respostas 5xx duas vezes com retirada exponencial. Defina maxRetries no OpenAI cliente para alterar esse comportamento. Captura APIError para inspecionar o status HTTP, a ID da solicitação e os detalhes do erro para uma solicitação com falha.

O exemplo a seguir define quatro tentativas e registra a ID da solicitação para solicitações bem-sucedidas e com falha:

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

Para uma solicitação bem-sucedida, a saída a seguir é representativa. O texto de resposta e a ID da solicitação variam:

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

Referência: IDs de solicitação, erros e novas tentativas

Mais exemplos de SDK

Código-fonte | Pacote | Referência de API

Os exemplos exigem Python 3.9 ou posterior. Foram testados com openai 2.46.0 e azure-identity 1.25.3. Use openai 1.106.0 ou posterior quando passar um provedor de token Microsoft Entra como api_key.

Instalar os pacotes

Instale os pacotes OpenAI e Azure Identity:

pip install openai azure-identity

O comando instala ambos os pacotes no ambiente de Python ativo.

Criar uma resposta com Microsoft Entra ID

Use DefaultAzureCredential e get_bearer_token_provider autentique sem armazenar uma chave de API. O provedor de token atualiza o token de acesso quando necessário.

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)

A saída a seguir é representativa. A redação exata pode variar:

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

Referência: OpenAI cliente e get_bearer_token_provider

Criar uma resposta com uma chave de API

As chaves de API não são recomendadas para uso em produção. Armazene a chave na AZURE_OPENAI_API_KEY variável de ambiente em vez de colocá-la no código-fonte.

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

Em seguida, crie o cliente e solicite:

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)

A saída a seguir é representativa. A redação exata pode variar:

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

Referência: responses.create

Usar conclusões de chat

Para novos aplicativos, use a API de Respostas. Use conclusões de chat quando precisar de sua interface baseada em mensagem ou se estiver mantendo um aplicativo existente.

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)

A saída a seguir é representativa. A redação exata pode variar:

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

Referência: chat.completions.create

Transmitir uma resposta

Defina stream como True, e processe eventos delta de texto à medida que o modelo os gera:

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)

A saída transmitida a seguir é representativa. A redação exata pode variar:

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

Referência: responses.create streaming

Manipular erros e novas tentativas

O SDK tenta automaticamente erros de conexão, tempos limite, HTTP 408, 409, 429 e respostas 5xx duas vezes com retirada exponencial. Defina max_retries no OpenAI cliente para alterar esse comportamento. Captura openai.APIStatusError para inspecionar o status HTTP, a ID da solicitação e a resposta para uma solicitação com falha.

O exemplo a seguir define quatro tentativas e registra a ID da solicitação para solicitações bem-sucedidas e com falha:

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

Para uma solicitação bem-sucedida, a saída a seguir é representativa. O texto de resposta e a ID da solicitação variam:

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

Referência: IDs de solicitação, erros e novas tentativas

Mais exemplos de SDK

Solucionando problemas

  • Para obter uma 401 ou 403 resposta, confirme se a identidade pretendida ou a chave de API podem acessar o recurso Azure OpenAI.
  • Para obter uma 404 resposta, confirme se a URL base termina /openai/v1/ e que model contém um nome de implantação válido.
  • Para um pacote ou erro de tipo, atualize o SDK e compare a versão instalada com a versão testada nesta página.
  • Para obter um erro de parâmetro de modelo, verifique se o modelo implantado dá suporte ao parâmetro. O suporte a parâmetros pode ser diferente entre famílias de modelos.