Erhalten von Erkenntnissen zu Ihren Daten aus einer KI-Chat-App mit .NET
Führen Sie erste Schritte bei der KI-Entwicklung mithilfe einer .NET 8-Konsolen-App zum Herstellen einer Verbindung mit einem gpt-3.5-turbo
-Modell von OpenAI aus. Sie stellen eine Verbindung mit dem KI-Modell her, indem Sie Semantic Kernel verwenden, um Wanderdaten zu analysieren und Einblicke zu liefern.
Voraussetzungen
- .NET 8.0 SDK: Installieren Sie das .NET 8.0 SDK.
- Ein API-Schlüssel aus OpenAI, damit Sie dieses Beispiel ausführen können
- Unter Windows ist PowerShell
v7+
erforderlich. Um Ihre Version zu überprüfen, führen Siepwsh
in einem Terminal aus. Die aktuelle Version sollte zurückgegeben werden. Wenn ein Fehler zurückgegeben wird, führen Sie den folgenden Befehl aus:dotnet tool update --global PowerShell
.
Führen Sie erste Schritte bei der KI-Entwicklung mithilfe einer .NET 8-Konsolen-App zum Herstellen einer Verbindung mit einem gpt-3.5-turbo
-Modell von OpenAI aus, das in Azure bereitgestellt ist. Sie stellen eine Verbindung mit dem KI-Modell her, indem Sie Semantic Kernel verwenden, um Wanderdaten zu analysieren und Einblicke zu liefern.
Voraussetzungen
- .NET 8 SDK: Installieren Sie das .NET 8 SDK.
- Azure-Abonnement – kostenloses Abonnement erstellen.
- Azure Developer CLI: Installieren oder Aktualisieren Sie die Azure Developer CLI.
- Zugriff auf Azure OpenAI Service
- Unter Windows ist PowerShell
v7+
erforderlich. Um Ihre Version zu überprüfen, führen Siepwsh
in einem Terminal aus. Die aktuelle Version sollte zurückgegeben werden. Wenn ein Fehler zurückgegeben wird, führen Sie den folgenden Befehl aus:dotnet tool update --global PowerShell
.
Herunterladen des Beispielprojekts
Klonen Sie das GitHub-Repository, das die Beispiel-Apps für alle Schnellstarts enthält:
git clone https://github.com/dotnet/ai-samples.git
Erstellen der Azure OpenAI Service-Instanz
Das GitHub-Beispielrepository ist als Azure Developer CLI-Vorlage (azd
) strukturiert, die azd
zum Bereitstellen der Azure OpenAI Service-Instanz und -Modells für Sie verwenden kann.
Navigieren Sie von einem Terminal oder einer Eingabeaufforderung zum Verzeichnis src\quickstarts\azure-openai des Beispielrepositorys.
Führen Sie den
azd up
-Befehl aus, um die Azure OpenAI-Ressourcen bereitzustellen. Es kann mehrere Minuten dauern, bis Azure OpenAI Service erstellt und das Modell bereitgestellt ist.azd up
azd
konfiguriert außerdem die erforderlichen Benutzergeheimnisse für die Beispiel-App, z. B. den OpenAI-Zugriffsschlüssel.Hinweis
Wenn während der
azd up
-Bereitstellung ein Fehler auftritt, lesen Sie den Abschnitt Problembehandlung.
Testen des Beispiels für den Wanderchat
Navigieren Sie mithilfe eines Terminals oder einer Eingabeaufforderung zum Verzeichnis
openai\03-ChattingAboutMyHikes
.Führen Sie die folgenden Befehle aus, um Ihren OpenAI-API-Schlüssel als Geheimnis für die Beispiel-App zu konfigurieren:
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key>
Verwenden Sie den Befehl
dotnet run
, um die App auszuführen:dotnet run
Navigieren Sie mithilfe eines Terminals oder einer Eingabeaufforderung zum Verzeichnis
azure-openai\02-HikerAI
.Verwenden Sie den Befehl
dotnet run
, um die App auszuführen:dotnet run
Tipp
Wenn Sie eine Fehlermeldung erhalten, ist die Bereitstellung der Azure OpenAI-Ressourcen möglicherweise noch nicht abgeschlossen. Warten Sie ein paar Minuten, und versuchen Sie es dann noch einmal.
Untersuchen des Codes
Die Anwendung verwendet das Microsoft.SemanticKernel
-Paket zum Senden und Empfangen von Anforderungen an und von OpenAI Service.
Die gesamte Anwendung ist in der Datei Program.cs enthalten. Die ersten Codezeilen legen Konfigurationswerte fest und rufen den OpenAI-Schlüssel ab, der zuvor mit dem Befehl dotnet user-secrets
festgelegt wurde.
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string model = "gpt-3.5-turbo";
string key = config["OpenAIKey"];
Der OpenAIChatCompletionService
-Dienst unterstützt die Anforderungen und Antworten.
// Create the OpenAI Chat Completion Service
OpenAIChatCompletionService service = new(model, key);
Nachdem der OpenAIChatCompletionService
-Client erstellt wurde, liest die App den Inhalt der hikes.md
-Datei und verwenden ihn, um mehr Kontext für das Modell bereitzustellen, indem ein Systemprompt hinzugefügt wird. Dies beeinflusst das Modellverhalten und die generierten Completions während der Unterhaltung.
Die Anwendung verwendet das Microsoft.SemanticKernel
-Paket zum Senden und Empfangen von Anforderungen an und von Azure OpenAI Service, bereitgestellt in Azure.
Die gesamte Anwendung ist in der Datei Program.cs enthalten. Mithilfe der ersten Codezeilen werden Geheimnisse und Konfigurationswerte geladen, die während der Anwendungsbereitstellung in dotnet user-secrets
für Sie festgelegt wurden.
// == Retrieve the local secrets saved during the Azure deployment ==========
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string endpoint = config["AZURE_OPENAI_ENDPOINT"];
string deployment = config["AZURE_OPENAI_GPT_NAME"];
string key = config["AZURE_OPENAI_KEY"];
Der AzureOpenAIChatCompletionService
-Dienst unterstützt die Anforderungen und Antworten.
// == Create the Azure OpenAI Chat Completion Service ==========
AzureOpenAIChatCompletionService service = new(deployment, endpoint, key);
Nachdem der OpenAIChatCompletionService
-Client erstellt wurde, liest die App den Inhalt der hikes.md
-Datei und verwenden ihn, um mehr Kontext für das Modell bereitzustellen, indem ein Systemprompt hinzugefügt wird. Dies beeinflusst das Modellverhalten und die generierten Completions während der Unterhaltung.
// Provide context for the AI model
ChatHistory chatHistory = new($"""
You are upbeat and friendly. You introduce yourself when first saying hello.
Provide a short answer only based on the user hiking records below:
{File.ReadAllText("hikes.md")}
""");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
Mit dem folgenden Code wird dem Modell mithilfe der Funktion AddUserMessage
ein Benutzerprompt hinzugefügt. Die GetChatMessageContentAsync
-Funktion weist das Modell an, eine Antwort basierend auf den System- und den Benutzerprompts zu generieren.
// Start the conversation
chatHistory.AddUserMessage("Hi!");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
chatHistory.Add(
await service.GetChatMessageContentAsync(
chatHistory,
new OpenAIPromptExecutionSettings()
{
MaxTokens = 400
}));
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
Die App fügt die Antwort des Modells zum chatHistory
hinzu, um den Chatverlauf oder den Kontext beizubehalten.
// Continue the conversation with a question.
chatHistory.AddUserMessage(
"I would like to know the ratio of the hikes I've done in Canada compared to other countries.");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
chatHistory.Add(await service.GetChatMessageContentAsync(
chatHistory,
new OpenAIPromptExecutionSettings()
{
MaxTokens = 400
}));
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
Passen Sie System- oder Benutzerprompts an, um verschiedene Fragen und Kontext bereitzustellen:
- Wie oft wanderte ich, als es regnete?
- Wie oft wanderte ich 2021?
Das Modell generiert eine relevante Antwort auf jeden Prompt basierend auf Ihren Eingaben.
Bereinigen von Ressourcen
Wenn Sie die Beispielanwendung oder Ressourcen nicht mehr benötigen, entfernen Sie die entsprechende Bereitstellung und alle Ressourcen.
azd down
Problembehandlung
Unter Windows werden nach dem Ausführen von azd up
möglicherweise die folgenden Fehlermeldungen angezeigt:
postprovision.ps1 ist nicht digital signiert. Das Skript wird nicht auf dem System ausgeführt.
Das Skript postprovision.ps1 wird ausgeführt, um die in der Anwendung verwendeten .NET-Benutzergeheimnisse festzulegen. Führen Sie den folgenden PowerShell-Befehl aus, um diesen Fehler zu vermeiden:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Führen Sie dann den azd up
-Befehl erneut aus.
Ein weiterer möglicher Fehler:
„pwsh“ wird nicht als interner oder externer Befehle, als operierbare Programm- oder Batchdatei erkannt. WARNUNG: Fehler beim „postprovision“-Hook mit dem Ausgangscode: „1“, Pfad: „.\infra\post-script\postprovision.ps1“. : Exitcode: 1 Ausführung wird fortgesetzt, da ContinueOnError auf „true“ festgelegt wurde.
Das Skript postprovision.ps1 wird ausgeführt, um die in der Anwendung verwendeten .NET-Benutzergeheimnisse festzulegen. Um diesen Fehler zu vermeiden, führen Sie das Skript mithilfe des folgenden PowerShell-Befehls manuell aus:
.\infra\post-script\postprovision.ps1
Die .NET KI-Apps verfügen jetzt über konfigurierte Benutzergeheimnisse und können getestet werden.