Dela via


Skala Azure OpenAI för JavaScript-chatt med RAG med Azure Container Apps

Lär dig hur du lägger till belastningsutjämning i ditt program för att utöka chattappen utöver gränserna för Azure OpenAI-token och modellkvoter. Den här metoden använder Azure Container Apps för att skapa tre Azure OpenAI-slutpunkter samt en primär container för att dirigera inkommande trafik till en av de tre slutpunkterna.

Den här artikeln kräver att du distribuerar två separata exempel:

  • Chattapp

    • Om du inte har distribuerat chattappen ännu väntar du tills lastbalanserarens exempel har distribuerats.

    • Om du redan har distribuerat chattappen en gång ändrar du miljövariabeln så att den stöder en anpassad slutpunkt för lastbalanseraren och distribuerar om den igen.

    • Chattappen är tillgänglig på följande språk:

  • Appen Lastbalanserare

Kommentar

Den här artikeln använder en eller flera AI-appmallar som grund för exemplen och vägledningen i artikeln. Med AI-appmallar får du väl underhållna och enkla att distribuera referensimplementeringar som hjälper dig att säkerställa en högkvalitativ startpunkt för dina AI-appar.

Arkitektur för belastningsutjämning av Azure OpenAI med Azure Container Apps

Eftersom Azure OpenAI-resursen har specifika token- och modellkvotgränser är en chattapp med en enda Azure OpenAI-resurs benägen att få konversationsfel på grund av dessa gränser.

Diagram som visar chattappens arkitektur med Azure OpenAI-resursen markerad.

Om du vill använda chattappen utan att nå dessa gränser använder du en belastningsutjämningslösning med Azure Container Apps. Den här lösningen exponerar sömlöst en enskild slutpunkt från Azure Container Apps för din chattappserver.

Diagram som visar chattapparkitektur med Azure Container Apps framför tre Azure OpenAI-resurser.

Azure Container-appen finns framför en uppsättning Azure OpenAI-resurser. Containerappen löser två scenarier: normal och begränsad. I ett normalt scenario där token- och modellkvoten är tillgänglig returnerar Azure OpenAI-resursen 200 tillbaka via containerappen och appservern.

Diagram som visar ett normalt scenario. Det normala scenariot visar tre Azure OpenAI-slutpunktsgrupper där den första gruppen med två slutpunkter får lyckad trafik.

När en resurs är i ett begränsat scenario , till exempel på grund av kvotgränser, kan Azure Container-appen försöka igen med en annan Azure OpenAI-resurs direkt till fullvärdig den ursprungliga chattappens begäran.

Diagram som visar ett begränsningsscenario med en 429-felande svarskod och ett svarshuvud för hur många sekunder klienten måste vänta på att försöka igen.

Förutsättningar

Öppna exempelappen För lokal balanseringsapp för containerappar

GitHub Codespaces kör en utvecklingscontainer som hanteras av GitHub med Visual Studio Code för webben som användargränssnitt. För den enklaste utvecklingsmiljön använder du GitHub Codespaces så att du har rätt utvecklarverktyg och beroenden förinstallerade för att slutföra den här artikeln.

Öppna det här projektet i GitHub Codespaces

Viktigt!

Alla GitHub-konton kan använda Codespaces i upp till 60 timmar kostnadsfritt varje månad med 2 kärninstanser. Mer information finns i GitHub Codespaces månadsvis inkluderade lagrings- och kärntimmar.

Distribuera Lastbalanserare för Azure Container Apps

  1. Logga in på Azure Developer CLI för att tillhandahålla autentisering till etablerings- och distributionsstegen.

    azd auth login --use-device-code
    
  2. Ange en miljövariabel för att använda Azure CLI-autentisering till steget efter etableringen.

    azd config set auth.useAzCliAuth "true"
    
  3. Distribuera lastbalanserarens app.

    azd up
    

    Du måste välja en prenumeration och region för distributionen. Dessa behöver inte vara samma prenumeration och region som chattappen.

  4. Vänta tills distributionen är klar innan du fortsätter.

Hämta distributionsslutpunkten

  1. Använd följande kommando för att visa den distribuerade slutpunkten för Azure Container-appen.

    azd env get-values
    
  2. Kopiera värdet CONTAINER_APP_URL. Du kommer att använda den i nästa avsnitt.

Distribuera om chattappen med lastbalanserarens slutpunkt

Dessa slutförs i chattappexemplet.

  1. Öppna chattappexemplets utvecklingscontainer med något av följande alternativ.

    Språk Codespaces Visual Studio-koden
    .NET Öppna i GitHub Codespaces Öppna i Dev Containers
    JavaScript Öppna i GitHub Codespaces Öppna i Dev Containers
    Python Öppna i GitHub Codespaces Öppna i Dev Containers
  2. Logga in på Azure Developer CLI (AZD).

    azd auth login
    

    Slutför inloggningsinstruktionerna.

  3. Skapa en AZD-miljö med ett namn som chat-app.

    azd env new <name>
    
  4. Lägg till följande miljövariabel, som instruerar chattappens serverdel att använda en anpassad URL för OpenAI-begäranden.

    azd env set OPENAI_HOST azure_custom
    
  5. Lägg till följande miljövariabel och ersätt <CONTAINER_APP_URL> url:en från föregående avsnitt. Den här åtgärden talar om för chattappens serverdel vad värdet är för den anpassade URL:en för OpenAI-begäran.

    azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
    
  6. Distribuera chattappen.

    azd up
    

Nu kan du använda chattappen med förtroende för att den är skapad för att skala över många användare utan att kvoten tar slut.

Strömma loggar för att se lastbalanserarens resultat

  1. I Azure-portalen söker du i resursgruppen.

  2. I listan över resurser i gruppen väljer du resursen Container App.

  3. Välj Övervakning –> Loggström för att visa loggen.

  4. Använd chattappen för att generera trafik i loggen.

  5. Leta efter loggarna som refererar till Azure OpenAI-resurserna. Var och en av de tre resurserna har sin numeriska identitet i loggkommenten som börjar med Proxying to https://openai3, där 3 anger den tredje Azure OpenAI-resursen.

    Skärmbild som visar strömningsloggar för Azure Container App med två högljusade logglinjer som visar loggkommenten.

  6. När du använder chattappen, när lastbalanseraren får statusen att begäran har överskridit kvoten, roterar lastbalanseraren automatiskt till en annan resurs.

Konfigurera token per minutkvot (TPM)

Som standard distribueras var och en av OpenAI-instanserna i lastbalanseraren med en kapacitet på 30 000 TPM (token per minut). Du kan använda chattappen med förtroende för att den är skapad för att skala över många användare utan att kvoten tar slut. Ändra det här värdet när:

  • Du får distributionskapacitetsfel: sänk det värdet.
  • Planera högre kapacitet, öka värdet.
  1. Använd följande kommando för att ändra värdet.

    azd env set OPENAI_CAPACITY 50
    
  2. Distribuera om lastbalanseraren.

    azd up
    

Rensa resurser

När du är klar med både chattappen och lastbalanseraren rensar du resurserna. De Azure-resurser som skapas i den här artikeln faktureras till din Azure-prenumeration. Om du inte förväntar dig att behöva dessa resurser i framtiden tar du bort dem för att undvika att debiteras mer.

Rensa chattappresurser

Gå tillbaka till chattappartikeln för att rensa resurserna.

Rensa resurser för uppladdningsbalanserare

Kör följande Azure Developer CLI-kommando för att ta bort Azure-resurserna och ta bort källkoden:

azd down --purge --force

Växlarna tillhandahåller:

  • purge: Borttagna resurser rensas omedelbart. På så sätt kan du återanvända Azure OpenAI TPM.
  • force: Borttagningen sker tyst, utan att användarens medgivande krävs.

Rensa GitHub Codespaces

Om du tar bort GitHub Codespaces-miljön kan du maximera mängden kostnadsfria timmar per kärna som du får för ditt konto.

Viktigt!

Mer information om ditt GitHub-kontos rättigheter finns i GitHub Codespaces månadsvis inkluderade lagrings- och kärntimmar.

  1. Logga in på GitHub Codespaces-instrumentpanelen (https://github.com/codespaces).

  2. Leta upp de codespaces som körs från azure-samples/openai-aca-lb GitHub-lagringsplatsen.

    Skärmbild av alla kodområden som körs, inklusive deras status och mallar.

  3. Öppna snabbmenyn för kodområdet och välj sedan Ta bort.

    Skärmbild av snabbmenyn för ett enda kodområde med borttagningsalternativet markerat.

Få hjälp

Om du har problem med att distribuera Azure API Management-lastbalanseraren loggar du problemet till lagringsplatsens problem.

Exempelkod

Exempel som används i den här artikeln är:

Gå vidare