Generare immagini usando l'intelligenza artificiale con .NET

Iniziare a usare l'intelligenza artificiale creando una semplice applicazione di chat console .NET 8. L'applicazione verrà eseguita in locale e userà il modello dall-e-3 di OpenAI per generare immagini di cartoline, così da invitare i propri amici a fare un'escursione! Eseguire la procedura seguente per ottenere l'accesso a OpenAI e imparare a usare il kernel semantico.

Prerequisiti

  • .NET 8.0 SDK - Installare .NET 8.0 SDK.
  • Una chiave API da OpenAI per poter eseguire questo esempio.
  • In Windows è necessario PowerShell v7+. Per convalidare la versione, eseguire pwsh in un terminale. Dovrebbe restituire la versione corrente. Se restituisce un errore, eseguire il comando seguente: dotnet tool update --global PowerShell.

Iniziare a usare l'intelligenza artificiale creando una semplice applicazione di chat console .NET 8. L'applicazione verrà eseguita in locale e userà il modello dall-e-3 di OpenAI per generare immagini di cartoline, così da invitare i propri amici a fare un'escursione! Seguire questa procedura per effettuare il provisioning di OpenAI di Azure e imparare a usare .NET Azure OpenAI SDK.

Prerequisiti

Ottenere il progetto di esempio

Clonare il repository GitHub che contiene le app di esempio per tutte le guide introduttive:

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

Creare il servizio Azure OpenAI

Il repository GitHub di esempio è strutturato come modello dell'interfaccia della riga di comando per sviluppatori di Azure (azd), che azd può essere usato per effettuare il provisioning del servizio Azure OpenAI e del modello.

  1. Da un terminale o un prompt dei comandi passare alla directory src\quickstarts\azure-openai del repository di esempio.

  2. Eseguire il comando per effettuare il azd up provisioning delle risorse OpenAI di Azure. La creazione del Servizio Azure OpenAI e la distribuzione del modello possono richiedere alcuni minuti.

    azd up
    

    azd configura anche i segreti utente necessari per l'app di esempio, ad esempio la chiave di accesso OpenAI.

    Nota

    Se si verifica un errore durante la distribuzione di azd up, visitare la sezione di risoluzione dei problemi.

Provare l'esempio di immagini di escursionismo

  1. Clonare il repository: dotnet/ai-samples

  2. Eseguire i comandi seguenti per configurare la chiave API di OpenAI come segreto per l'app di esempio:

    dotnet user-secrets init
    dotnet user-secrets set OpenAIKey <your-openai-key>
    
  3. Usare il comando dotnet run per eseguire l'app:

    dotnet run
    
  1. Da un terminale o un prompt dei comandi passare alla directory azure-openai\05-HikeImages.

  2. Usare il comando dotnet run per eseguire l'app:

    dotnet run
    

    Suggerimento

    Se viene visualizzato un messaggio di errore, è possibile che la distribuzione delle risorse di Azure OpenAI non sia stata completata. Attendere un paio di minuti e riprovare.

Esplorare il codice

L'applicazione usa il pacchetto Microsoft.SemanticKernel per inviare e ricevere richieste a un Servizio OpenAI.

Il file Program.cs contiene tutto il codice dell'app. Le prime righe di codice impostano i valori di configurazione e consentono di ottenere la chiave OpenAI impostata in precedenza tramite il comando dotnet user-secrets.

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

Il servizio OpenAITextToImageService facilita le richieste e le risposte.

OpenAITextToImageService textToImageService = new(key, null);

L'applicazione usa il pacchetto Microsoft.SemanticKernel per inviare e ricevere richieste al Servizio OpenAI di Azure.

Il file Program.cs contiene tutto il codice dell'app. Le prime righe di codice caricano segreti e valori di configurazione impostati automaticamente in dotnet user-secrets durante il provisioning dell'applicazione.

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

Il servizio AzureOpenAITextToImageService facilita le richieste e le risposte.

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

Specificare il contesto e le istruzioni del modello aggiungendo un prompt di sistema. Per generare un'immagine in modo efficace è necessario fornire una descrizione chiara dell'immagine, dei colori e dello stile da usare e di altri descrittori.

La funzione GenerateImageAsync indica al modello di generare una risposta in base alla richiesta dell'utente e alle configurazioni delle dimensioni e della qualità dell'immagine.

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

Personalizzare la richiesta per personalizzare le immagini generate dal modello.

Pulire le risorse

Quando l'applicazione o le risorse di esempio non sono più necessarie, rimuovere la distribuzione corrispondente e tutte le risorse.

azd down

Risoluzione dei problemi

In Windows è possibile che vengano visualizzati i messaggi di errore seguenti dopo l'esecuzione di azd up:

postprovision.ps1 è privo di firma digitale. Lo script non verrà eseguito nel sistema

Lo script postprovision.ps1 viene eseguito per impostare i segreti utente .NET usati nell'applicazione. Per evitare questo errore, eseguire il comando di PowerShell seguente:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Eseguire nuovamente il comando azd up.

Un altro possibile errore:

'pwsh' non è riconosciuto come comando interno o esterno, programma eseguibile o file batch. AVVISO: hook 'postprovision' non riuscito con codice di uscita: '1', Percorso: '.\infra\post-script\postprovision.ps1'. : codice di uscita: 1 L'esecuzione continuerà perché ContinueOnError è stato impostato su true.

Lo script postprovision.ps1 viene eseguito per impostare i segreti utente .NET usati nell'applicazione. Per evitare questo errore, eseguire manualmente lo script usando il comando di PowerShell seguente:

.\infra\post-script\postprovision.ps1

A questo punto, i segreti utente nelle app .NET basate su intelligenza artificiale sono stati configurati e possono essere testati.

Passaggi successivi