Dela via


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 du pwsh 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

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.

  1. Från en terminal eller kommandotolk navigerar du till src\quickstarts\azure-openai katalogen för exempeldatabasen.

  2. 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

  1. Klona lagringsplatsen: dotnet/ai-samples

  2. 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>
    
  3. dotnet run Använd kommandot för att köra appen:

    dotnet run
    
  1. Gå till katalogen från azure-openai\semantic-kernel\05-HikeImages en terminal eller kommandotolk.

  2. 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.

Nästa steg