Condividi tramite


Aggiungere DALL-E all'app desktop WinUI 3/SDK per app di Windows

In questa procedura si integreranno le funzionalità di generazione di immagini di DALL-E nell'app desktop WinUI 3/SDK per app di Windows.

Prerequisiti

Installare e inizializzare OpenAI SDK

Assicurarsi che l'oggetto betalgo/OpenAI SDK venga installato nel progetto eseguendo dotnet add package Betalgo.OpenAI dalla finestra del terminale di Visual Studio. Inizializzare l'SDK con la chiave API OpenAI come indicato di seguito:

//...
using OpenAI;
using OpenAI.Managers;
using OpenAI.ObjectModels.RequestModels;
using OpenAI.ObjectModels;

namespace ChatGPT_WinUI3
{
    public sealed partial class MainWindow : Window
    {
        private OpenAIService openAiService;

        public MainWindow()
        {
            this.InitializeComponent();
           
            var openAiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY");

            openAiService = new OpenAIService(new OpenAiOptions(){
                ApiKey = openAiKey
            });
        }
    }
}

Modificare l'interfaccia utente dell'app

Modificare l'oggetto esistente MainWindow.xaml in modo da includere un controllo Image che visualizza immagini all'interno della conversazione:

<!-- ... existing XAML ... -->
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <Image Source="{Binding ImageUrl}" Margin="5" Stretch="UniformToFill"/>
    </DataTemplate>
</ItemsControl.ItemTemplate>
<!-- ... existing XAML ... -->

Si noti che questa procedura presuppone che si abbia un'interfaccia di chat con un oggetto TextBox e Button; vedere Come aggiungere completamenti di chat OpenAI all'app desktop WinUI 3/SDK per app di Windows.

Implementare la generazione di immagini DALL-E

In MainWindow.xaml.cs, aggiungere i metodi seguenti per gestire la generazione e la visualizzazione delle immagini:

// ... existing using statements ...

private async void SendButton_Click(object sender, RoutedEventArgs e)
{
    ResponseProgressBar.Visibility = Visibility.Visible;
    string userInput = InputTextBox.Text;
    if (!string.IsNullOrEmpty(userInput))
    {
        InputTextBox.Text = string.Empty;
        var imageResult = await openAiService.Image.CreateImage(new ImageCreateRequest
        {
            Prompt = userInput,
            N = 2,
            Size = StaticValues.ImageStatics.Size.Size256, // StaticValues is available as part of the Betalgo OpenAI SDK
            ResponseFormat = StaticValues.ImageStatics.ResponseFormat.Url,
            User = "TestUser"
        });

        if (imageResult.Successful)
        {
            foreach (var imageUrl in imageResult.Results.Select(r => r.Url))
            {
                AddImageMessageToConversation(imageUrl);
            }
        }
        else
        {
            AddMessageToConversation("GPT: Sorry, something bad happened: " + imageResult.Error?.Message);
        }
    }
    ResponseProgressBar.Visibility = Visibility.Collapsed;
}

private void AddImageMessageToConversation(string imageUrl)
{
    var imageMessage = new MessageItem
    {
        ImageUrl = imageUrl
    };
    ConversationList.Items.Add(imageMessage);
}

Il metodo openAiService.Image.CreateImage() è responsabile della chiamata dell'API DALL-E di OpenAI. Per altri esempi di utilizzo, vedere il wiki di Betalgo OpenAI SDK.

Si noti la presenza di ImageUrl nella classe MessageItem. Si tratta di una nuova proprietà:

public class MessageItem
{
    public string Text { get; set; }
    public SolidColorBrush Color { get; set; }
    public string ImageUrl { get; set; } // new
}

Esecuzione e test

Eseguire l'app, immettere un prompt e fare clic sul pulsante "Genera immagine". L'output dovrebbe essere simile al seguente:

Demo per la generazione di immagini

Riepilogo

In questa guida, si è appreso come:

  1. Accettare richieste di immagini dagli utenti all'interno di un oggetto <TextBox>.
  2. Generare immagini usando l'API DALL-E OpenAI.
  3. Visualizzare l'immagine in un oggetto <Image>.