Dimensionar o bate-papo do Azure OpenAI para Python usando RAG com Aplicativos de Contêiner do Azure

Saiba como adicionar balanceamento de carga ao seu aplicativo para estender o aplicativo de chat além dos limites de cota de modelo e token do OpenAI do Azure. Esta abordagem usa os Aplicativos de Contêiner do Azure para criar três pontos de extremidade do OpenAI do Azure, bem como 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 chat

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

    • Se você já tiver implantado o aplicativo de chat uma vez, você alterará a variável de ambiente para dar suporte a um ponto de extremidade personalizado para o balanceador de carga e reimplantá-lo novamente.

    • Aplicativo de chat disponível nestes idiomas:

  • Aplicativo 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 e fáceis de implantar que ajudam a garantir um ponto de partida de alta qualidade para seus aplicativos de IA.

Arquitetura para balanceamento de carga do OpenAI do Azure com Aplicativos de Contêiner do Azure

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

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

Para usar o aplicativo de chat sem atingir esses limites, use uma solução com balanceamento de carga com os Aplicativos de Contêiner do Azure. Esta solução expõe perfeitamente um único ponto de extremidade dos Aplicativos de Contêiner do Azure para o servidor de aplicativo de chat.

Diagrama mostrando a arquitetura do aplicativo de chat com os Aplicativos de Contêiner do Azure diante de três recursos de OpenAI do Azure.

O Aplicativo de Contêiner do Azure fica na frente de um conjunto de recursos do OpenAI do Azure. 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ão disponíveis, o recurso do OpenAI do Azure retorna um 200 de volta por meio do Aplicativo de Contêiner e do Servidor de Aplicativos.

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

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

Diagrama exibindo 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 precisa aguardar para tentar novamente.

Pré-requisitos

Abrir o aplicativo de exemplo de balanceador local de aplicativos de contêiner

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.

Abra este projeto no Codespaces do GitHub

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.

Implantar o balanceador de carga dos 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-provisionamento.

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

    azd up
    

    Você precisará selecionar uma assinatura e uma região para a implantação. Estas não precisam ser a mesma assinatura e região que o aplicativo de chat.

  4. Aguarde a implantação ser concluída antes de continuar.

Obter o ponto de extremidade de implantação

  1. Use o seguinte comando para exibir o ponto de extremidade implantado para o aplicativo Contêiner do Azure.

    azd env get-values
    
  2. Copie o valor CONTAINER_APP_URL. Você o usará na próxima seção.

Reimplantar o aplicativo de chat com o ponto de extremidade do balanceador de carga

Elas são concluídas no exemplo do aplicativo de chat.

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

    Idioma Codespaces Visual Studio Code
    .NET Abrir em GitHub Codespaces Abrir em contêineres de desenvolvimento
    JavaScript Abrir em GitHub Codespaces Abrir em contêineres de desenvolvimento
    Python Abrir em GitHub Codespaces Abrir em contêineres de desenvolvimento
  2. Entre na Azure Developer CLI (AZD).

    azd auth login
    

    Conclua as instruções de entrada.

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

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

    azd env set OPENAI_HOST azure_custom
    
  5. Adicione a variável de ambiente a seguir, substituindo <CONTAINER_APP_URL> pela URL da seção anterior. Esta ação informa ao back-end do aplicativo de chat qual é o valor da URL personalizada para a solicitação do OpenAI.

    azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
    
  6. Implante o aplicativo de chat.

    azd up
    

Agora você pode usar o aplicativo de chat com a confiança de que ele foi criado para ser escalado entre muitos usuários sem ficar sem cota.

Transmitir logs para ver os resultados do balanceador de carga

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

  2. Na lista de recursos no grupo, selecione o recurso Aplicativo de Contêiner.

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

  4. Use o aplicativo de chat para gerar tráfego no log.

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

    Captura de tela mostrando logs de streaming do Aplicativo de Contêiner do Azure com duas linhas de log iluminadas que demonstram o comentário do log.

  6. Conforme você usa o aplicativo de chat, quando o balanceador de carga recebe o status de que a solicitação excedeu a cota, o balanceador de carga gira automaticamente para outro recurso.

Configurar a cota de tokens por minuto (TPM)

Por padrão, cada uma das instâncias do OpenAI no balanceador de carga será implantada com capacidade de 30.000 TPM (tokens por minuto). Você pode usar o aplicativo de chat tendo a confiança de que ele foi criado para ser dimensionado entre muitos usuários sem ficar sem cota. Altere esse valor quando:

  • Se ocorrerem erros de capacidade de implantação: reduza esse valor.
  • Ao planejar uma capacidade mais alta, aumente o valor.
  1. Use o comando a seguir para alterar o valor.

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

    azd up
    

Limpar os recursos

Quando terminar de usar o aplicativo de chat e o balanceador de carga, limpe os recursos. 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.

Limpar recursos do aplicativo de chat

Retorne ao artigo do aplicativo de chat para limpar esses recursos.

Limpar recursos do balanceador de upload

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

azd down --purge --force

As opções fornecem:

  • purge: os recursos excluídos são limpos imediatamente. Isso permite reutilizar o TPM do OpenAI do Azure.
  • force: a exclusão ocorre silenciosamente, sem exigir o consentimento do usuário.

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-aca-lb do GitHub.

    Captura de tela de todos os Codespaces em execução, incluindo seu status e modelos.

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

    Captura de tela do menu de contexto de um único codespace com a opção de exclusão destacada.

Obter ajuda

Se você tiver problemas para implantar o balanceador de carga do Gerenciamento de API do Azure, registre o seu problema nos Problemas do repositório.

Código de exemplo

Os exemplos usados neste artigo incluem:

Próxima etapa