Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo mostra-lhe como usar o Azure OpenAI Starter Kit para implementar um recurso Azure OpenAI e executar uma pequena aplicação hello world. A aplicação utiliza autenticação Microsoft Entra ID e o SDK OpenAI para chamar a API Azure OpenAI Respostas.
No final deste artigo, será capaz de:
- Implemente o Azure OpenAI com GPT-5-mini usando a CLI do Azure Developer.
- Executa uma aplicação local que autentique com o Microsoft Entra ID em vez de uma chave API.
- Envie um pedido para a API de Respostas e imprima a saída do modelo.
Note
Este artigo utiliza o Azure OpenAI Starter Kit como base para os exemplos. O kit inicial inclui Infrastructure as Code, configuração da CLI do Azure Developer e exemplos de clientes para múltiplas linguagens de programação.
Custo
Os recursos do Azure criados neste artigo são faturados para a sua subscrição do Azure. Para evitar custos contínuos, limpe os recursos quando terminar o artigo.
Pré-requisitos
Para concluir este artigo, precisa de:
- Uma assinatura do Azure. Crie um gratuitamente.
- Permissões para criar recursos do Azure e atribuições de funções na subscrição, como Owner ou User Access Administrator.
- Git.
- CLI do Azure.
- CLI do desenvolvedor do Azure.
- Python 3.8 ou posterior.
- .NET SDK 10 ou posterior. O kit inicial utiliza aplicações C# baseadas em ficheiros com diretivas de pacote.
- Node.js 18 anos ou mais.
- Use a versão 1.25.1 ou posterior.
- Java 21 ou posterior.
- Maven 3.9 ou posterior.
Obter o código
Clone o repositório Azure OpenAI Starter Kit e abra a pasta do projeto.
git clone https://github.com/Azure-Samples/azure-openai-starter.git
cd azure-openai-starter
Iniciar sessão no Azure
Inicie sessão tanto na CLI do Azure como na Azure Developer CLI.
az login
azd auth login
Se a sua conta tiver acesso a mais do que um inquilino, confirme que o inquilino ativo é o inquilino onde pretende utilizar os recursos.
az account show --query tenantId -o tsv
Deploy Azure OpenAI
Execute o seguinte comando Azure Developer CLI a partir da raiz do repositório:
azd up
Utilize as seguintes orientações para responder às perguntas:
| Prompt | Answer |
|---|---|
| Nome do ambiente | Use um nome curto e minúsculo, como aoai-hello. O valor é usado nos nomes de recursos do Azure. |
| Subscrição | Selecione a subscrição onde quer criar os recursos. |
| Localização | Selecione uma região perto de si. |
| Localização do modelo Azure OpenAI | Selecione uma região onde o GPT-5-mini esteja disponível. |
A implantação normalmente demora vários minutos. Quando o comando termina, o kit inicial já provisionou o Azure OpenAI e implementou um modelo GPT-5-mini.
Configure seu ambiente local
A aplicação hello world usa o seu login no Azure para obter um token de acesso Microsoft Entra. Defina o endpoint usado pelo cliente OpenAI.
export AZURE_OPENAI_ENDPOINT=$(azd env get-value AZURE_OPENAI_ENDPOINT)
export AZURE_OPENAI_DEPLOYMENT=$(azd env get-value AZURE_OPENAI_GPT_DEPLOYMENT_NAME)
export AZURE_TENANT_ID=$(az account show --query tenantId -o tsv)
Tip
O Azure OpenAI usa nomes de implementação nas chamadas API. O kit inicial apresenta o nome de implementação do GPT-5-mini como AZURE_OPENAI_GPT_DEPLOYMENT_NAME. Este artigo mapeia esse valor para AZURE_OPENAI_DEPLOYMENT que o código seja o mesmo em todas as línguas.
Cria e executa a aplicação hello world
Crie um arquivo nomeado hello_world_entra.py na src/python pasta.
import os
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import OpenAI
endpoint = os.environ["AZURE_OPENAI_ENDPOINT"].rstrip("/")
deployment = os.getenv("AZURE_OPENAI_DEPLOYMENT", "gpt-5-mini")
token_provider = get_bearer_token_provider(
DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default",
)
client = OpenAI(
base_url=f"{endpoint}/openai/v1/",
api_key=token_provider,
)
response = client.responses.create(
model=deployment,
input="Say hello from Azure OpenAI in one sentence.",
max_output_tokens=300,
)
print(response.output_text)
Instala as dependências em Python e executa a aplicação.
cd src/python
python -m pip install -r requirements.txt
python hello_world_entra.py
Crie um arquivo nomeado hello_world_entra.cs na src/dotnet pasta.
#!/usr/bin/dotnet run
#:package OpenAI@2.9.1
#:package Azure.Identity@1.*
using System;
using System.ClientModel.Primitives;
using Azure.Identity;
using OpenAI;
using OpenAI.Responses;
#pragma warning disable OPENAI001
string endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
?? throw new InvalidOperationException("Set AZURE_OPENAI_ENDPOINT.");
string deployment = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT")
?? "gpt-5-mini";
BearerTokenPolicy tokenPolicy = new(
new DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default");
OpenAIClientOptions options = new()
{
Endpoint = new Uri($"{endpoint.TrimEnd('/')}/openai/v1/")
};
ResponsesClient client = new(tokenPolicy, options);
ResponseResult response = await client.CreateResponseAsync(
deployment,
"Say hello from Azure OpenAI in one sentence.",
null);
Console.WriteLine(response.GetOutputText());
Execute o aplicativo.
cd src/dotnet
dotnet run hello_world_entra.cs
Crie um arquivo nomeado hello_world_entra.ts na src/typescript pasta.
import OpenAI from "openai";
import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
const endpoint = process.env.AZURE_OPENAI_ENDPOINT;
if (!endpoint) {
throw new Error("Set AZURE_OPENAI_ENDPOINT.");
}
const deployment = process.env.AZURE_OPENAI_DEPLOYMENT ?? "gpt-5-mini";
const tokenProvider = getBearerTokenProvider(
new DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default"
);
const client = new OpenAI({
baseURL: `${endpoint.replace(/\/+$/, "")}/openai/v1/`,
apiKey: tokenProvider as any,
});
const response = await client.responses.create({
model: deployment,
input: "Say hello from Azure OpenAI in one sentence.",
max_output_tokens: 300,
});
console.log(response.output_text);
Instala as dependências do TypeScript e executa a aplicação.
cd src/typescript
npm install
npx tsx hello_world_entra.ts
Crie um arquivo nomeado hello_world_entra.go na src/go/responses_example_entra pasta.
package main
import (
"context"
"fmt"
"log"
"net/http"
"os"
"strings"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/option"
"github.com/openai/openai-go/v3/responses"
)
type policyAdapter option.MiddlewareNext
func (adapter policyAdapter) Do(req *policy.Request) (*http.Response, error) {
return (option.MiddlewareNext)(adapter)(req.Raw())
}
func newClient(endpoint string) openai.Client {
const scope = "https://cognitiveservices.azure.com/.default"
credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("Failed to create DefaultAzureCredential: %s", err)
}
bearerTokenPolicy := runtime.NewBearerTokenPolicy(
credential,
[]string{scope},
nil,
)
return openai.NewClient(
option.WithBaseURL(strings.TrimRight(endpoint, "/")+"/openai/v1/"),
option.WithMiddleware(func(req *http.Request, next option.MiddlewareNext) (*http.Response, error) {
pipeline := runtime.NewPipeline(
"aoai-hello-world",
"",
runtime.PipelineOptions{},
&policy.ClientOptions{
PerRetryPolicies: []policy.Policy{
bearerTokenPolicy,
policyAdapter(next),
},
},
)
pipelineRequest, err := runtime.NewRequestFromRequest(req)
if err != nil {
return nil, err
}
return pipeline.Do(pipelineRequest)
}),
)
}
func main() {
endpoint := os.Getenv("AZURE_OPENAI_ENDPOINT")
if endpoint == "" {
log.Fatal("Set AZURE_OPENAI_ENDPOINT.")
}
deployment := os.Getenv("AZURE_OPENAI_DEPLOYMENT")
if deployment == "" {
deployment = "gpt-5-mini"
}
client := newClient(endpoint)
response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
Model: deployment,
Input: responses.ResponseNewParamsInputUnion{
OfString: openai.String("Say hello from Azure OpenAI in one sentence."),
},
MaxOutputTokens: openai.Int(300),
})
if err != nil {
log.Fatalf("Failed to create response: %s", err)
}
fmt.Println(response.OutputText())
}
Execute o aplicativo.
cd src/go/responses_example_entra
go run hello_world_entra.go
Crie um arquivo nomeado HelloWorldEntra.java na src/java/src/main/java/com/azure/openai/starter pasta.
package com.azure.openai.starter;
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.Response;
import com.openai.models.responses.ResponseCreateParams;
import java.util.function.Supplier;
public class HelloWorldEntra {
public static void main(String[] args) {
String endpoint = System.getenv("AZURE_OPENAI_ENDPOINT");
if (endpoint == null || endpoint.isBlank()) {
throw new IllegalStateException("Set AZURE_OPENAI_ENDPOINT.");
}
String deployment = System.getenv().getOrDefault(
"AZURE_OPENAI_DEPLOYMENT",
"gpt-5-mini");
Supplier<String> bearerTokenSupplier = AuthenticationUtil.getBearerTokenSupplier(
new DefaultAzureCredentialBuilder().build(),
"https://cognitiveservices.azure.com/.default");
OpenAIClient client = OpenAIOkHttpClient.builder()
.baseUrl(endpoint.replaceAll("/+$", "") + "/openai/v1/")
.credential(BearerTokenCredential.create(bearerTokenSupplier))
.build();
Response response = client.responses().create(
ResponseCreateParams.builder()
.model(deployment)
.input(ResponseCreateParams.Input.ofText(
"Say hello from Azure OpenAI in one sentence."))
.maxOutputTokens(300)
.build());
System.out.println(response.output());
}
}
Execute o aplicativo.
cd src/java
mvn compile exec:java -Dexec.mainClass="com.azure.openai.starter.HelloWorldEntra"
O formato exato de saída varia consoante o SDK. Deverá ver o resultado do modelo do Azure OpenAI implementado, que inclui uma breve saudação.
Hello from Azure OpenAI! I'm running on your Azure OpenAI deployment and ready to help.
Entenda o código
A aplicação hello world tem três partes importantes:
-
DefaultAzureCredentialrecebe um token de Microsoft Entra do seu Azure local ao iniciar sessão. - O cliente OpenAI aponta para o seu endpoint Azure OpenAI v1:
/openai/v1/. - O valor
modelé o nome Azure da implementação OpenAI. Neste kit inicial, o nome da implementação égpt-5-mini.
A aplicação Python usa o pacote openai com azure-identity. O get_bearer_token_provider ajudante cria um fornecedor de tokens que o cliente OpenAI pode usar como sua credencial.
A aplicação C# usa o pacote OpenAI com Azure.Identity. O BearerTokenPolicy adiciona Microsoft Entra tokens aos pedidos enviados pelo ResponsesClient.
A aplicação TypeScript utiliza o pacote openai com @azure/identity. O getBearerTokenProvider ajudante cria um fornecedor de tokens que o cliente OpenAI pode usar como sua credencial.
A aplicação Go utiliza azidentity.NewDefaultAzureCredential com uma política de token portador Azure Core. A política é adicionada ao cliente OpenAI como middleware para que os pedidos utilizem tokens Microsoft Entra ID.
A aplicação Java usa DefaultAzureCredentialBuilder com AuthenticationUtil.getBearerTokenSupplier. O fornecedor de tokens é passado para o cliente OpenAI usando BearerTokenCredential.
Execute o exemplo do kit inicial
O kit inicial inclui também um exemplo maior da API Respostas para cada linguagem.
python responses_example_entra.py
dotnet run responses_example_entra.cs
npx tsx responses_example_entra.ts
go run main.go
mvn compile exec:java -Dexec.mainClass="com.azure.openai.starter.ResponsesExampleEntra"
Resolução de problemas
| Problema | Experimente o seguinte |
|---|---|
azd up falha porque o GPT-5-mini não está disponível na região selecionada. |
Selecione uma localização diferente do modelo do Azure OpenAI quando solicitado, ou defina outra região com azd env set AZURE_LOCATION eastus2 e execute azd up novamente. |
azd up falha com um erro de atribuição de funções ou autorização. |
Certifique-se de que a sua conta pode criar recursos e atribuir funções. Normalmente é necessário Proprietário ou Administrador de Acesso ao Utilizador para este modelo. |
A aplicação retorna 401 ou PermissionDenied. |
Confirme que está ligado ao mesmo inquilino e subscrição usado por azd up. Execute az login, azd auth login, e defina AZURE_TENANT_ID para o ID do inquilino a partir de az account show. A propagação de atribuição de funções também pode demorar alguns minutos. |
DefaultAzureCredential failed to retrieve a token. |
Confirme se CLI do Azure está instalado e autenticado com az account show. Se usar vários inquilinos, inicie sessão com o inquilino correto com az login --tenant <tenant-id>. |
A aplicação retorna model not found ou deployment not found. |
Confirme que AZURE_OPENAI_DEPLOYMENT corresponde ao nome de implementação Azure OpenAI. O kit inicial por defeito é gpt-5-mini. |
| A aplicação .NET não reconhece diretivas de pacotes. | Instale a versão do SDK .NET exigida pelo kit inicial. Aplicações C# baseadas em ficheiros com #:package requerem um SDK de .NET recente. |
| A aplicação Go não consegue encontrar o módulo nem as dependências. | Execute os comandos Go de src/go/responses_example_entra. Confirma se o Go 1.25.1 ou posterior está instalado. |
| A aplicação Java falha devido a um erro na versão de origem ou de destino. | Confirma que o Java 21 ou posterior está instalado e selecionado pelo teu terminal. |
| Precisas de registos detalhados de implementação. | Execute azd up --debug. |
Pode inspecionar os valores atuais do ambiente CLI do Azure Developer com:
azd env get-values
Limpeza de recursos
Quando já não precisares dos recursos, executa o seguinte comando a partir da raiz do repositório do kit de iniciação:
azd down --purge
O comando elimina os recursos do Azure criados pelo kit inicial e ajuda a travar as cobranças em curso.
Obter ajuda
Se precisar de ajuda com o kit inicial, use estes recursos:
- repositório do Azure OpenAI Starter Kit.
- Problemas com o Azure OpenAI Starter Kit.
- Documentação do Azure OpenAI.
- Documentação do Azure Developer CLI.
- controlo de acesso baseado em funções do Azure OpenAI.