Ridimensionare la chat OpenAI di Azure per Java usando RAG con App Azure Container

Informazioni su come aggiungere il bilanciamento del carico all'applicazione per estendere l'app di chat oltre i limiti di quota del token e del modello di Azure OpenAI. Questo approccio usa app contenitore di Azure per creare tre endpoint OpenAI di Azure, nonché un contenitore primario per indirizzare il traffico in ingresso a uno dei tre endpoint.

Questo articolo richiede la distribuzione di 2 esempi separati:

  • App chat

    • Se l'app chat non è ancora stata distribuita, attendere fino a quando non viene distribuito l'esempio di bilanciamento del carico.

    • Se l'app di chat è già stata distribuita una sola volta, si modificherà la variabile di ambiente per supportare un endpoint personalizzato per il servizio di bilanciamento del carico e ridistribuirlo nuovamente.

    • App chat disponibile in queste lingue:

  • App di bilanciamento del carico

Architettura per il bilanciamento del carico di Azure OpenAI con app Azure Container

Poiché la risorsa OpenAI di Azure ha limiti di quota di token e modelli specifici, un'app di chat che usa una singola risorsa OpenAI di Azure è soggetta a errori di conversazione a causa di tali limiti.

Diagramma che mostra l'architettura dell'app chat con la risorsa OpenAI di Azure evidenziata.

Per usare l'app di chat senza raggiungere tali limiti, usare una soluzione con carico bilanciato con App Azure Container. Questa soluzione espone facilmente un singolo endpoint da App Contenitore di Azure al server app di chat.

Diagramma che mostra l'architettura dell'app di chat con App Contenitore di Azure davanti a tre risorse OpenAI di Azure.

L'app Azure Container si trova davanti a un set di risorse OpenAI di Azure. L'app Contenitore risolve due scenari: normali e limitati. Durante uno scenario normale in cui è disponibile la quota di token e modelli, la risorsa OpenAI di Azure restituisce 200 tramite l'app contenitore e il server app.

Diagramma che mostra uno scenario normale. Lo scenario normale mostra tre gruppi di endpoint OpenAI di Azure con il primo gruppo di due endpoint che hanno avuto esito positivo sul traffico.

Quando una risorsa si trova in uno scenario limitato, ad esempio a causa dei limiti di quota, l'app Azure Container può ritentare immediatamente una risorsa OpenAI di Azure diversa per completare la richiesta originale dell'app di chat.

Diagramma che mostra uno scenario di limitazione con un codice di risposta con errore 429 e un'intestazione di risposta del numero di secondi di attesa del client per riprovare.

Prerequisiti

Aprire l'app di esempio del servizio di bilanciamento locale delle app contenitore

GitHub Codespaces esegue un contenitore di sviluppo gestito da GitHub con Visual Studio Code per il Web come interfaccia utente. Per l'ambiente di sviluppo più semplice, usa GitHub Codespaces per avere gli strumenti di sviluppo e le dipendenze corretti preinstallati per completare questo articolo.

Aprire in GitHub Codespaces

Importante

Tutti gli account GitHub possono usare Codespaces per un massimo di 60 ore gratuite ogni mese con 2 istanze di core. Per altre informazioni, vedere Spazio di archiviazione e ore core mensili inclusi in GitHub Codespaces.

Distribuire il servizio di bilanciamento del carico di App Contenitore di Azure

  1. Per distribuire il servizio di bilanciamento del carico in Azure, accedere all'interfaccia della riga di comando per sviluppatori di Azure (AZD).

    azd auth login
    
  2. Completare le istruzioni di accesso.

  3. Distribuire l'app di bilanciamento del carico.

    azd up
    

    Sarà necessario selezionare una sottoscrizione e un'area per la distribuzione. Non è necessario che siano la stessa sottoscrizione e la stessa area dell'app di chat.

  4. Attendere il completamento della distribuzione prima di continuare.

  5. Ottenere l'URL alla fine della distribuzione denominata Endpoint. Questo è l'oggetto CONTAINER_APP_URL usato nella sezione successiva.

Ridistribuire l'app Chat con l'endpoint del servizio di bilanciamento del carico

Questi sono completati nell'esempio di app di chat.

  1. Aprire il contenitore di sviluppo dell'esempio di app di chat usando una delle opzioni seguenti.

    Lingua Codespaces Visual Studio Code
    .NET Aprire in GitHub Codespaces Aprire in contenitori di sviluppo
    JavaScript Aprire in GitHub Codespaces Aprire in contenitori di sviluppo
    Python Aprire in GitHub Codespaces Aprire in contenitori di sviluppo
  2. Accedere all'interfaccia della riga di comando per sviluppatori di Azure (AZD).

    azd auth login
    

    Completare le istruzioni di accesso.

  3. Creare un ambiente AZD con un nome, chat-appad esempio .

    azd env new <name>
    
  4. Aggiungere la variabile di ambiente seguente, che indica al back-end dell'app Chat di usare un URL personalizzato per le richieste OpenAI.

    azd env set OPENAI_HOST azure_custom
    
  5. Aggiungere la variabile di ambiente seguente, sostituendo <CONTAINER_APP_URL> l'URL dalla sezione precedente. Questa azione indica al back-end dell'app Chat il valore dell'URL personalizzato per la richiesta OpenAI.

    azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
    
  6. Distribuire l'app chat.

    azd up
    

È ora possibile usare l'app di chat con la certezza che sia stata creata per la scalabilità tra molti utenti senza esaurire la quota.

Trasmettere i log per visualizzare i risultati del servizio di bilanciamento del carico

  1. Nella portale di Azure cercare il gruppo di risorse.

  2. Nell'elenco delle risorse nel gruppo selezionare la risorsa App contenitore.

  3. Selezionare Monitoraggio -> Flusso di log per visualizzare il log.

  4. Usare l'app chat per generare traffico nel log.

  5. Cercare i log, che fanno riferimento alle risorse OpenAI di Azure. Ognuna delle tre risorse ha la propria identità numerica nel commento del log che inizia con Proxying to https://openai3, dove 3 indica la terza risorsa OpenAI di Azure.

    Screenshot che mostra i log di streaming dell'app Azure Container con due righe di log ad alta illuminazione che illustrano il commento del log.

  6. Quando si usa l'app chat, quando il servizio di bilanciamento del carico riceve lo stato in cui la richiesta ha superato la quota, il servizio di bilanciamento del carico ruota automaticamente su un'altra risorsa.

Configurare la quota di token al minuto (TPM)

Per impostazione predefinita, ognuna delle istanze OpenAI nel servizio di bilanciamento del carico verrà distribuita con capacità di 30.000 TPM (token al minuto). È possibile usare l'app di chat con la certezza che sia stata creata per la scalabilità tra molti utenti senza esaurire la quota. Modificare questo valore quando:

  • Si ottengono errori di capacità di distribuzione: minore è il valore.
  • Pianificare una capacità superiore, aumentare il valore.
  1. Usare il comando seguente per modificare il valore.

    azd env set OPENAI_CAPACITY 50
    
  2. Ridistribuire il servizio di bilanciamento del carico.

    azd up
    

Pulire le risorse

Dopo aver completato sia l'app di chat che il servizio di bilanciamento del carico, pulire le risorse. Le risorse di Azure create in questo articolo vengono fatturate alla sottoscrizione di Azure. Se prevedi che queste risorse non ti servano in futuro, eliminale per evitare di incorrere in costi aggiuntivi.

Pulire le risorse dell'app chat

Tornare all'articolo sull'app di chat per pulire tali risorse.

Pulire le risorse del servizio di bilanciamento del caricamento

Esegui il seguente comando Azure Developer CLI per eliminare le risorse di Azure e rimuovere il codice sorgente:

azd down --purge --force

Le opzioni forniscono:

  • purge: le risorse eliminate vengono eliminate immediatamente. In questo modo è possibile riutilizzare il TPM OpenAI di Azure.
  • force: l'eliminazione viene eseguita automaticamente, senza richiedere il consenso dell'utente.

Pulire GitHub Codespaces

L'eliminazione dell'ambiente GitHub Codespaces offre la possibilità di aumentare le ore gratuite per core a cui si ha diritto per l'account.

Importante

Per altre informazioni sui diritti dell'account GitHub, vedere Ore di archiviazione e di core mensili incluse in GitHub Codespaces.

  1. Accedere al dashboard di GitHub Codespaces (https://github.com/codespaces).

  2. Individuare i codespace attualmente in esecuzione provenienti dal repository GitHub azure-samples/openai-aca-lb.

    Screenshot di tutti i codespace in esecuzione, inclusi lo stato e i modelli.

  3. Aprire il menu di scelta rapida per il codespace e selezionare Elimina.

    Screenshot del menu di scelta rapida per un singolo codespace con l'opzione di eliminazione evidenziata.

Come ottenere assistenza

Se si verificano problemi durante la distribuzione del servizio di bilanciamento del carico di Azure Gestione API, registrare il problema in Problemi del repository.

Codice di esempio

Gli esempi usati in questo articolo includono:

Passaggio successivo