Delen via


Afbeeldingen genereren met AI met .NET

Ga aan de slag met AI door een eenvoudige .NET 8-consolechattoepassing te maken. De toepassing wordt lokaal uitgevoerd en gebruikt het OpenAI-model dall-e-3 om postkaartafbeeldingen te genereren, zodat u uw vrienden kunt uitnodigen voor een wandeling! Volg deze stappen om toegang te krijgen tot OpenAI en leer hoe u Semantische kernel gebruikt.

Vereisten

  • .NET 8.0 SDK : installeer de .NET 8.0 SDK.
  • Een API-sleutel van OpenAI , zodat u dit voorbeeld kunt uitvoeren.
  • In Windows is PowerShell v7+ vereist. Als u uw versie wilt valideren, voert u deze uit pwsh in een terminal. De huidige versie moet worden geretourneerd. Als er een fout wordt geretourneerd, voert u de volgende opdracht uit: dotnet tool update --global PowerShell.

Ga aan de slag met AI door een eenvoudige .NET 8-consolechattoepassing te maken. De toepassing wordt lokaal uitgevoerd en gebruikt het OpenAI-model dall-e-3 om postkaartafbeeldingen te genereren, zodat u uw vrienden kunt uitnodigen voor een wandeling! Volg deze stappen om Azure OpenAI in te richten en te leren hoe u de .NET Azure OpenAI SDK gebruikt.

Vereisten

  • .NET 8 SDK - Installeer de .NET 8 SDK.
  • Een Azure-abonnement: maak er gratis een.
  • Azure Developer CLI: de Azure Developer CLI installeren of bijwerken.
  • Toegang tot de Azure OpenAI-service.
  • In Windows is PowerShell v7+ vereist. Als u uw versie wilt valideren, voert u deze uit pwsh in een terminal. De huidige versie moet worden geretourneerd. Als er een fout wordt geretourneerd, voert u de volgende opdracht uit: dotnet tool update --global PowerShell.

Het voorbeeldproject ophalen

Kloon de GitHub-opslagplaats die de voorbeeld-apps voor alle quickstarts bevat:

git clone https://github.com/dotnet/ai-samples.git

De Azure OpenAI-service maken

De GitHub-voorbeeldopslagplaats is gestructureerd als een Azure Developer CLI-sjabloon (azd) die azd kan worden gebruikt om de Azure OpenAI-service en het model voor u in te richten.

  1. Navigeer vanuit een terminal of opdrachtprompt naar de map src\quickstarts\azure-openai van de voorbeeldopslagplaats.

  2. Voer de azd up opdracht uit om de Azure OpenAI-resources in te richten. Het kan enkele minuten duren voordat de Azure OpenAI-service is gemaakt en het model is geïmplementeerd.

    azd up
    

    azd configureert ook de vereiste gebruikersgeheimen voor de voorbeeld-app, zoals de OpenAI-toegangssleutel.

    Notitie

    Als er een fout optreedt tijdens de azd up implementatie, gaat u naar de sectie probleemoplossing .

Probeer het voorbeeld van de wandelafbeeldingen

  1. Kloon de opslagplaats: dotnet/ai-samples

  2. Voer de volgende opdrachten uit om uw OpenAI API-sleutel als geheim te configureren voor de voorbeeld-app:

    dotnet user-secrets init
    dotnet user-secrets set OpenAIKey <your-openai-key>
    
  3. Gebruik de dotnet run opdracht om de app uit te voeren:

    dotnet run
    
  1. Navigeer vanuit een terminal of opdrachtprompt naar de azure-openai\05-HikeImages map.

  2. Gebruik de dotnet run opdracht om de app uit te voeren:

    dotnet run
    

    Tip

    Als er een foutbericht wordt weergegeven, zijn de Azure OpenAI-resources mogelijk nog niet geïmplementeerd. Wacht een paar minuten en probeer het opnieuw.

De code verkennen

De toepassing gebruikt het pakket voor het Microsoft.SemanticKernel verzenden en ontvangen van aanvragen naar de OpenAI-service.

Het bestand Program.cs bevat alle app-code. De eerste regels met configuratiewaarden voor codesets en ophalen de OpenAI-sleutel die eerder is ingesteld met behulp van de dotnet user-secrets opdracht.

var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string key = config["OpenAIKey"];

De OpenAITextToImageService service faciliteert de aanvragen en antwoorden.

OpenAITextToImageService textToImageService = new(key, null);

De toepassing gebruikt het pakket voor het Microsoft.SemanticKernel verzenden en ontvangen van aanvragen naar de Azure OpenAI-service.

Het bestand Program.cs bevat alle app-code. De eerste verschillende regels code laden geheimen en configuratiewaarden die voor u zijn ingesteld dotnet user-secrets tijdens het inrichten van de toepassing.

// 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"];

De AzureOpenAITextToImageService service faciliteert de aanvragen en antwoorden.

AzureOpenAITextToImageService textToImageService = new(deployment, endpoint, key, null);

Geef context en instructies aan het model door een systeemprompt toe te voegen. Een goede prompt voor het genereren van afbeeldingen vereist een duidelijke beschrijving van wat de afbeelding is, welke kleuren moeten worden gebruikt, de beoogde stijl en andere descriptors.

Met GenerateImageAsync de functie wordt het model geïnstrueerd om een antwoord te genereren op basis van de gebruikersprompt en de grootte en kwaliteit van de installatiekopieën.

// 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}");

Pas de prompt aan om de afbeeldingen die door het model worden gegenereerd, aan te passen.

Resources opschonen

Wanneer u de voorbeeldtoepassing of resources niet meer nodig hebt, verwijdert u de bijbehorende implementatie en alle resources.

azd down

Problemen oplossen

In Windows krijgt u mogelijk de volgende foutberichten nadat u deze hebt uitgevoerd azd up:

postprovision.ps1 is niet digitaal ondertekend. Het script wordt niet uitgevoerd op het systeem

Het script postprovision.ps1 wordt uitgevoerd om de .NET-gebruikersgeheimen in te stellen die in de toepassing worden gebruikt. Voer de volgende PowerShell-opdracht uit om deze fout te voorkomen:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Voer vervolgens de azd up opdracht opnieuw uit.

Een andere mogelijke fout:

'pwsh' wordt niet herkend als een interne of externe opdracht, beveiligbaar programma of batchbestand. WAARSCHUWING: 'postprovision' hook is mislukt met afsluitcode: '1', Pad: '.\infra\post-script\postprovision.ps1'. : afsluitcode: 1 uitvoering wordt voortgezet omdat ContinueOnError is ingesteld op true.

Het script postprovision.ps1 wordt uitgevoerd om de .NET-gebruikersgeheimen in te stellen die in de toepassing worden gebruikt. U kunt deze fout voorkomen door het script handmatig uit te voeren met behulp van de volgende PowerShell-opdracht:

.\infra\post-script\postprovision.ps1

De .NET AI-apps hebben nu de gebruikersgeheimen geconfigureerd en kunnen worden getest.

Volgende stappen