Schaal Azure OpenAI voor chats in Java met RAG binnen Azure Container Apps
Meer informatie over het toevoegen van taakverdeling aan uw toepassing om de chat-app uit te breiden buiten het Azure OpenAI-token en de quotumlimieten voor modellen. Deze benadering maakt gebruik van Azure Container Apps om drie Azure OpenAI-eindpunten te maken, evenals een primaire container om binnenkomend verkeer naar een van de drie eindpunten te leiden.
Voor dit artikel moet u twee afzonderlijke voorbeelden implementeren:
Chatapp
Als u de chat-app nog niet hebt geïmplementeerd, wacht u totdat het voorbeeld van de load balancer is geïmplementeerd.
Als u de chat-app al eenmaal hebt geïmplementeerd, wijzigt u de omgevingsvariabele om een aangepast eindpunt voor de load balancer te ondersteunen en opnieuw te implementeren.
Chat-app beschikbaar in deze talen:
Loadbalancer-applicatie
Notitie
In dit artikel worden een of meer AI-app-sjablonen gebruikt als basis voor de voorbeelden en richtlijnen in het artikel. AI-app-sjablonen bieden u een goed onderhouden, eenvoudig te implementeren referentie-implementaties die u helpen een startpunt van hoge kwaliteit voor uw AI-apps te garanderen.
Architectuur voor taakverdeling van Azure OpenAI met Azure Container Apps
Omdat de Azure OpenAI-resource specifieke token- en modelquotumlimieten heeft, is een chat-app met één Azure OpenAI-resource gevoelig voor gespreksfouten vanwege deze limieten.
Als u de chat-app wilt gebruiken zonder deze limieten te bereiken, gebruikt u een oplossing met gelijke taakverdeling met Azure Container Apps. Deze oplossing biedt naadloos één eindpunt van Azure Container Apps aan uw chat-app-server.
De Azure Container-app fungeert als front-end voor een set Azure OpenAI-resources. De Container-app lost twee scenario's op: normaal en beperkt. Tijdens een normaal scenario waar token- en modelquota beschikbaar zijn, retourneert de Azure OpenAI-resource een 200 terug via de container-app en app-server.
Wanneer een resource zich in een beperkt scenario bevindt, bijvoorbeeld vanwege quotumlimieten, kan de Azure Container-app een andere Azure OpenAI-resource onmiddellijk opnieuw proberen om te voldoen aan de oorspronkelijke aanvraag voor de chat-app.
Voorwaarden
Azure-abonnement. Maak er gratis een aan
Toegang verleend aan Azure OpenAI in het gewenste Azure-abonnement.
Op dit moment wordt toegang tot deze service alleen verleend op aanvraag. U kunt toegang tot Azure OpenAI aanvragen door het formulier in te vullen op https://aka.ms/oai/access.
Dev-containers beschikbaar zijn voor beide voorbeelden, waarbij alle afhankelijkheden zijn vereist om dit artikel te voltooien. U kunt de dev-containers uitvoeren in GitHub Codespaces (in een browser) of lokaal met behulp van Visual Studio Code.
- GitHub-account
Container-apps lokale load balancer voorbeeld-app openen
GitHub Codespaces voert een ontwikkelcontainer uit die wordt beheerd door GitHub met Visual Studio Code voor het web als de gebruikersinterface. Voor de eenvoudigste ontwikkelomgeving gebruikt u GitHub Codespaces zodat u de juiste ontwikkelhulpprogramma's en afhankelijkheden vooraf hebt geïnstalleerd om dit artikel te voltooien.
Belangrijk
Alle GitHub-accounts kunnen Codespaces elke maand maximaal 60 uur gratis gebruiken met 2 kernexemplaren. Voor meer informatie, zie maandelijkse inbegrepen opslag en kernuren van GitHub Codespaces.
Load balancer voor Azure Container Apps implementeren
Meld u aan bij de Azure Developer CLI om verificatie te bieden voor de inrichtings- en implementatiestappen.
azd auth login --use-device-code
Stel een omgevingsvariabele in om Azure CLI-verificatie te gebruiken voor de stap na provisioning.
azd config set auth.useAzCliAuth "true"
Implementeer de load balancer-app.
azd up
U moet een abonnement en regio voor de implementatie selecteren. Dit hoeft niet hetzelfde abonnement en dezelfde regio te zijn als de chat-app.
Wacht totdat de implementatie is voltooid voordat u doorgaat.
Het implementatie-eindpunt ophalen
Gebruik de volgende opdracht om het geïmplementeerde eindpunt voor de Azure Container-app weer te geven.
azd env get-values
Kopieer de waarde van
CONTAINER_APP_URL
. U gebruikt deze in de volgende sectie.
Chat-app opnieuw implementeren met load balancer-eindpunt
Deze zijn voltooid in het voorbeeld van de chat-app.
Open de dev-container van de chat-app met behulp van een van de volgende opties.
Taal Codespaces Visual Studio Code .NET JavaScript Python Meld u aan bij Azure Developer CLI (AZD).
azd auth login
Voltooi de aanmeldingsinstructies.
Maak een AZD-omgeving met een naam zoals
chat-app
.azd env new <name>
Voeg de volgende omgevingsvariabele toe, waarmee de back-end van de Chat-app een aangepaste URL voor de OpenAI-aanvragen moet gebruiken.
azd env set OPENAI_HOST azure_custom
Voeg de volgende omgevingsvariabele toe, waarbij u
<CONTAINER_APP_URL>
vervangt door de URL uit de vorige sectie. Deze actie vertelt de back-end van de chat-app wat de waarde is van de aangepaste URL voor de OpenAI-aanvraag.azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
Implementeer de chat-app.
azd up
U kunt nu de chat-app met vertrouwen gebruiken, wetende dat deze is ontworpen om op te schalen voor vele gebruikers zonder dat het quotum opraakt.
Logboeken streamen om de resultaten van de load balancer te bekijken
Zoek uw resourcegroep in de Azure Portal.
Selecteer in de lijst met resources in de groep de Container App-resource.
Selecteer Bewaking -> logstream om het logboek te bekijken.
Gebruik de chat-app om verkeer in het logboek te genereren.
Zoek naar de logboeken, die verwijzen naar de Azure OpenAI-resources. Elk van de drie resources heeft de numerieke identiteit in de logboekcommentaar die begint met
Proxying to https://openai3
, waarbij3
de derde Azure OpenAI-resource aangeeft.Wanneer u de chat-app gebruikt, schakelt de load balancer automatisch over naar een andere resource wanneer deze de status ontvangt dat het verzoek het quotum heeft overschreden.
Het TPM-quotum configureren
Standaard wordt elk van de Azure OpenAI-exemplaren in de load balancer geïmplementeerd met een capaciteit van 30.000 tokens per minuut (TPM). U kunt de chatapp gebruiken in de wetenschap dat deze is ontworpen om schaalbaar te zijn voor veel gebruikers zonder het quotum te overschrijden. Wijzig deze waarde wanneer:
- U krijgt fouten in de implementatiecapaciteit: verlaag de waarde.
- U hebt een hogere capaciteit nodig: Verhoog de waarde.
Gebruik de volgende opdracht om de waarde te wijzigen:
azd env set OPENAI_CAPACITY 50
Implementeer de load balancer opnieuw:
azd up
Middelen opschonen
Wanneer u klaar bent met zowel de chat-app als de load balancer, moet u de resources opschonen. De Azure-resources die in dit artikel zijn gemaakt, worden gefactureerd voor uw Azure-abonnement. Als u deze resources in de toekomst niet meer nodig hebt, verwijdert u deze om te voorkomen dat er meer kosten in rekening worden gebracht.
Resources voor chat-apps opschonen
Ga terug naar het artikel van de chat-app om deze resources op te schonen.
Opschonen van middelen voor upload balancer
Voer de volgende Azure Developer CLI-opdracht uit om de Azure-resources te verwijderen en de broncode te verwijderen:
azd down --purge --force
De schakelopties bieden:
-
purge
: Verwijderde resources worden onmiddellijk verwijderd. Hiermee kunt u de TPM van Azure OpenAI opnieuw gebruiken. -
force
: het verwijderen gebeurt op de achtergrond, zonder dat hiervoor toestemming van de gebruiker is vereist.
Opschonen van GitHub Codespaces
Als u de GitHub Codespaces-omgeving verwijdert, zorgt u ervoor dat u de hoeveelheid gratis rechten per kernuren kunt maximaliseren die u voor uw account krijgt.
Belangrijk
Zie voor meer informatie over de rechten van uw GitHub-account maandelijkse opslag- en kernuren van GitHub Codespaces.
Meld u aan bij het GitHub Codespaces-dashboard (https://github.com/codespaces).
Zoek uw actieve Codespaces uit de
azure-samples/openai-aca-lb
GitHub-repository.Open het contextmenu voor de coderuimte en selecteer verwijderen.
Hulp krijgen
Als u problemen ondervindt bij het implementeren van de Load Balancer van Azure API Management, meldt u uw probleem in de repository onder Issues.
Voorbeeldcode
Voorbeelden die in dit artikel worden gebruikt, zijn: