Condividi tramite


Ridimensionare Azure OpenAI per le chat .NET usando RAG con Azure Container Apps

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

Questo articolo richiede la distribuzione di due esempi distinti:

  • App di 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 chat è già stata distribuita una sola volta, modificare la variabile di ambiente per supportare un endpoint personalizzato per il servizio di bilanciamento del carico e ridistribuirlo nuovamente.

    • L'app chat è disponibile in queste lingue:

  • App di bilanciamento del carico

Nota

Questo articolo usa uno o più modelli di app di intelligenza artificiale come base per gli esempi e le linee guida nell'articolo. I modelli di app di intelligenza artificiale offrono implementazioni di riferimento ben gestite che sono facili da distribuire. Consentono di garantire un punto di partenza di alta qualità per le app di intelligenza artificiale.

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, utilizzare una soluzione con bilanciamento del carico con Container Apps. Questa soluzione espone facilmente un singolo endpoint da App contenitore al server app di chat.

Diagramma che mostra l'architettura delle app di chat con app contenitore di Azure davanti a tre risorse OpenAI di Azure.

L'app contenitore si trova davanti a un set di risorse OpenAI di Azure. L'app contenitore risolve due scenari: normale e limitato. 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 a causa dei limiti di quota, l'app contenitore può ritentare immediatamente una risorsa OpenAI di Azure diversa per soddisfare la richiesta originale dell'app di chat.

Diagramma che mostra uno scenario di limitazione con codice di risposta con errore 429 e un'intestazione di risposta che indica quanti secondi il client deve attendere per riprovare.

Prerequisiti

  • Sottoscrizione di Azure. Crearne uno gratuitamente.

  • Accesso concesso ad Azure OpenAI nella sottoscrizione di Azure desiderata.

    Attualmente, l'accesso a questo servizio viene concesso solo dall'applicazione. È consigliabile richiedere l'accesso ad Azure OpenAI.

  • i contenitori di sviluppo sono disponibili per entrambi gli esempi, con tutte le dipendenze necessarie per completare questo articolo. È possibile eseguire i contenitori di sviluppo in GitHub Codespaces (in un browser) o in locale usando Visual Studio Code.

  • Per usare CodeSpaces è necessario solo un account GitHub

Apri l'app di esempio del bilanciamento del carico per Container Apps.

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, usare GitHub Codespaces per avere gli strumenti di sviluppo e le dipendenze corretti preinstallati per completare questo articolo.

Apri in GitHub Codespaces.

Importante

Tutti gli account GitHub possono usare GitHub Codespaces per un massimo di 60 ore gratuite ogni mese con due istanze principali. Per ulteriori informazioni, vedere GitHub Codespaces con archiviazione e ore di base mensilmente incluse.

Distribuire il servizio di bilanciamento del carico di App Azure Container

  1. Accedere all'interfaccia della riga di comando per sviluppatori di Azure per fornire l'autenticazione ai passaggi di provisioning e distribuzione:

    azd auth login --use-device-code
    
  2. Impostare una variabile di ambiente per utilizzare l'autenticazione della CLI di Azure nella fase di post-provisioning.

    azd config set auth.useAzCliAuth "true"
    
  3. Distribuire l'app di bilanciamento del carico:

    azd up
    

    Selezionare una sottoscrizione e un'area per la distribuzione. Non devono avere lo stesso abbonamento e la stessa area dell'app di chat.

  4. Attendere il completamento della distribuzione prima di continuare.

Ottenere l'endpoint di distribuzione

  1. Usare il comando seguente per visualizzare l'endpoint distribuito per l'app contenitore:

    azd env get-values
    
  2. Copiare il valore CONTAINER_APP_URL. Tu lo usi nella sezione successiva.

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

Questi esempi vengono 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 GitHub Codespaces Visual Studio Code
    .NET Open in GitHub Codespaces Apri nei contenitori di sviluppo
    JavaScript Open in GitHub Codespaces Open in Dev Containers
    Pitone Open in GitHub Codespaces Apri nei Dev Containers
  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, ad esempio chat-app:

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

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

    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. Nel portale di Azure , cerca il tuo gruppo di risorse.

  2. Nell'elenco delle risorse nel gruppo, selezionare la risorsa Azure Container Apps.

  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 di App Azure Container con due righe di log evidenziate per illustrare i commenti del log.

Quando il servizio di bilanciamento del carico riceve lo stato che la richiesta supera la quota, il servizio di bilanciamento del carico ruota automaticamente su un'altra risorsa.

Configurare la quota TPM

Per impostazione predefinita, ogni istanza di Azure OpenAI nel servizio di bilanciamento del carico viene distribuita con una capacità di 30.000 token al minuto (TPM). È 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 verificano errori di capacità di distribuzione: abbassare il valore.
  • È necessaria 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

Al termine dell'utilizzo dell'app chat e del bilanciamento del carico, ripulire le risorse. Le risorse di Azure create in questo articolo vengono fatturate alla sottoscrizione di Azure. Se non si prevede che queste risorse siano necessarie in futuro, eliminarle per evitare di incorrere in costi aggiuntivi.

Pulire le risorse dell'app chat

Tornare all'articolo sull'app di chat per pulire le risorse:

Pulire le risorse del servizio di bilanciamento del caricamento

Eseguire il comando seguente dell'interfaccia della riga di comando per sviluppatori di Azure 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 modo da poter riutilizzare i token del servizio OpenAI di Azure al minuto.
  • force: l'eliminazione viene eseguita automaticamente, senza richiedere il consenso dell'utente.

Pulire GitHub Codespaces e Visual Studio Code

L'eliminazione dell'ambiente GitHub Codespaces assicura di poter massimizzare il numero di ore gratuite per core per il tuo account.

Importante

Per ulteriori informazioni sui diritti dell'account GitHub, vedere la memorizzazione e le ore principali mensilmente incluse di GitHub Codespaces.

  1. Accedere al dashboard GitHub Codespaces.

  2. Individua gli spazi di codice attualmente in esecuzione provenienti dal repository GitHub azure-samples/openai-aca-lb.

    Screenshot che mostra tutti gli spazi di codice in esecuzione, inclusi lo stato e i modelli.

  3. Aprire il menu di scelta rapida per lo spazio di codice e quindi selezionare Elimina.

    Screenshot che mostra il menu di scelta rapida per un singolo spazio di codice con l'opzione Elimina evidenziata.

Ottenere assistenza

Se hai problemi durante la distribuzione del servizio di bilanciamento del carico di Gestione API di Azure, aggiungi il tuo problema alla sezione Issues della pagina del repository.

Codice di esempio

Gli esempi usati in questo articolo includono:

Passaggio successivo