Generieren von Bildern mit KI und .NET
Erstellen Sie für erste Schritte mit KI eine einfache Chatanwendung mit .NET 8-Konsole. Die Anwendung wird lokal ausgeführt und verwendet das dall-e-3
-Modell von OpenAI, um Postkartenbilder zu generieren, sodass Sie Ihre Freunde zu einer Wanderung einladen können. Führen Sie die folgenden Schritte aus, um auf OpenAI zuzugreifen und zu erfahren, wie Sie Semantic Kernel verwenden.
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
.
Erstellen Sie für erste Schritte mit KI eine einfache Chatanwendung mit .NET 8-Konsole. Die Anwendung wird lokal ausgeführt und verwendet das dall-e-3
-Modell von OpenAI, um Postkartenbilder zu generieren, sodass Sie Ihre Freunde zu einer Wanderung einladen können. Führen Sie die folgenden Schritte aus, um Azure OpenAI bereitzustellen und zu erfahren, wie Sie das .NET Azure OpenAI SDK verwenden.
Voraussetzungen
- .NET 8 SDK: Installieren Sie das .NET 8 SDK.
- Azure-Abonnement – kostenloses Abonnement erstellen.
- Zugriff auf Azure OpenAI Service
- Azure Developer CLI (Optional) – Installieren oder Aktualisieren der Azure Developer CLI.
Herunterladen des Beispielprojekts
Klonen des Beispielrepositorys
Sie können Ihre eigene App mit den Schritten in den vorherigen Abschnitten erstellen oder das GitHub-Repository klonen, das die abgeschlossenen Beispiel-Apps für alle Schnellstarts enthält. Wenn Sie Beabsichtigen, Azure OpenAI zu verwenden, ist das Beispiel-Repository auch als Azure Developer CLI-Vorlage strukturiert, die eine Azure OpenAI-Ressource für Sie bereitstellen kann.
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 über ein Terminal oder eine Eingabeaufforderung zum
src\quickstarts\azure-openai
Verzeichnis des Beispielrepo.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 Benutzerschlüssel für die Beispiel-App, z. B. den Azure OpenAI-Endpunkt und den Modellnamen.
Ausprobieren des Beispiels mit Bildern vom Wandern
Klonen Sie das Repository dotnet/ai-samples.
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\semantic-kernel\05-HikeImages
.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 Program.cs-Datei enthält den gesamten App-Code. 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 key = config["OpenAIKey"];
Der OpenAITextToImageService
-Dienst unterstützt die Anforderungen und Antworten.
OpenAITextToImageService textToImageService = new(key, null);
Die Anwendung verwendet das Microsoft.SemanticKernel
-Paket zum Senden und Empfangen von Anforderungen an und von Azure OpenAI Service.
Die Program.cs-Datei enthält den gesamten App-Code. 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"];
Der AzureOpenAITextToImageService
-Dienst unterstützt die Anforderungen und Antworten.
AzureOpenAITextToImageService textToImageService = new(deployment, endpoint, new DefaultAzureCredential(), null);
Geben Sie dem Modell Kontext und Anweisungen, indem Sie eine Systemeingabeaufforderung hinzufügen. Eine gute Eingabeaufforderung für die Bildgenerierung erfordert eine klare Beschreibung dessen, was abgebildet werden soll, welche Farben verwendet werden sollen, den gewünschten Stil und andere Beschreibungen.
Die GenerateImageAsync
-Funktion weist das Modell an, eine Antwort basierend auf der Benutzereingabeaufforderung, der Bildgröße und der Qualitätskonfiguration zu generieren.
// Generate the image
string imageUrl = await textToImageService.GenerateImageAsync("""
A postal card with a happy hiker waving and a beautiful mountain in the background.
There is a trail visible in the foreground.
The postal card has text in red saying: 'You are invited for a hike!'
""", 1024, 1024);
Console.WriteLine($"The generated image is ready at:\n{imageUrl}");
Passen Sie die Aufforderung an, um die vom Modell generierten Bilder zu personalisieren.
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.