Freigeben über


Azure OpenAI für JavaScript-Chat mithilfe von RAG mit Azure Container Apps skalieren

Erfahren Sie, wie Sie Ihrer Anwendung einen Lastenausgleich hinzufügen, um die Chat-App über die Azure OpenAI-Token- und Modellkontingentgrenzen hinaus zu erweitern. Dieser Ansatz verwendet Azure-Container-Apps, um drei Azure OpenAI-Endpunkte zu erstellen, sowie einen primären Container, um eingehenden Datenverkehr an einen der drei Endpunkte zu leiten.

Für diesen Artikel müssen Sie zwei separate Beispiele verwenden:

  • Chat-App

    • Wenn Sie die Chat-App noch nicht bereitgestellt haben, warten Sie, bis das Beispiel zum Lastenausgleich bereitgestellt wurde.

    • Wenn Sie die Chat-App bereits einmal bereitgestellt haben, ändern Sie die Umgebungsvariable so, dass ein benutzerdefinierter Endpunkt für das Lastenausgleichsmodul unterstützt und erneut bereitgestellt wird.

    • Chat-App in diesen Sprachen verfügbar:

  • Lastenausgleichs-App

Anmerkung

In diesem Artikel wird mindestens eine KI-App-Vorlage als Grundlage für die Beispiele und Anleitungen im Artikel verwendet. KI-App-Vorlagen bieten Ihnen gut gepflegte, einfach zu implementierende Referenzimplementierungen, die helfen, einen qualitativ hochwertigen Ausgangspunkt für Ihre KI-Apps zu gewährleisten.

Architektur für den Lastenausgleich von Azure OpenAI mit Azure-Container-Apps

Da die Azure OpenAI-Ressource bestimmte Token- und Modellkontingentbeschränkungen aufweist, ist eine Chat-App mit einer einzelnen Azure OpenAI-Ressource anfällig für Unterhaltungsfehler aufgrund dieser Grenzwerte.

Diagramm, in dem die Chat-App-Architektur mit hervorgehobener Azure OpenAI-Ressource angezeigt wird.

Um die Chat-App zu verwenden, ohne diese Grenzwerte zu erreichen, verwenden Sie eine Lastenausgleichslösung mit Azure-Container-Apps. Diese Lösung macht einen einzelnen Endpunkt von Azure-Container-Apps nahtlos für Ihren Chat-App-Server verfügbar.

Diagramm, das die Chat-App-Architektur mit Azure-Container-Apps vor drei Azure OpenAI-Ressourcen zeigt.

Die Azure Container-App ist vor einer Reihe von Azure OpenAI-Ressourcen platziert. Die Container-App löst zwei Szenarien: normal und gedrosselt. Während eines normalen Szenarios, in dem Token- und Modellkontingent verfügbar ist, gibt die Azure OpenAI-Ressource eine 200 über die Container-App und den App-Server zurück.

Diagramm, das ein normales Szenario anzeigt. Das normale Szenario zeigt drei Azure OpenAI-Endpunktgruppen, wobei die erste Gruppe aus zwei Endpunkten erfolgreichen Datenverkehr bekommt.

Wenn sich eine Ressource in einem gedrosselten Szenario befindet, z. B. aufgrund von Kontingentbeschränkungen, kann die Azure Container App sofort eine andere Azure OpenAI-Ressource wiederholen, um die ursprüngliche Chat-App-Anforderung zu erfüllen.

Diagramm mit einem Drosselungsszenario mit einem 429-Fehlerantwortcode und einem Antwortheader, der angibt, wie viele Sekunden der Client warten muss, um den Vorgang erneut auszuführen.

Voraussetzungen

Öffnen der lokalen Lastenausgleichs-Beispiel-App für Container-Apps

GitHub Codespaces führt einen von GitHub verwalteten Entwicklungscontainer mit Visual Studio Code für Web als Benutzeroberfläche aus. Verwenden Sie für die einfachste Entwicklungsumgebung GitHub Codespaces, damit Sie die richtigen Entwicklertools und Abhängigkeiten vorinstalliert haben, um diesen Artikel abzuschließen.

Dieses Projekt in GitHub Codespaces öffnen

Wichtig

Alle GitHub-Konten können Codespaces für bis zu 60 Stunden kostenlos jeden Monat mit 2 Kerninstanzen verwenden. Weitere Informationen finden Sie im Artikel zu monatlich enthaltener Speicherkapazität und Kernstunden in GitHub Codespaces.

Bereitstellen des Lastenausgleichs für Azure Container-Apps

  1. Melden Sie sich bei der Azure Developer CLI an, um die Authentifizierung für die Bereitstellungs- und Implementierungsschritte zu ermöglichen.

    azd auth login --use-device-code
    
  2. Legen Sie eine Umgebungsvariable fest, um die Azure CLI-Authentifizierung für den Schritt nach der Bereitstellung zu verwenden.

    azd config set auth.useAzCliAuth "true"
    
  3. Stellen Sie die Load Balancer App bereit.

    azd up
    

    Sie müssen ein Abonnement und eine Region für die Bereitstellung auswählen. Diese müssen nicht dasselbe Abonnement und dieselbe Region wie die Chat-App sein.

  4. Warten Sie auf den Abschluss der Bereitstellung, bevor Sie fortfahren.

Abrufen des Bereitstellungsendpunkts

  1. Verwenden Sie den folgenden Befehl, um den bereitgestellten Endpunkt für die Azure Container-App anzuzeigen.

    azd env get-values
    
  2. Kopieren Sie den CONTAINER_APP_URL-Wert. Sie verwenden es im nächsten Abschnitt.

Erneutes Bereitstellen einer Chat-App mit Lastenausgleichsendpunkt

Dies wird im Beispiel der Chat-App abgeschlossen.

  1. Öffnen Sie den Dev-Container des Chat-App-Beispiels mit einer der folgenden Optionen.

    Sprache Codespaces Visual Studio Code
    .NET In GitHub Codespaces öffnen In Dev-Containern öffnen
    JavaScript In GitHub Codespaces öffnen In Dev-Containern öffnen
    Python In GitHub Codespaces öffnen In Dev-Containern öffnen
  2. Melden Sie sich bei Azure Developer CLI (AZD) an.

    azd auth login
    

    Schließen Sie die Anmeldeanweisungen ab.

  3. Erstellen Sie eine AZD-Umgebung mit einem Namen wie z. B. chat-app.

    azd env new <name>
    
  4. Fügen Sie die folgende Umgebungsvariable hinzu, die das Back-End der Chat-App angibt, eine benutzerdefinierte URL für die OpenAI-Anforderungen zu verwenden.

    azd env set OPENAI_HOST azure_custom
    
  5. Fügen Sie die folgende Umgebungsvariable hinzu, und ersetzen Sie <CONTAINER_APP_URL> für die URL aus dem vorherigen Abschnitt. Diese Aktion teilt dem Back-End der Chat-App mit, was der Wert der benutzerdefinierten URL für die OpenAI-Anforderung ist.

    azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
    
  6. Stellen Sie die Chat-App bereit.

    azd up
    

Sie können jetzt die Chat-App mit dem Vertrauen verwenden, dass sie für viele Benutzer entwickelt wurde, ohne dass das Kontingent überschritten wird.

Datenstromprotokolle zum Anzeigen der Ergebnisse des Lastenausgleichs

  1. Durchsuchen Sie im Azure-Portal Ihre Ressourcengruppe.

  2. Wählen Sie in der Liste der Ressourcen in der Gruppe die Container-App-Ressource aus.

  3. Wählen Sie Überwachung –> Protokolldatenstrom aus, um das Protokoll anzuzeigen.

  4. Verwenden Sie die Chat-App, um Datenverkehr im Protokoll zu generieren.

  5. Suchen Sie nach den Protokollen, die auf die Azure OpenAI-Ressourcen verweisen. Jede der drei Ressourcen weist ihre numerische Identität im Protokollkommentar auf, beginnend mit Proxying to https://openai3, wobei 3 die dritte Azure OpenAI-Ressource angibt.

    Screenshot mit Streaming-Protokollen der Azure-Container-App, in dem zwei Protokollzeilen hervorgehoben sind, die den Protokollkommentar veranschaulichen.

  6. Wenn Sie die Chat-App verwenden und der Load-Balancer den Status erhält, dass die Anforderung das Kontingent überschritten hat, wechselt der Load-Balancer automatisch zu einer anderen Ressource.

Konfigurieren des TPM-Kontingents

Standardmäßig werden alle Azure OpenAI-Instanzen im Lastenausgleich mit einer Kapazität von 30.000 TPM (Token pro Minute) bereitgestellt. Sie können die Chat-App mit der Gewissheit verwenden, dass sie für viele Nutzer skaliert werden kann, ohne dass das Kontingent überschritten wird. Ändern Sie diesen Wert in folgenden Fällen:

  • Est treten Kapazitätsfehler bei der Bereitstellung auf: Verringern Sie diesen Wert.
  • Sie benötigen eine höhere Kapazität: Erhöhen Sie den Wert.
  1. Verwenden Sie den folgenden Befehl, um den Wert zu ändern:

    azd env set OPENAI_CAPACITY 50
    
  2. Stellen Sie den Load Balancer erneut bereit:

    azd up
    

Bereinigen von Ressourcen

Wenn Sie mit der Chat-App und dem Lastenausgleich fertig sind, bereinigen Sie die Ressourcen. Die in diesem Artikel erstellten Azure-Ressourcen werden Ihrem Azure-Abonnement in Rechnung gestellt. Wenn Sie nicht erwarten, dass diese Ressourcen in Zukunft benötigt werden, löschen Sie sie, um mehr Gebühren zu vermeiden.

Bereinigung der Chat-App-Ressourcen

Kehren Sie zum Artikel der Chat-App zurück, um diese Ressourcen zu bereinigen.

Bereinigen Sie die hochgeladenen Lastenausgleichsressourcen

Führen Sie den folgenden Azure Developer CLI-Befehl aus, um die Azure-Ressourcen zu löschen und den Quellcode zu entfernen:

azd down --purge --force

Die Schalter bieten:

  • purge: Gelöschte Ressourcen werden sofort endgültig gelöscht. Auf diese Weise können Sie das Azure OpenAI-TPM wiederverwenden.
  • force: Die Löschung erfolgt im Hintergrund, ohne dass die Zustimmung des Benutzers erforderlich ist.

Bereinigen von GitHub-Codespaces

Durch das Löschen der GitHub Codespaces-Umgebung wird sichergestellt, dass Sie die Anzahl der kostenlosen Berechtigungsstunden pro Kern maximieren können, die Sie für Ihr Konto erhalten.

Wichtig

Weitere Informationen zu den Berechtigungen Ihres GitHub-Kontos finden Sie im Artikel zu monatlich enthaltener Speicherkapazität und Kernstunden in GitHub Codespaces.

  1. Melden Sie sich beim GitHub Codespaces-Dashboard (https://github.com/codespaces) an.

  2. Suchen Sie Ihre derzeit ausgeführten Codespaces, die aus dem GitHub-Repository azure-samples/openai-aca-lb stammen.

    Screenshot aller ausgeführten Codespaces einschließlich status und Vorlagen.

  3. Öffnen Sie das Kontextmenü für den Codespace, und wählen Sie dann Löschen aus.

    Screenshot: Kontextmenü für einen Codespace mit hervorgehobener Löschoption.

Hilfe anfordern

Wenn Sie Probleme beim Bereitstellen des Azure API Management-Lastenausgleichs haben, protokollieren Sie Ihr Problem mit den Problemen des Repositorys.

Beispielcode

Beispiele, die in diesem Artikel verwendet werden, umfassen:

Nächster Schritt