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, eseguirepwsh
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
- .NET 8 SDK - Installare .NET 8 SDK.
- Una sottoscrizione di Azure: crearne una gratuitamente.
- Azure Developer CLI - Installare o aggiornare Azure Developer CLI.
- Accedere al Servizio OpenAI di Azure.
- In Windows è necessario PowerShell
v7+
. Per convalidare la versione, eseguirepwsh
in un terminale. Dovrebbe restituire la versione corrente. Se restituisce un errore, eseguire il comando seguente:dotnet tool update --global PowerShell
.
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.
Da un terminale o un prompt dei comandi passare alla directory src\quickstarts\azure-openai del repository di esempio.
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
Clonare il repository: dotnet/ai-samples
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>
Usare il comando
dotnet run
per eseguire l'app:dotnet run
Da un terminale o un prompt dei comandi passare alla directory
azure-openai\05-HikeImages
.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.