Vorbereiten

Abgeschlossen

Sie aktualisieren eine vorhandene .NET-Lösung, die über eine Blazor-Anwendung als einziges Projekt verfügt. Dieses Projekt umfasst Dienstklassen für Datenspeicherung und Unterhaltung, die mit Platzhaltern implementiert werden. Hier besprechen wir die Gesamtziele des Projekts und die Implementierung der Datenspeicher- und Unterhaltungsfunktionalität. Darüber hinaus behandeln wir die Einrichtung der benötigten Azure-Ressourcen.

Projektübersicht

Ziel dieses Projekts ist es, zwei Dienstklassen für die Datenspeicherung und -vervollständigungen zu implementieren. Verwenden Sie für die Datenspeicherdienstklasse das Azure Cosmos DB for NoSQL .NET SDK, um mehrere Elemente in einem vorhandenen Container zu erstellen, zu aktualisieren, abzufragen und zu löschen. Verwenden Sie für die Chatvervollständigung das Azure OpenAI .NET SDK, um Anforderungen zu senden und Antworten zu analysieren.

Die Hauptaufgaben, die Sie erledigen müssen, sind:

  1. Stellen Sie Azure Cosmos DB for NoSQL- und Azure OpenAI-Ressourcen in Azure bereit.
  2. Rufen Sie die Anmeldeinformationen für die bereitgestellten Azure Cosmos DB for NoSQL- und Azure OpenAI-Ressourcen ab.
  3. Öffnen Sie die Startlösung in Visual Studio Code.
  4. Verwenden Sie das .NET SDK, um Azure Cosmos DB for NoSQL als Datenspeicherdienst zu implementieren.
  5. Verwenden Sie das .NET SDK, um Azure OpenAI als Unterhaltungsschnittstelle zu implementieren.
  6. Überprüfen Sie den Vorgang der Anwendung.

Setup

Um dieses Projekt abzuschließen, benötigen Sie ein Azure Cosmos DB for NoSQL-Konto und ein Azure OpenAI-Konto. Um diesen Prozess zu optimieren, stellen Sie eine Bicep-Vorlage mit beiden Konten in Azure bereit.

Konfigurieren der Entwicklungsumgebung

Es ist eine Entwicklungscontainerumgebung mit allen Abhängigkeiten verfügbar, die zum Abschließen der Übungen in diesem Projekt erforderlich sind. GitHub Codespaces führt einen von GitHub verwalteten Entwicklungscontainer mit Visual Studio Code für Web als Benutzeroberfläche aus. Für eine möglichst unkomplizierte Entwicklungsumgebung verwenden Sie GitHub Codespaces. Hiermit sind die benötigten Entwicklertools und Abhängigkeiten vorinstalliert, mit denen Sie dieses Schulungsmodul absolvieren können.

Wichtig

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

  1. Starten Sie den Prozess, um einen neuen GitHub Codespace zu erstellen, indem Sie die Option "Active Codespaces " am Anfang dieser Einheit auswählen.

  2. Überprüfen Sie auf der Seite Codespace erstellen die Konfigurationseinstellungen für den Codespace und wählen Sie dann Neuen Codespace erstellen.

    Screenshot: Bestätigungsbildschirm vor dem Erstellen eines neuen Codespace.

  3. Warten Sie den Start des Codespaces ab. Dieser Startvorgang kann einige Minuten dauern.

  4. Öffnen Sie ein neues Terminal im Codespace.

    Tipp

    Sie können das Hauptmenü verwenden, um zur Menüoption Terminal zu navigieren und dann die Option Neues Terminal auszuwählen.

    Screenshot der Codespaces-Menüoption zum Öffnen eines neuen Terminals.

  5. Überprüfen Sie, ob die Azure CLI in Ihrer Umgebung installiert ist.

    az --version
    
  6. Überprüfen Sie, ob .NET 8 in Ihrer Umgebung installiert ist.

    dotnet --list-sdks
    
  7. Wechseln Sie in das src-Verzeichnis, in dem sich die Projektdatei befindet.

    cd src
    
  8. Erstellen des .NET-Projekts.

    dotnet build
    
  9. Schließen Sie das Terminal.

  10. Die restlichen Übungen in diesem Projekt finden im Kontext dieses Entwicklungscontainers statt.

    Wichtig

    Lassen Sie den GitHub Codespace für den Rest dieses Schulungsmoduls laufen.

Bereitstellen der Infrastruktur aus Vorlage

Dieses Projekt verwendet das GitHub-Repository azure-samples/cosmosdb-chatgpt sowohl für die Azure Resource Manager-Vorlagenbereitstellung als auch für den Anwendungscode. Erstellen Sie in diesem Schritt eine neue Bereitstellung mithilfe der Bicep-Vorlage, um Ihre Ressourcen mithilfe von „Infrastruktur als Code“ bereitzustellen.

Tipp

Diese „Zero-touch“-Bicep-Vorlage enthält auch die endgültige Anwendung, die in Azure App Service ausgeführt wird. Sie können dies jederzeit auschecken, wenn Sie eine voll funktionsfähige Lösung sehen möchten.

  1. Melden Sie sich bei der Azure CLI an.

    az login --use-device-code
    
  2. Erstellen Sie eine neue Shellvariable namens resourceGroupName mit dem Namen der Azure-Ressourcengruppe, die Sie erstellen (mslearn-cosmos-openai).

    resourceGroupName="mslearn-cosmos-openai"
    
  3. Erstellen Sie mithilfe von az group create eine Ressourcengruppe.

    az group create \
      --name $resourceGroupName \
      --location "eastus"
    
  4. Stellen Sie die Vorlagendatei azuredeploy.json mithilfe von az deployment group create in der Ressourcengruppe bereit.

    az deployment group create \
      --resource-group $resourceGroupName \
      --name zero-touch-deployment \
      --template-uri https://raw.githubusercontent.com/Azure-Samples/cosmosdb-chatgpt/start/azuredeploy.json
    
  5. Warten Sie, bis die Bereitstellung abgeschlossen ist, bevor Sie mit diesem Projekt fortfahren.

    Hinweis

    Im Durchschnitt kann diese Bereitstellung fünf bis zehn Minuten dauern.

Abrufen von Azure Cosmos DB for NoSQL- und Azure OpenAI-Kontoanmeldeinformationen

Ihre Vorlage hat Azure Cosmos DB for NoSQL- und Azure OpenAI-Konten bereitgestellt und dann ihre Anmeldeinformationen in der Konfiguration der Azure App Service-Web-App gespeichert. Jetzt haben Sie die Wahl, das Azure-Portal oder die Azure CLI zum Abrufen der Anmeldeinformationen für jeden Dienst zu verwenden. Verwenden Sie az webapp config aus der Azure CLI, um die Azure OpenAI- und Azure Cosmos DB-Anmeldeinformationen abzurufen und sie in Ihrer lokalen Entwicklungsumgebung zu verwenden. In diesem Abschnitt filtern Sie die Ausgabe der verschiedenen Befehle, um Ihren Endpunkt und die Verbindungszeichenfolge zurückzugeben, die mit den .NET SDKs von Azure OpenAI und Azure Cosmos DB for NoSQL verwendet werden soll.

  1. Rufen Sie zunächst eine Liste aller ausgeführten Webanwendungen in Ihrer Ressourcengruppe mithilfe von az webapp list ab.

    az webapp list \
      --resource-group $resourceGroupName \
      --query "[?state=='Running'].name"
    
  2. Führen Sie nun die gleiche Abfrage erneut aus, geben aber nur das erste Ergebnis aus dem Array im Format durch Tabstopp getrennter Werte (tsv) zurück.

    webAppName=$( \
      az webapp list \
        --resource-group $resourceGroupName \
        --query "[?state=='Running'].name | [0]" \
        --output tsv \
    )
    

    Tipp

    Wenn Sie nicht sicher sind, dass Ihre Variable den richtigen Wert aufweist, führen Sie einfach im Terminal echo $webAppName aus, um den Wert zu überprüfen.

  3. Verwenden Sie az webapp config appsettings list zum Abrufen einer Liste der Anwendungseinstellungen für die Web-App.

    az webapp config appsettings list \
      --name $webAppName \
      --resource-group $resourceGroupName
    

    Hier ist ein abgeschnittenes Beispiel für die Ausgabe, wobei der Name des Azure Cosmos DB for NoSQL-Kontos nybncrsna76fo-cosmos-nosql lautet und der Name des Azure OpenAI-Kontos nybncrsna76fo-openai. Die Schlüssel in diesem Beispiel sind fiktiv.

    [
      {
        "setting": "COSMOSDB__ENDPOINT",
        "value": "https://nybncrsna76fo-cosmos-nosql.documents.azure.com:443/"
      },
      {
        "setting": "COSMOSDB__KEY",
        "value": "Aj2OSQqWhXfFzkITIi4MIbocWAAoBCUWnSPzHlQbDYA3TiyZCJlk8A6R1l6WqD45BxAG5vrsyQ4SCXEkPS1pLh=="
      },
      ...
      {
        "setting": "OPENAI__ENDPOINT",
        "value": "https://nybncrsna76fo-openai.openai.azure.com/"
      },
      {
        "setting": "OPENAI__KEY",
        "value": "4bf98cb194cdf0f9001eae3259a76ed8"
      },
      ...
    ]
    
  4. Notieren Sie den Wert des Endpunkts und des Schlüssels für die Azure Cosmos DB for NoSQL- und Azure OpenAI-Konten. Sie verwenden diese Anmeldeinformationen später in diesem Projekt, um eine Verbindung mit jedem Konto herzustellen.