Compartilhar via


Introdução ao Building Block de segurança do OpenAI do Azure

Este artigo mostra como criar e usar o exemplo de bloco de construção de segurança do OpenAI do Azure. O objetivo é demonstrar o provisionamento de conta do Azure OpenAI com RBAC (controle de acesso baseado em função) para autenticação sem chave (ID do Microsoft Entra) para o Azure OpenAI. Este exemplo de aplicativo de chat também inclui toda a infraestrutura e configuração necessárias para provisionar recursos do Azure OpenAI e implantar o aplicativo nos Aplicativos de Contêiner do Azure usando a CLI do Desenvolvedor do Azure.

Seguindo as instruções neste artigo, você vai:

  • Implante um aplicativo de chat de contêiner do Azure seguro.
  • Use a identidade gerenciada para acesso ao OpenAI do Azure.
  • Converse com um LLM (Modelo de Linguagem Grande) do OpenAI do Azure usando a biblioteca OpenAI.

Depois de concluir este artigo, você poderá começar a modificar o novo projeto com seu código e seus dados personalizados.

Observação

Este artigo usa um ou mais modelos de aplicativo de IA como base para os exemplos e as diretrizes no artigo. Os modelos de aplicativo de IA fornecem implementações de referência regulares e fáceis de implantar que ajudam a garantir um ponto de partida de alta qualidade para os aplicativos de IA.

Visão geral da arquitetura

Uma arquitetura simples do aplicativo de bate-papo é mostrada no diagrama a seguir: Diagrama mostrando a arquitetura do cliente para o aplicativo de back-end.

O aplicativo de chat é executado como um Aplicativo de Contêiner do Azure. O aplicativo usa a identidade gerenciada por meio da ID do Microsoft Entra para autenticar com o Azure OpenAI, em vez de uma chave de API. O aplicativo de chat usa o Azure OpenAI para gerar respostas às mensagens do usuário.

A arquitetura do aplicativo depende dos seguintes serviços e componentes:

  • O OpenAI do Azure representa o provedor de IA para o qual enviamos as consultas do usuário.
  • Os Aplicativos de Contêiner do Azure são o ambiente de contêiner em que o aplicativo está hospedado.
  • A Identidade Gerenciada nos ajuda a garantir a melhor segurança da categoria e elimina a necessidade de você, como desenvolvedor, gerenciar com segurança um segredo.
  • Arquivos Bicep para provisionamento de recursos do Azure, incluindo Azure OpenAI, Aplicativos de Contêiner do Azure, Registro de Contêiner do Azure, Azure Log Analytics e funções RBAC.
  • O Protocolo de Chat de IA da Microsoft fornece contratos de API padronizados em soluções e linguagens de IA. O aplicativo de chat está em conformidade com o Protocolo de Chat de IA da Microsoft, que permite que o aplicativo de avaliações seja executado em qualquer aplicativo de chat que esteja em conformidade com o protocolo.
  • Um Python Quart que usa o openai pacote para gerar respostas às mensagens do usuário.
  • Um front-end HTML / JavaScript básico que transmite respostas do back-end usando JSON Lines em um ReadableStream.
  • Um aplicativo Web TypeScript que usa o pacote openai npm para gerar respostas às mensagens do usuário.

Custo

Em uma tentativa de manter os preços o mais baixo possível neste exemplo, a maioria dos recursos usa um tipo de preço básico ou de consumo. Altere seu nível conforme necessário com base no uso pretendido. Para parar de incorrer em cobranças, exclua os recursos quando terminar o artigo.

Saiba mais sobre o custo no repositório de exemplo.

Saiba mais sobre o custo no repositório de exemplo.

Saiba mais sobre o custo no repositório de exemplo.

Pré-requisitos

Um ambiente de contêiner de desenvolvimento está disponível com todas as dependências necessárias para concluir este artigo. Você pode executar o contêiner de desenvolvimento em Codespaces do GitHub (em um navegador) ou localmente usando o Visual Studio Code.

Para usar este artigo, você precisa cumprir os seguintes pré-requisitos:

Abrir o ambiente de desenvolvimento

Use as instruções a seguir para implantar um ambiente de desenvolvimento pré-configurado contendo todas as dependências necessárias para concluir este artigo.

O GitHub Codespaces executa um contêiner de desenvolvimento gerenciado pelo GitHub com o Visual Studio Code para Web como interface do usuário. Para o ambiente de desenvolvimento mais simples, use os Codespaces do GitHub para que você tenha as ferramentas e dependências de desenvolvedor corretas pré-instaladas para concluir este artigo.

Importante

Todas as contas do GitHub podem usar Codespaces por até 60 horas gratuitas por mês com 2 instâncias principais. Para saber mais, confira Armazenamento e horas por núcleo incluídos mensalmente no GitHub Codespaces.

Use as etapas a seguir para criar um novo GitHub Codespace no main branch do Azure-Samples/openai-chat-app-quickstart repositório GitHub.

  1. Clique com o botão direito do mouse no botão a seguir e selecione Abrir link em uma nova janela. Essa ação permite que você tenha o ambiente de desenvolvimento e a documentação disponíveis para revisão.

  2. Na página Criar codespace , examine e selecione Criar novo codespace

    Captura de tela da tela de confirmação antes de criar um novo codespace.

  3. Aguarde até que o codespace seja iniciado. Esse processo de inicialização pode levar alguns minutos.

  4. Entre no Azure com a CLI do Desenvolvedor do Azure no terminal na parte inferior da tela.

    azd auth login
    
  5. Copie o código do terminal e cole-o em um navegador. Siga as instruções para autenticar com sua conta do Azure.

As tarefas restantes neste artigo ocorrem no contexto desse contêiner de desenvolvimento.

Use as etapas a seguir para criar um novo GitHub Codespace no main branch do Azure-Samples/openai-chat-app-quickstart-dotnet repositório GitHub.

  1. Clique com o botão direito do mouse no botão a seguir e selecione Abrir link em uma nova janela. Essa ação permite que você tenha o ambiente de desenvolvimento e a documentação disponíveis para revisão.

  2. Na página Criar codespace , examine e selecione Criar codespace

    Captura de tela da tela de confirmação antes de criar um novo codespace.

  3. Aguarde até que o codespace seja iniciado. Esse processo de inicialização pode levar alguns minutos.

  4. Entre no Azure com a CLI do Desenvolvedor do Azure no terminal na parte inferior da tela.

    azd auth login
    
  5. Copie o código do terminal e cole-o em um navegador. Siga as instruções para autenticar com sua conta do Azure.

As tarefas restantes neste artigo ocorrem no contexto desse contêiner de desenvolvimento.

Use as etapas a seguir para criar um novo GitHub Codespace no main branch do Azure-Samples/openai-chat-app-quickstart-javascript repositório GitHub.

  1. Clique com o botão direito do mouse no botão a seguir e selecione Abrir link em uma nova janela. Essa ação permite que você tenha o ambiente de desenvolvimento e a documentação disponíveis para revisão.

Abrir em GitHub Codespaces

  1. Na página Criar codespace , examine e selecione Criar novo codespace

    Captura de tela da tela de confirmação antes de criar um novo codespace.

  2. Aguarde até que o codespace seja iniciado. Esse processo de inicialização pode levar alguns minutos.

  3. Entre no Azure com a CLI do Desenvolvedor do Azure no terminal na parte inferior da tela.

    azd auth login
    
  4. Copie o código do terminal e cole-o em um navegador. Siga as instruções para autenticar com sua conta do Azure.

As tarefas restantes neste artigo ocorrem no contexto desse contêiner de desenvolvimento.

Implantar e executar

O repositório de exemplo contém todos os arquivos de código e configuração para a implantação do aplicativo de chat do Azure. As etapas a seguir orientam você pelo processo de implantação do aplicativo de chat de exemplo do Azure.

Implantar aplicativo de chat no Azure

Importante

Os recursos do Azure criados nesta seção incorrem em custos imediatos. Esses recursos podem acumular custos mesmo se você interromper o comando antes que ele seja totalmente executado.

  1. Execute o seguinte comando da CLI do Desenvolvedor do Azure para provisionamento de recursos do Azure e implantação de código-fonte:

    azd up
    
  2. Use a seguinte tabela para responder aos prompts:

    Prompt Resposta
    Nome do ambiente Mantenha-o curto e em letras minúsculas. Adicione seu nome ou alias. Por exemplo, secure-chat. Ele é usado como parte do nome do grupo de recursos.
    Assinatura Selecione a assinatura para criar os recursos.
    Localização (para hospedagem) Selecione uma localização perto de você na lista.
    Localização do modelo OpenAI Selecione uma localização perto de você na lista. Se o mesmo local estiver disponível como seu primeiro local, selecione-o.
  3. Aguarde até que o aplicativo seja implantado. A implantação geralmente leva entre 5 e 10 minutos para ser concluída.

Usar o aplicativo de bate-papo para fazer perguntas ao Modelo de Linguagem Grande

  1. O terminal exibe uma URL após a implantação bem-sucedida do aplicativo.

  2. Selecione essa URL rotulada Deploying service web para abrir o aplicativo de chat em um navegador.

    Captura de tela do aplicativo de chat no navegador mostrando várias sugestões de entrada de chat e a caixa de texto de chat para inserir uma pergunta.

  3. No navegador, insira uma pergunta como "Por que a identidade gerenciada é melhor do que as chaves?".

  4. A resposta vem do Azure OpenAI e o resultado é exibido.

Explorando o código de exemplo

Embora o OpenAI e o Serviço OpenAI do Azure dependam de uma biblioteca de clientes comum do Python, pequenas alterações de código são necessárias ao usar pontos de extremidade do OpenAI do Azure. Vamos ver como este exemplo configura a autenticação sem chave com a ID do Microsoft Entra e se comunica com o Azure OpenAI.

Configurar a autenticação com identidade gerenciada

Neste exemplo, o arquivo começa com a src\quartapp\chat.py configuração da autenticação sem chave.

O snippet a seguir usa o módulo azure.identity.aio para criar um fluxo de autenticação assíncrono do Microsoft Entra.

O snippet de código a seguir usa a AZURE_CLIENT_ID azd variável de ambiente para criar uma instância ManagedIdentityCredential capaz de autenticar por meio da identidade gerenciada atribuída pelo usuário.

user_assigned_managed_identity_credential = ManagedIdentityCredential(client_id=os.getenv("AZURE_CLIENT_ID")) 

Observação

As azd variáveis de ambiente de recursos são provisionadas durante azd a implantação do aplicativo.

O snippet de código a seguir usa AZURE_TENANT_ID azd a variável de ambiente de recurso para criar uma instância AzureDeveloperCliCredential capaz de autenticar com o locatário atual do Microsoft Entra.

azure_dev_cli_credential = AzureDeveloperCliCredential(tenant_id=os.getenv("AZURE_TENANT_ID"), process_timeout=60)  

A biblioteca de cliente da Identidade do Azure fornece credenciais, classes públicas que implementam o protocolo TokenCredential da biblioteca do Azure Core. Uma credencial representa um fluxo de autenticação distinto para adquirir um token de acesso do Microsoft Entra ID. Essas credenciais podem ser encadeadas para formar uma sequência ordenada de mecanismos de autenticação a serem tentados.

O snippet a seguir cria um ChainedTokenCredential using a ManagedIdentityCredential e an AzureDeveloperCliCredential:

  • O é usado para o Azure Functions e o ManagedIdentityCredential Serviço de Aplicativo do Azure. Há suporte para uma identidade gerenciada atribuída pelo usuário passando o client_id arquivo para ManagedIdentityCredential.
  • O AzureDeveloperCliCredential é usado para o desenvolvimento local. Ele foi definido anteriormente com base no locatário do Microsoft Entra a ser usado.
azure_credential = ChainedTokenCredential(
    user_assigned_managed_identity_credential,
    azure_dev_cli_credential
)

Dica

A ordem das credenciais é importante, pois o primeiro token de acesso válido do Microsoft Entra é usado. Para obter mais informações, confira o artigo Visão geral do ChainedTokenCredential.

O snippet de código a seguir obtém o provedor de token OpenAI do Azure com base na credencial do Azure selecionada. Esse valor é obtido chamando o azure.identity.aio.get_bearer_token_provider com dois argumentos:

  • azure_credential: A ChainedTokenCredential instância criada anteriormente para autenticar a solicitação.

  • https://cognitiveservices.azure.com/.default: Necessário um ou mais escopos de token de portador. Nesse caso, o ponto de extremidade dos Serviços Cognitivos do Azure.

token_provider = get_bearer_token_provider(
    azure_credential, "https://cognitiveservices.azure.com/.default"
)

As linhas a seguir verificam as variáveis de ambiente necessárias AZURE_OPENAI_ENDPOINT e AZURE_OPENAI_CHATGPT_DEPLOYMENT azd de recurso, que são provisionadas durante azd a implantação do aplicativo. Um erro será gerado se um valor não estiver presente.

if not os.getenv("AZURE_OPENAI_ENDPOINT"):
    raise ValueError("AZURE_OPENAI_ENDPOINT is required for Azure OpenAI")
if not os.getenv("AZURE_OPENAI_CHATGPT_DEPLOYMENT"):
    raise ValueError("AZURE_OPENAI_CHATGPT_DEPLOYMENT is required for Azure OpenAI")

Este snippet inicializa o cliente OpenAI do Azure, definindo os api_versionparâmetros , azure_endpointe azure_ad_token_provider (client_args):

bp.openai_client = AsyncAzureOpenAI(
    api_version=os.getenv("AZURE_OPENAI_API_VERSION") or "2024-02-15-preview",
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
    azure_ad_token_provider=token_provider,
)  

A linha a seguir define o nome de implantação do modelo OpenAI do Azure para uso em chamadas à API:

bp.openai_model = os.getenv("AZURE_OPENAI_CHATGPT_DEPLOYMENT")

Observação

O OpenAI usa o argumento palavra-chave model para especificar qual modelo usar. O Azure OpenAI tem o conceito de implantações de modelo exclusivas. Quando você usa o Azure OpenAI, model deve se referir ao nome de implantação subjacente escolhido durante a implantação do modelo do Azure OpenAI.

Depois que essa função for concluída, o cliente estará configurado corretamente e pronto para interagir com os serviços OpenAI do Azure.

Fluxo de resposta usando o OpenAI Client e o modelo

O lida response_stream com a chamada de conclusão do chat na rota. O snippet de código a seguir mostra como openai_client e model são usados.

async def response_stream():
    # This sends all messages, so API request may exceed token limits
    all_messages = [
        {"role": "system", "content": "You are a helpful assistant."},
    ] + request_messages

    chat_coroutine = bp.openai_client.chat.completions.create(
        # Azure Open AI takes the deployment name as the model name
        model=bp.openai_model,
        messages=all_messages,
        stream=True,
    )

Explorar o código de exemplo

Os aplicativos .NET dependem da biblioteca de clientes Azure.AI.OpenAI para se comunicar com os serviços OpenAI do Azure, que dependem da biblioteca OpenAI. O aplicativo de exemplo configura a autenticação sem chave usando a ID do Microsoft Entra para se comunicar com o OpenAI do Azure.

Configurar autenticação e registro de serviço

Neste exemplo, a autenticação sem chave é configurada no program.cs arquivo. O snippet de código a seguir usa a AZURE_CLIENT_ID variável de ambiente definida por azd para criar uma instância ManagedIdentityCredential capaz de autenticar por meio da identidade gerenciada atribuída pelo usuário.

var userAssignedIdentityCredential = 
    new ManagedIdentityCredential(builder.Configuration.GetValue<string>("AZURE_CLIENT_ID"));

Observação

As azd variáveis de ambiente de recursos são provisionadas durante azd a implantação do aplicativo.

O snippet de código a seguir usa a AZURE_TENANT_ID variável de ambiente definida por azd para criar uma instância AzureDeveloperCliCredential capaz de autenticar localmente usando a conta conectada ao azd.

var azureDevCliCredential = new AzureDeveloperCliCredential(
    new AzureDeveloperCliCredentialOptions()
    { 
        TenantId = builder.Configuration.GetValue<string>("AZURE_TENANT_ID") 
    });

A biblioteca de clientes do Azure Identity fornece classes de credenciais que implementam o protocolo TokenCredential da biblioteca do Azure Core. Uma credencial representa um fluxo de autenticação distinto para adquirir um token de acesso do Microsoft Entra ID. Essas credenciais podem ser encadeadas usando ChainedTokenCredential para formar uma sequência ordenada de mecanismos de autenticação a serem tentados.

O snippet a seguir registra a AzureOpenAIClient injeção de dependência for e cria um ChainedTokenCredential using a ManagedIdentityCredential e an AzureDeveloperCliCredential:

  • O é usado para o Azure Functions e o ManagedIdentityCredential Serviço de Aplicativo do Azure. Há suporte para uma identidade gerenciada atribuída pelo usuário usando o AZURE_CLIENT_ID que foi fornecido ao ManagedIdentityCredential.
  • O AzureDeveloperCliCredential é usado para o desenvolvimento local. Ele foi definido anteriormente com base no locatário do Microsoft Entra a ser usado.
builder.Services.AddAzureClients(
    clientBuilder => {
        clientBuilder.AddClient<AzureOpenAIClient, AzureOpenAIClientOptions>((options, _, _)
            => new AzureOpenAIClient(
                new Uri(endpoint),
                new ChainedTokenCredential(
                    userAssignedIdentityCredential, azureDevCliCredential), options));
    });

Dica

A ordem das credenciais é importante, pois o primeiro token de acesso válido do Microsoft Entra é usado. Para obter mais informações, confira o artigo Visão geral do ChainedTokenCredential.

Obter conclusões de chat usando o cliente OpenAI do Azure

O aplicativo Web Blazor injeta o registrado AzureOpenAIClient na parte superior do Home.Razor componente:

@inject AzureOpenAIClient azureOpenAIClient

Quando o usuário envia o formulário, ele AzureOpenAIClient envia seu prompt ao modelo OpenAI para gerar uma conclusão:

ChatClient chatClient = azureOpenAIClient.GetChatClient("gpt-4o-mini");

messages.Add(new UserChatMessage(model.UserMessage));

ChatCompletion completion = await chatClient.CompleteChatAsync(messages);
    messages.Add(new SystemChatMessage(completion.Content[0].Text));

Explorar o código de exemplo

Embora o OpenAI e o Azure OpenAI Service dependam de uma openai (biblioteca de cliente JavaScript comum), pequenas alterações de código são necessárias ao usar pontos de extremidade do OpenAI do Azure. Vamos ver como este exemplo configura a autenticação sem chave com a ID do Microsoft Entra e se comunica com o Azure OpenAI.

Autenticação sem chave para cada ambiente

A biblioteca de clientes do Azure Identity fornece classes de credenciais que implementam o protocolo TokenCredential da biblioteca do Azure Core. Uma credencial representa um fluxo de autenticação distinto para adquirir um token de acesso do Microsoft Entra ID. Essas credenciais podem ser encadeadas usando ChainedTokenCredential para formar uma sequência ordenada de mecanismos de autenticação a serem tentados. Isso permite que você implante o mesmo código em ambientes de produção e desenvolvimento local.

Diagrama mostrando as duas credenciais no fluxo em que a identidade gerenciada é tentada primeiro e, em seguida, a credencial padrão do Azure é tentada.

Configurar a autenticação com identidade gerenciada

Neste exemplo, o ./src/azure-authentication.ts fornece várias funções para fornecer autenticação sem chave para o OpenAI do Azure.

A primeira função, getChainedCredential(), retorna a primeira credencial válida do Azure encontrada na cadeia.

function getChainedCredential() {

    return new ChainedTokenCredential(
        new ManagedIdentityCredential(process.env.AZURE_CLIENT_ID!), 
        new AzureDeveloperCliCredential({
            tenantId: process.env.AZURE_TENANT_ID! ? process.env.AZURE_TENANT_ID! : undefined
          })
    );
}
  • ManagedIdentityCredential é tentado primeiro. Ele é configurado com a variável de ambiente AZURE_CLIENT_ID no runtime de produção e é capaz de autenticar por meio da identidade gerenciada atribuída pelo usuário.
  • AzureDeveloperCliCredential é tentado em segundo lugar. Ele é configurado quando um desenvolvedor entra com a CLI az logindo Azure.

Dica

A ordem das credenciais é importante, pois o primeiro token de acesso válido do Microsoft Entra é usado. Para obter mais informações, confira o artigo Visão geral do ChainedTokenCredential.

Obter token de portador para OpenAI

A segunda função em ./src/azure-authentication.ts é getTokenProvider(), que retorna um retorno de chamada que fornece um token de portador com escopo para o ponto de extremidade dos Serviços Cognitivos do Azure.

function getTokenProvider(): () => Promise<string> {
    const credential  = getChainedCredential();
    const scope = "https://cognitiveservices.azure.com/.default";
    return getBearerTokenProvider(credential, scope);
}

O snippet de código anterior usa getBearerTokenProvider a credencial e o escopo e, em seguida, retorna um retorno de chamada que fornece um token de portador.

Criar cliente OpenAI do Azure autenticado

A terceira função é ./src/azure-authentication.ts getOpenAiClient(), que retorna o cliente OpenAI do Azure.

export function getOpenAiClient(): AzureOpenAI | undefined{
    try {

        if (!process.env.AZURE_OPENAI_ENDPOINT) {
            throw new Error("AZURE_OPENAI_ENDPOINT is required for Azure OpenAI");
        }
        if (!process.env.AZURE_OPENAI_CHAT_DEPLOYMENT) {
            throw new Error("AZURE_OPENAI_CHAT_DEPLOYMENT is required for Azure OpenAI");
        }

        const options = { 
            azureADTokenProvider: getTokenProvider(), 
            deployment: process.env.AZURE_OPENAI_CHAT_DEPLOYMENT!, 
            apiVersion: process.env.AZURE_OPENAI_API_VERSION! || "2024-02-15-preview",
            endpoint: process.env.AZURE_OPENAI_ENDPOINT!
        }

        // Create the Asynchronous Azure OpenAI client
        return new AzureOpenAI (options);

    } catch (error) {
        console.error('Error getting Azure OpenAI client: ', error);
    }
}

Esse código usa as opções, incluindo o token com escopo correto, e cria o AzureOpenAI cliente

Transmitir resposta de chat com o OpenAI do Azure

Use o manipulador de rotas do Fastify a seguir para ./src/openai-chat-api.ts enviar uma mensagem ao OpenAI do Azure e transmitir a resposta.

import { FastifyReply, FastifyRequest } from 'fastify';
import { AzureOpenAI } from "openai";
import { getOpenAiClient } from './azure-authentication.js';
import { ChatCompletionChunk, ChatCompletionMessageParam } from 'openai/resources/chat/completions';

interface ChatRequestBody {
    messages: ChatCompletionMessageParam [];
  }

export async function chatRoute (request: FastifyRequest<{ Body: ChatRequestBody }>, reply: FastifyReply) {

    const requestMessages: ChatCompletionMessageParam[] = request?.body?.messages;
    const openaiClient: AzureOpenAI | undefined = getOpenAiClient();

    if (!openaiClient) {
      throw new Error("Azure OpenAI client is not configured");
    }

    const allMessages = [
      { role: "system", content: "You are a helpful assistant."},
      ...requestMessages
    ] as ChatCompletionMessageParam [];

    const chatCompletionChunks = await openaiClient.chat.completions.create({
      // Azure Open AI takes the deployment name as the model name
      model: process.env.AZURE_OPENAI_CHAT_DEPLOYMENT_MODEL || "gpt-4o-mini",
      messages: allMessages,
      stream: true

    })
    reply.raw.setHeader('Content-Type', 'text/html; charset=utf-8');
    reply.raw.setHeader('Cache-Control', 'no-cache');
    reply.raw.setHeader('Connection', 'keep-alive');
    reply.raw.flushHeaders();

    for await (const chunk of chatCompletionChunks as AsyncIterable<ChatCompletionChunk>) {
      for (const choice of chunk.choices) {
        reply.raw.write(JSON.stringify(choice) + "\n")
      }
    }

    reply.raw.end()

}

A função obtém a conversa de chat, incluindo todas as mensagens anteriores, e as envia para o Azure OpenAI. À medida que as partes do fluxo são retornadas do Azure OpenAI, elas são enviadas ao cliente.

Outras considerações de segurança

Este artigo demonstra como o exemplo usa ChainedTokenCreadential para autenticação no serviço OpenAI do Azure.

O exemplo também tem uma ação do GitHub que verifica os arquivos de infraestrutura como código e gera um relatório contendo todos os problemas detectados. Para garantir práticas recomendadas contínuas em seu próprio repositório, recomendamos que qualquer pessoa que crie soluções com base em nossos modelos garanta que a configuração de verificação de segredo do GitHub esteja habilitada.

Considere outras medidas de segurança, como:

Limpar os recursos

Limpar recursos do Azure

Os recursos do Azure criados neste artigo são cobrados para sua assinatura do Azure. Se você não espera precisar desses recursos no futuro, exclua-os para evitar incorrer em mais encargos.

Para excluir os recursos do Azure e remover o código-fonte, execute o seguinte comando da Azure Developer CLI:

azd down --purge

Limpar GitHub Codespaces

A exclusão do ambiente GitHub Codespaces garante que você possa maximizar a quantidade de horas gratuitas por núcleo que você tem direito na sua conta.

Importante

Para saber mais sobre os direitos da sua conta do GitHub, confira O GitHub Codespaces inclui mensalmente armazenamento e horas de núcleo.

  1. Entre no painel do GitHub Codespaces (https://github.com/codespaces).

  2. Localize seus Codespaces atualmente em execução, originados do repositório Azure-Samples/openai-chat-app-quickstart do GitHub.

  3. Abra o menu de contexto do codespace e selecione Excluir.

  1. Entre no painel do GitHub Codespaces (https://github.com/codespaces).

  2. Localize seus Codespaces atualmente em execução, originados do repositório Azure-Samples/openai-chat-app-quickstart-dotnet do GitHub.

  3. Abra o menu de contexto do codespace e selecione Excluir.

  1. Entre no painel do GitHub Codespaces (https://github.com/codespaces).

  2. Localize seus Codespaces atualmente em execução, originados do repositório Azure-Samples/openai-chat-app-quickstart-javascript do GitHub.

  3. Abra o menu de contexto do codespace e selecione Excluir.

Obter ajuda

Se o problema não for resolvido, registre seu problema nos problemas do repositório.

Próximas etapas

Se o problema não for resolvido, registre seu problema nos problemas do repositório.

Se o problema não for resolvido, registre seu problema nos problemas do repositório.