Übung: Herstellen einer Verbindung mit Azure OpenAI

Abgeschlossen

Die OpenAiService-Klasse enthält eine Stubimplementierung eines Diensts, der Aufforderungen an einen KI-Assistenten senden und die Antworten analysieren kann.

Es gibt einige wichtige Anforderungen, die in dieser Übung behandelt werden müssen:

  • Importieren des .NET SDK für Azure OpenAI
  • Hinzufügen des Azure OpenAI-Endpunkts und des Schlüssels zu den Anwendungseinstellungen
  • Ändern der Dienstklasse mit verschiedenen Mitgliedern und einer Clientinstanz

Importieren des .NET SDK

Das Azure.AI.OpenAI-Paket auf NuGet bietet ein typiertes SDK für den Zugriff auf verschiedene Modellimplementierungen von Ihrem Kontoendpunkt.

  1. Öffnen Sie ein neues Terminal.

  2. Verwenden Sie dotnet add package, um das Azure.AI.OpenAI-Paket aus NuGet zu importieren, das eine Vorabversion von 1.0.0-beta.14 angibt.

    dotnet add package Azure.AI.OpenAI --version 1.0.0-beta.14
    
  3. Erstellen Sie das .NET-Projekt erneut.

    dotnet build
    
  4. Schließen Sie das Terminal.

Hinzufügen von Anwendungseinstellungen

In einer .NET-Anwendung werden häufig die Konfigurationsanbieter verwendet, um neue Einstellungen in Ihre Anwendung einzufügen. Verwenden Sie für diese Anwendung die appsettings.Development.json-Datei, um die aktuellsten Werte für den Azure OpenAI-Endpunkt und den Schlüssel bereitzustellen.

  1. Erstellen Sie im Stammverzeichnis des Projekts eine neue Datei mit dem Namen appsettings. Development.json.

    Wichtig

    Bei Linux wird die Groß-/Kleinschreibung von Dateien beachtet. Die .NET-Umgebung für dieses Projekt heißt Development, und der Dateiname muss mit diesem Umgebungsnamen übereinstimmen, damit er funktioniert.

  2. Erstellen Sie in der Datei ein neues JSON-Objekt mit einer Platzhaltereigenschaft für OpenAi-Einstellungen.

    {
      "OpenAi": {            
      }
    }
    
  3. Erstellen Sie innerhalb der OpenAi-Eigenschaft zwei neue Eigenschaften für die Endpoint und Key. Verwenden Sie den Azure OpenAI-Endpunkt und die Schlüsseleinstellungen, die Sie zuvor in diesem Projekt aufgezeichnet haben.

    {
      "OpenAi": {
        "Endpoint": "<your-azure-openai-endpoint>",
        "Key": "<your-azure-openai-key>"
      }
    }
    

    Vorausgesetzt, der Name des Azure OpenAI-Kontos ist nybncrsna76fo-openai und der Schlüssel lautet 4bf98cb194cdf0f9001eae3259a76ed8, würden Sie das JSON-Objekt wie in diesem Beispiel konfigurieren.

    {
      "OpenAi": {
        "Endpoint": "https://nybncrsna76fo-openai.openai.azure.com/",
        "Key": "4bf98cb194cdf0f9001eae3259a76ed8"
      }
    }
    

    Hinweis

    Der Schlüssel in diesem Beispiel ist fiktiv.

  4. Speichern Sie die appsettings.Development.json-Datei.

Hinzufügen erforderlicher Mitglieder und einer Clientinstanz

Implementieren Sie schließlich die Klassenvariablen, die zum Verwenden des Azure OpenAI-Clients erforderlich sind. Implementieren Sie in diesem Schritt einige statische Eingabeaufforderungen, und erstellen Sie eine neue Instanz der OpenAIClient-Klasse.

  1. Öffnen Sie die Datei Services/OpenAiService.cs.

  2. Fügen Sie die Verwendungsdirektiven für die Namespaces Azure und Azure.AI.OpenAI hinzu.

    using Azure;
    using Azure.AI.OpenAI;
    
  3. Fügen Sie innerhalb der OpenAiService-Klasse eine neue Variable namens _client vom Typ OpenAIClient hinzu.

    private readonly OpenAIClient _client;
    
  4. Definieren Sie mit einer neuen Zeichenfolgenvariable namens _systemPromptText vor jeder Anweisung einen statischen Texblock, den Sie an den KI-Assistenten senden.

    private readonly string _systemPrompt = @"
        You are an AI assistant that helps people find information.
        Provide concise answers that are polite and professional." + Environment.NewLine;
    
  5. Erstellen Sie eine weitere neue Zeichenfolgenvariable namens_summarizePrompt mit einem statischen Textblock, der an den KI-Assistenten gesendet werden soll, mit Anweisungen zum Zusammenfassen einer Unterhaltung.

    private readonly string _summarizePrompt = @"
        Summarize this prompt in one or two words to use as a label in a button on a web page.
        Do not use any punctuation." + Environment.NewLine;
    
  6. Fügen Sie innerhalb des Konstruktors der Klasse zwei zusätzliche Codezeilen hinzu, um zu überprüfen, ob der Endpunkt oder der Schlüssel null ist. Verwenden Sie ArgumentNullException.ThrowIfNullOrEmpty, um frühzeitig einen Fehler auszugeben, wenn einer dieser Werte null ist.

    ArgumentNullException.ThrowIfNullOrEmpty(endpoint);
    ArgumentNullException.ThrowIfNullOrEmpty(key);
    

    Tipp

    Wenn Sie die Anwendung ausführen, wird sofort ein Fehler ausgelöst, wenn eine dieser Einstellungen keinen gültigen Wert aufweist, der über die appsettings.Development.json-Datei bereitgestellt wird.

  7. Verwenden Sie als Nächstes den Modellnamen, der ein Parameter des Konstruktors ist, und speichern Sie ihn in der _modelName-Variablen.

    _modelName = modelName;
    
  8. Erstellen Sie schließlich eine neue Instanz der OpenAIClient-Klasse mithilfe des Endpunkts, um einen Uri zu erstellen, und den Schlüssel zum Erstellen eines AzureKeyCredential.

    Uri uri = new(endpoint);
    AzureKeyCredential credential = new(key);
    _client = new(
        endpoint: uri,
        keyCredential: credential
    );
    
  9. Speichern Sie die Datei Services/OpenAiService.cs.

Arbeit überprüfen

An diesem Punkt sollte der Konstruktor genügend Logik zum Erstellen einer Clientinstanz enthalten. Da die Klasse noch keine Aktion mit dem Client ausführt, macht es keinen Sinn, die Webanwendung auszuführen, aber es lohnt sich, die Anwendung zu erstellen, um sicherzustellen, dass Ihr Code keine Auslassungen oder Fehler aufweist.

  1. Öffnen Sie ein neues Terminal.

  2. Erstellen des .NET-Projekts.

    dotnet build
    
  3. Beobachten Sie die Buildausgabe, und überprüfen Sie, dass keine Buildfehler vorhanden sind.

    MSBuild version 17.5.1+f6fdcf537 for .NET
      Determining projects to restore...
      All projects are up-to-date for restore.
      cosmoschatgpt -> /workspaces/cosmosdb-chatgpt/bin/Debug/net8.0/cosmoschatgpt.dll
    
    Build succeeded.
        0 Warning(s)
        0 Error(s)
    
    Time Elapsed 00:00:02.93
    
  4. Schließen Sie das Terminal.