Übung: Herstellen einer Verbindung mit Azure OpenAI
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.
Öffnen Sie ein neues Terminal.
Verwenden Sie
dotnet add package
, um dasAzure.AI.OpenAI
-Paket aus NuGet zu importieren, das eine Vorabversion von1.0.0-beta.14
angibt.dotnet add package Azure.AI.OpenAI --version 1.0.0-beta.14
Erstellen Sie das .NET-Projekt erneut.
dotnet build
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.
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.
Erstellen Sie in der Datei ein neues JSON-Objekt mit einer Platzhaltereigenschaft für
OpenAi
-Einstellungen.{ "OpenAi": { } }
Erstellen Sie innerhalb der
OpenAi
-Eigenschaft zwei neue Eigenschaften für dieEndpoint
undKey
. 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.
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.
Öffnen Sie die Datei Services/OpenAiService.cs.
Fügen Sie die Verwendungsdirektiven für die Namespaces
Azure
undAzure.AI.OpenAI
hinzu.using Azure; using Azure.AI.OpenAI;
Fügen Sie innerhalb der
OpenAiService
-Klasse eine neue Variable namens_client
vom TypOpenAIClient
hinzu.private readonly OpenAIClient _client;
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;
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;
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.
Verwenden Sie als Nächstes den Modellnamen, der ein Parameter des Konstruktors ist, und speichern Sie ihn in der
_modelName
-Variablen._modelName = modelName;
Erstellen Sie schließlich eine neue Instanz der
OpenAIClient
-Klasse mithilfe des Endpunkts, um einenUri
zu erstellen, und den Schlüssel zum Erstellen einesAzureKeyCredential
.Uri uri = new(endpoint); AzureKeyCredential credential = new(key); _client = new( endpoint: uri, keyCredential: credential );
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.
Öffnen Sie ein neues Terminal.
Erstellen des .NET-Projekts.
dotnet build
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
Schließen Sie das Terminal.