Partilhar via


Dimensionar o chat do Azure OpenAI para JavaScript usando o RAG com os 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 token e cota de modelo do Azure OpenAI. Essa abordagem usa os Aplicativos de Contêiner do Azure para criar três pontos de extremidade do Azure OpenAI, 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 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á tiver implantado o aplicativo de chat uma vez, alterará a variável de ambiente para oferecer suporte a um ponto de extremidade personalizado para o balanceador de carga e o reimplantará novamente.

    • Aplicativo de bate-papo disponível nestes idiomas:

  • Aplicativo de balanceador de carga

Nota

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 Azure OpenAI com Aplicativos de Contêiner do Azure

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

Diagram showing chat app architecture with Azure OpenAI resource highlighted.Diagrama mostrando a arquitetura do aplicativo de chat com o recurso Azure OpenAI 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 ao seu servidor de aplicativo de chat.

Diagram showing chat app architecture with Azure Container Apps in front of three Azure OpenAI resources.Diagrama mostrando 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 Contêiner do Azure fica na frente de um conjunto de recursos do Azure OpenAI. O aplicativo Container 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.

Diagram displaying a normal scenario. The normal scenario shows three Azure OpenAI endpoint groups with the first group of two endpoints getting successful traffic. Diagrama exibindo 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á num cenário de limitação, por exemplo, devido a limites de cota, o aplicativo Contêiner do Azure pode recorrer imediatamente a um recurso OpenAI diferente do Azure para atender à solicitação original do aplicativo de chat.

Diagram displaying a throttling scenario with a 429 failing response code and a response header of how many seconds the client has to wait to retry.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 tem que esperar para tentar novamente.

Pré-requisitos

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

Open this project in GitHub CodespacesAbra este projeto no GitHub Codespaces

Importante

Todas as contas do GitHub podem usar o Codespaces por até 60 horas gratuitas por mês com 2 instâncias principais. Para obter mais informações, consulte GitHub Codespaces mensalmente incluído armazenamento e 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-provisionamento.

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

    azd up
    

    Você precisará selecionar uma assinatura e uma região para a implantação. Eles não precisam ser a mesma assinatura e região do aplicativo de bate-papo.

  4. Aguarde pela conclusão da implementação antes de continuar.

Obter o ponto de extremidade de implantação

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

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

Reimplantar o aplicativo de bate-papo com o ponto de extremidade do balanceador de carga

Estes são concluídos no exemplo de aplicativo de chat.

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

    Idioma Codespaces Visual Studio Code
    .NET Open in GitHub CodespacesAbrir no GitHub Codespaces Open in Dev ContainersAbrir em contêineres de desenvolvimento
    JavaScript Open in GitHub CodespacesAbrir no GitHub Codespaces Open in Dev ContainersAbrir em contêineres de desenvolvimento
    Python Open in GitHub CodespacesAbrir no GitHub Codespaces Open in Dev ContainersAbrir em contêineres de desenvolvimento
  2. Entre na CLI do Desenvolvedor do Azure (AZD).

    azd auth login
    

    Termine as instruções de login.

  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 bate-papo para usar uma URL personalizada para as solicitações OpenAI.

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

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

    azd up
    

Agora você pode usar o aplicativo de bate-papo com a confiança de que ele foi criado para ser dimensionado para 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 do grupo, selecione o recurso Aplicativo de contêiner.

  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 começando com Proxying to https://openai3, onde 3 indica o terceiro recurso do Azure OpenAI.

    Screenshot showing Azure Container App streaming logs with two log lines high lighted which demonstrate the log comment. Captura de tela mostrando os logs de streaming do Aplicativo de Contêiner do Azure com duas linhas de log realçadas que demonstram o comentário do log.

  6. À medida que você usa o aplicativo de bate-papo, 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 do TPM

Por predefiniçã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 o aplicativo de bate-papo com a confiança de que ele foi criado para ser dimensionado para muitos usuários sem ficar sem cota. Altere este valor quando:

  • Recebe erros de capacidade de implementação: reduza 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
    

Clean up resources (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 do aplicativo de bate-papo para limpar esses recursos.

Recursos limpos 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. Isso permite que você reutilize o Azure OpenAI TPM.
  • force: A exclusão acontece silenciosamente, sem exigir o consentimento do usuário.

Limpar espaços de código do GitHub

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 Codespaces do GitHub mensalmente incluídos armazenamento e horas principais.

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

  2. Localize seus Codespaces atualmente em execução provenientes do azure-samples/openai-aca-lb repositório GitHub.

    Screenshot of all the running Codespaces including their status and templates.Captura de tela de todos os Codespaces em execução, incluindo seu status e modelos.

  3. Abra o menu de contexto do espaço de código e selecione Excluir.

    Screenshot of the context menu for a single codespace with the delete option highlighted.Captura de tela do menu de contexto para um único espaço de código com a opção de exclusão realçada.

Obter ajuda

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

Código de exemplo

Os exemplos usados neste artigo incluem:

Próximo passo