Generera avbildningar med AI med .NET
Kom igång med AI genom att skapa ett enkelt .NET 8-konsolchattprogram. Programmet körs lokalt och använder OpenAI-modellen dall-e-3
för att generera postkortbilder så att du kan bjuda in dina vänner på en vandring! Följ de här stegen för att få åtkomst till OpenAI och lär dig hur du använder semantisk kernel.
Förutsättningar
- .NET 8.0 SDK – Installera .NET 8.0 SDK.
- En API-nyckel från OpenAI så att du kan köra det här exemplet.
- I Windows krävs PowerShell
v7+
. Om du vill verifiera din version kör dupwsh
i en terminal. Den bör returnera den aktuella versionen. Om det returnerar ett fel kör du följande kommando:dotnet tool update --global PowerShell
.
Kom igång med AI genom att skapa ett enkelt .NET 8-konsolchattprogram. Programmet körs lokalt och använder OpenAI-modellen dall-e-3
för att generera postkortbilder så att du kan bjuda in dina vänner på en vandring! Följ de här stegen för att etablera Azure OpenAI och lär dig hur du använder .NET Azure OpenAI SDK.
Förutsättningar
- .NET 8 SDK – Installera .NET 8 SDK.
- En Azure-prenumeration – Skapa en kostnadsfritt.
- Åtkomst till Azure OpenAI-tjänsten.
- Azure Developer CLI (valfritt) – Installera eller uppdatera Azure Developer CLI.
Hämta exempelprojektet
Klona exempellagringsplatsen
Du kan skapa en egen app med hjälp av stegen i de kommande avsnitten, eller så kan du klona GitHub-lagringsplatsen som innehåller de färdiga exempelapparna för alla snabbstarter. Om du planerar att använda Azure OpenAI är exempelrepoen också strukturerad som en Azure Developer CLI-mall som kan etablera en Azure OpenAI-resurs åt dig.
git clone https://github.com/dotnet/ai-samples.git
Skapa Azure OpenAI-tjänsten
GitHub-exempellagringsplatsen är strukturerad som en Azure Developer CLI-mall (azd
) som azd
kan använda för att etablera Azure OpenAI-tjänsten och modellen åt dig.
Från en terminal eller kommandotolk navigerar du till
src\quickstarts\azure-openai
katalogen för exempeldatabasen.azd up
Kör kommandot för att etablera Azure OpenAI-resurserna. Det kan ta flera minuter att skapa Azure OpenAI-tjänsten och distribuera modellen.azd up
azd
konfigurerar också nödvändiga användarhemligheter för exempelappen, till exempel Azure OpenAI-slutpunkten och modellnamnet.
Prova exemplet på vandringsbilder
Klona lagringsplatsen: dotnet/ai-samples
Kör följande kommandon för att konfigurera din OpenAI API-nyckel som en hemlighet för exempelappen:
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key>
dotnet run
Använd kommandot för att köra appen:dotnet run
Gå till katalogen från
azure-openai\semantic-kernel\05-HikeImages
en terminal eller kommandotolk.dotnet run
Använd kommandot för att köra appen:dotnet run
Dricks
Om du får ett felmeddelande kanske Azure OpenAI-resurserna inte har distribuerats klart. Vänta några minuter och försök igen.
Utforska koden
Programmet använder Microsoft.SemanticKernel
paketet för att skicka och ta emot begäranden till OpenAI-tjänsten.
Filen Program.cs innehåller all appkod. De första flera raderna med kod anger konfigurationsvärden och hämtar den OpenAI-nyckel som tidigare angavs med kommandot dotnet user-secrets
.
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string key = config["OpenAIKey"];
Tjänsten OpenAITextToImageService
underlättar begäranden och svar.
OpenAITextToImageService textToImageService = new(key, null);
Programmet använder Microsoft.SemanticKernel
paketet för att skicka och ta emot begäranden till Azure OpenAI-tjänsten.
Filen Program.cs innehåller all appkod. De första raderna med kod läser in hemligheter och konfigurationsvärden som angavs i dotnet user-secrets
för dig under programetablering.
// 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"];
Tjänsten AzureOpenAITextToImageService
underlättar begäranden och svar.
AzureOpenAITextToImageService textToImageService = new(deployment, endpoint, new DefaultAzureCredential(), null);
Ange kontext och instruktioner för modellen genom att lägga till en systemprompt. En bra bildgenereringsprompt kräver en tydlig beskrivning av vad bilden är, vilka färger som ska användas, det avsedda formatet och andra beskrivningar.
Funktionen GenerateImageAsync
instruerar modellen att generera ett svar baserat på användarens prompt och bildstorlek och kvalitetskonfigurationer.
// 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}");
Anpassa uppmaningen för att anpassa de bilder som genereras av modellen.
Rensa resurser
När du inte längre behöver exempelprogrammet eller resurserna tar du bort motsvarande distribution och alla resurser.
azd down
Felsöka
I Windows kan du få följande felmeddelanden när du har kört azd up
:
postprovision.ps1 är inte digitalt signerad. Skriptet körs inte i systemet
Skriptet postprovision.ps1 körs för att ange de .NET-användarhemligheter som används i programmet. Undvik det här felet genom att köra följande PowerShell-kommando:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Kör sedan kommandot igen azd up
.
Ett annat möjligt fel:
"pwsh" identifieras inte som ett internt eller externt kommando, ett fungerande program eller en batchfil. VARNING! "postprovision"-kroken misslyckades med slutkoden: '1', Sökväg: '.\infra\post-script\postprovision.ps1'. : slutkod: 1 Körningen fortsätter eftersom ContinueOnError har angetts till true.
Skriptet postprovision.ps1 körs för att ange de .NET-användarhemligheter som används i programmet. Undvik det här felet genom att köra skriptet manuellt med följande PowerShell-kommando:
.\infra\post-script\postprovision.ps1
.NET AI-apparna har nu användarhemligheterna konfigurerade och de kan testas.