Partilhar via


Escalone o chat do Azure OpenAI para .NET usando RAG com Azure Container Apps

Saiba como adicionar balanceamento de carga ao seu aplicativo para estender o aplicativo de chat além dos limites de token e cota de modelo do Serviço Azure OpenAI. Essa abordagem usa os Aplicativos de Contêiner do Azure para criar três pontos de extremidade do Azure OpenAI e um contêiner primário para direcionar o tráfego de entrada para um dos três pontos de extremidade.

Este artigo requer que você implante dois exemplos separados:

  • Aplicativo de bate-papo

    • Se você ainda não implantou o aplicativo de bate-papo, aguarde até que o exemplo de balanceador de carga seja implantado.

    • Se você já implantou o aplicativo de chat uma vez, altere a variável de ambiente para oferecer suporte a um ponto de extremidade personalizado para o balanceador de carga e reimplante-o novamente.

    • A aplicação de chat está disponível nos seguintes idiomas:

  • Aplicativo de balanceador de carga

Observação

Este artigo usa um ou mais modelos de aplicativo de IA como base para os exemplos e orientações no artigo. Os modelos de aplicativos de IA fornecem implementações de referência bem mantidas que são fáceis de implantar. Eles ajudam a garantir um ponto de partida de alta qualidade para seus aplicativos de IA.

Arquitetura para o equilíbrio de carga do Azure OpenAI com Aplicações de Contentores do Azure

Como o recurso do Azure OpenAI tem limites específicos de token e cota de modelo, um aplicativo de chat que usa um único recurso do Azure OpenAI é propenso a ter falhas de conversa devido a esses limites.

Diagrama que mostra a arquitetura do aplicativo de chat com o recurso Azure OpenAI realçado.

Para usar o aplicativo de bate-papo sem atingir esses limites, use uma solução com balanceamento de carga com Aplicativos de contêiner. Esta solução expõe perfeitamente um único endpoint de Container Apps para o seu servidor da aplicação de chat.

Diagrama que mostra a arquitetura do aplicativo de chat com os Aplicativos de Contêiner do Azure na frente de três recursos do Azure OpenAI.

O aplicativo de contêiner fica na frente de um conjunto de recursos do Azure OpenAI. O aplicativo de contêiner resolve dois cenários: normal e limitado. Durante um cenário normal em que a cota de token e modelo está disponível, o recurso OpenAI do Azure retorna um 200 de volta por meio do aplicativo de contêiner e do servidor de aplicativos.

Diagrama que mostra um cenário normal. O cenário normal mostra três grupos de pontos de extremidade do Azure OpenAI com o primeiro grupo de dois pontos de extremidade obtendo tráfego bem-sucedido.

Quando um recurso está em um cenário limitado devido aos limites de cota, o aplicativo contêiner pode tentar novamente um recurso diferente do Azure OpenAI imediatamente para atender à solicitação original do aplicativo de chat.

Diagrama que mostra um cenário de limitação com um código de resposta com falha 429 e um cabeçalho de resposta de quantos segundos o cliente tem que esperar para tentar novamente.

Pré-requisitos

  • Subscrição do Azure. Crie um gratuitamente

  • Acesso concedido ao Azure OpenAI na assinatura desejada do Azure.

    Atualmente, o acesso a este serviço é concedido apenas por aplicativo. Você deve solicitar acesso ao Azure OpenAI.

  • Contentores de desenvolvimento estão disponíveis para ambos os casos, com todas as dependências necessárias para concluir este artigo. Você pode executar os contêineres de desenvolvimento no GitHub Codespaces (em um navegador) ou localmente usando o Visual Studio Code.

  • Apenas uma conta GitHub é necessária para usar o CodeSpaces

Abra a aplicação de exemplo do balanceador de carga das Apps de Contêiner

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

Abrir no GitHub Codespaces.

Importante

Todas as contas do GitHub podem usar o GitHub Codespaces por até 60 horas gratuitas por mês com duas instâncias principais. Para obter mais informações, consulte os Codespaces do GitHub incluem mensalmente o armazenamento e as horas principais.

Implantar o balanceador de carga de Aplicativos de Contêiner do Azure

  1. Entre na CLI do Desenvolvedor do Azure para fornecer autenticação às etapas de provisionamento e implantação:

    azd auth login --use-device-code
    
  2. Defina uma variável de ambiente para usar a autenticação da CLI do Azure para a etapa de pós-provisão:

    azd config set auth.useAzCliAuth "true"
    
  3. Implante o aplicativo balanceador de carga:

    azd up
    

    Selecione uma assinatura e uma região para a implantação. Eles não precisam ter a mesma assinatura e região do aplicativo de bate-papo.

  4. Aguarde a conclusão da implantação antes de continuar.

Obter o endpoint de implantação

  1. Use o seguinte comando para mostrar o ponto de extremidade implantado para a aplicação de contêiner:

    azd env get-values
    
  2. Copie o valor CONTAINER_APP_URL. Você irá usá-lo na próxima secção.

Reimplantar a aplicação de chat com o endpoint do balanceador de carga

Esses exemplos são concluídos no exemplo de aplicativo de bate-papo.

  1. Abra o contêiner de desenvolvimento do exemplo de aplicativo de bate-papo usando uma das opções a seguir.

    Idioma Espaços de código do GitHub Código do Visual Studio
    .NET Abrir no Codespaces do GitHub Abrir em contentores de desenvolvimento
    Javascript Abrir no Codespaces do GitHub Abrir em contentores de desenvolvimento
    Python Abrir no Codespaces do GitHub Abrir em contentores de desenvolvimento
  2. Entre na CLI do Desenvolvedor do Azure (AZD):

    azd auth login
    

    Conclua as instruções de início de sessão.

  3. Crie um ambiente AZD com um nome como chat-app:

    azd env new <name>
    
  4. Adicione a seguinte variável de ambiente, que informa ao back-end do aplicativo de chat para usar uma URL personalizada para as solicitações do Azure OpenAI:

    azd env set OPENAI_HOST azure_custom
    
  5. Adicione a seguinte variável de ambiente. Substitua <CONTAINER_APP_URL> pelo URL da seção anterior. Essa ação informa ao back-end do aplicativo de chat qual é o valor da URL personalizada para a solicitação do Azure OpenAI.

    azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
    
  6. Implante o aplicativo de bate-papo:

    azd up
    

Agora pode usar a aplicação de chat com a confiança de que está concebida para escalar para muitos utilizadores sem esgotar a quota.

Transmitir logs para ver os resultados do balanceador de carga

  1. No portal do Azure, pesquise o seu grupo de recursos.

  2. Na lista de recursos no grupo, selecione o recurso Aplicativos de Contêiner do Azure.

  3. Selecione Monitoramento>fluxo de Log para exibir o log.

  4. Use o aplicativo de bate-papo para gerar tráfego no log.

  5. Procure os logs, que fazem referência aos recursos do Azure OpenAI. Cada um dos três recursos tem sua identidade numérica no comentário de log que começa com Proxying to https://openai3, onde 3 indica o terceiro recurso do Azure OpenAI.

    Captura de tela que mostra os logs de streaming dos Aplicativos de Contêiner do Azure com duas linhas de log realçadas para demonstrar os comentários do log.

Quando o balanceador de carga recebe o status de que a solicitação excede a cota, ele gira automaticamente para outro recurso.

Configurar a cota do TPM

Por padrão, cada uma das instâncias do Azure OpenAI no balanceador de carga é implantada com uma capacidade de 30.000 tokens por minuto (TPM). Você pode usar a aplicação de chat com a confiança de que foi criada para escalar para muitos utilizadores sem ultrapassar o limite. Altere este valor quando:

  • Você obtém erros de capacidade de implantação: diminua o valor.
  • Você precisa de maior capacidade: aumente o valor.
  1. Use o seguinte comando para alterar o valor:

    azd env set OPENAI_CAPACITY 50
    
  2. Reimplante o balanceador de carga:

    azd up
    

Limpar recursos

Quando terminar de usar o aplicativo de bate-papo e o balanceador de carga, limpe os recursos. Os recursos do Azure criados neste artigo são cobrados na sua assinatura do Azure. Se você não espera precisar desses recursos no futuro, exclua-os para evitar incorrer em mais cobranças.

Limpar recursos do aplicativo de bate-papo

Volte ao artigo sobre a aplicação de chat para organizar os recursos:

Limpar os recursos do balanceador de upload

Execute o seguinte comando da CLI do Desenvolvedor do Azure para excluir os recursos do Azure e remover o código-fonte:

azd down --purge --force

Os interruptores fornecem:

  • purge: Os recursos excluídos são imediatamente limpos para que você possa reutilizar os tokens do Serviço OpenAI do Azure por minuto.
  • force: A exclusão acontece silenciosamente, sem exigir o consentimento do usuário.

Limpar os Codespaces do GitHub e o Visual Studio Code

  • de Codespaces do GitHub
  • de código do Visual Studio

Excluir o ambiente do GitHub Codespaces garante que você possa maximizar a quantidade de direitos de horas gratuitas por núcleo que você obtém para sua conta.

Importante

Para obter mais informações sobre os direitos da sua conta do GitHub, consulte os Codespaces do GitHub incluem mensalmente o armazenamento e as horas principais.

  1. Faça login no dashboard do GitHub Codespaces.

  2. Localize seus espaços de código em execução que são originados do repositório azure-samples/openai-aca-lb GitHub.

    Captura de tela que mostra todos os espaços de código em execução, incluindo seu status e modelos.

  3. Abra o menu de contexto para o espaço de código e, em seguida, selecione Excluir.

    Captura de tela que mostra o menu de contexto de um único espaço de código com a opção Excluir realçada.

Obter ajuda

Se tiver problemas para implantar o balanceador de carga do Azure API Management, adicione o seu problema na página de Problemas em do repositório.

Código de exemplo

Os exemplos usados neste artigo incluem:

Próximo passo