Sdílet prostřednictvím


Generování imagí pomocí Azure AI s .NET

Začněte se sémantickým jádrem vytvořením jednoduché konzolové chatovací aplikace .NET 8. Aplikace se spustí místně a použije model OpenAI dell-e-3 k vygenerování poštovní karty a pozvání přátel na výlet! Pomocí těchto kroků zřiďte Azure OpenAI a zjistěte, jak používat sémantické jádro.

Začněte se sadou .NET Azure OpenAI SDK vytvořením jednoduché konzolové chatovací aplikace .NET 8. Aplikace se spustí místně a použije model OpenAI dell-e-3 k vygenerování poštovní karty a pozvání přátel na výlet! Pomocí těchto kroků zřiďte Azure OpenAI a zjistěte, jak používat sadu .NET Azure OpenAI SDK.

Požadavky

Nasazení prostředků Azure

Ujistěte se, že dodržujete požadavky , abyste měli přístup ke službě Azure OpenAI a rozhraní příkazového řádku Azure Developer CLI, a pak postupujte podle následujícího průvodce a nastavte ji s ukázkovou aplikací.

  1. Klonování úložiště: dotnet/ai-samples

  2. Z terminálu nebo příkazového řádku přejděte do adresáře Rychlý start .

  3. Tím se zřídí prostředky Azure OpenAI. Vytvoření služby Azure OpenAI a nasazení modelu může trvat několik minut.

    azd up
    

Poznámka:

Pokud už máte k dispozici službu Azure OpenAI, můžete nasazení přeskočit a použít tuto hodnotu v Program.cs, nejlépe z některého IConfiguration.

Odstraňování potíží

Ve Windows se můžou po spuštění azd upzobrazit následující chybové zprávy:

postprovision.ps1 není digitálně podepsán. Skript se v systému nespustí.

Skript postprovision.ps1 se spustí a nastaví tajné kódy uživatele .NET používané v aplikaci. Pokud se chcete této chybě vyhnout, spusťte následující příkaz PowerShellu:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Pak příkaz spusťte azd up znovu.

Další možná chyba:

"pwsh" není rozpoznán jako interní nebo externí příkaz, operovatelný program nebo dávkový soubor. UPOZORNĚNÍ: "postprovision" hook selhal s ukončovacím kódem: '1', Cesta: '.\infra\post-script\postprovision.ps1'. : ukončovací kód: 1 Provádění bude pokračovat, protože ContinueOnError byl nastaven na hodnotu true.

Skript postprovision.ps1 se spustí a nastaví tajné kódy uživatele .NET používané v aplikaci. Pokud se chcete této chybě vyhnout, spusťte skript ručně pomocí následujícího příkazu PowerShellu:

.\infra\post-script\postprovision.ps1

Aplikace .NET AI teď mají nakonfigurované tajné kódy uživatelů a dají se testovat.

Vyzkoušení vygenerování obrázků pro pěší turistiku

  1. Z terminálu nebo příkazového řádku přejděte do semantic-kernel\05-HikeImages adresáře.
  1. Z terminálu nebo příkazového řádku přejděte do azure-openai-sdk\05-HikeImages adresáře.
  1. Teď je čas vyzkoušet konzolovou aplikaci. Zadáním následujícího příkazu spusťte aplikaci:

    dotnet run
    

    Pokud se zobrazí chybová zpráva, že se nasazení prostředků Azure OpenAI nedokončily. Počkejte několik minut a zkuste to znovu.

Vysvětlení kódu

Naše aplikace používá Microsoft.SemanticKernel balíček, který je k dispozici na NuGetu, k odesílání a přijímání požadavků do služby Azure OpenAI nasazené v Azure.

Celá aplikace je obsažena v souboru Program.cs . Prvních několik řádků kódu načítá tajné kódy a konfigurační hodnoty, které byly nastaveny ve dotnet user-secrets vámi během zřizování aplikace.

// == Retrieve the local secrets saved during the Azure deployment ==========
var config = new ConfigurationBuilder()
    .AddUserSecrets<Program>()
    .Build();

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

Služba AzureOpenAITextToImageService usnadňuje požadavky a odpovědi.

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

textToImageService Po vytvoření služby poskytneme modelu další kontext přidáním systémové výzvy. Dobrá výzva k vygenerování obrázků vyžaduje jasný popis: co je v obrázcích, konkrétní barva, která se má použít, styl (kresba, malování, realistický nebo kreslený obrázek). Model použije tuto výzvu k vygenerování image. Pokud chcete, aby model vygeneroval odpověď založenou na požadavku uživatele, použijte GenerateImageAsync funkci a zadejte velikost a kvalitu.

// Generate the image
string imageUrl = await textToImageService.GenerateImageAsync("""
    A postal card with an 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}");

Přizpůsobte výzvu k přizpůsobení obrázků vygenerovaných modelem.

Vysvětlení kódu

Naše aplikace používá klientskou Azure.AI.OpenAI sadu SDK, která je k dispozici na NuGetu, k odesílání a přijímání požadavků do služby Azure OpenAI nasazené v Azure.

Celá aplikace je obsažena v souboru Program.cs . Prvních několik řádků kódu načítá tajné kódy a konfigurační hodnoty, které byly nastaveny ve dotnet user-secrets vámi během zřizování aplikace.

// == Retrieve the local secrets saved during the Azure deployment ==========
var config = new ConfigurationBuilder()
    .AddUserSecrets<Program>()
    .Build();

string openAIEndpoint = config["AZURE_OPENAI_ENDPOINT"];
string openAIDeploymentName = config["AZURE_OPENAI_GPT_NAME"];
string openAiKey = config["AZURE_OPENAI_KEY"];

// == Creating the AIClient ==========
var endpoint = new Uri(openAIEndpoint);
var credentials = new AzureKeyCredential(openAiKey);

Třída OpenAIClient usnadňuje požadavky a odpovědi. ChatCompletionOptions určuje parametry, jak bude model reagovat.

var openAIClient = new OpenAIClient(endpoint, credentials);

var completionOptions = new ChatCompletionsOptions
{
    MaxTokens = 400,
    Temperature = 1f,
    FrequencyPenalty = 0.0f,
    PresencePenalty = 0.0f,
    NucleusSamplingFactor = 0.95f, // Top P
    DeploymentName = openAIDeploymentName
};

OpenAIClient Po vytvoření klienta poskytneme modelu další kontext přidáním systémové výzvy. Dobrá výzva k vygenerování obrázků vyžaduje jasný popis: co je v obrázcích, konkrétní barva, která se má použít, styl (kresba, malování, realistický nebo kreslený obrázek). Model použije tuto výzvu k vygenerování image.

string imagePrompt = """
A postal card with an happy hiker waving, there 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!'
""";

Pokud chcete, aby model vygeneroval odpověď založenou na požadavku uživatele, použijte GetImageGenerationsAsync funkci a zadejte velikost a kvalitu.

Response<ImageGenerations> response = await openAIClient.GetImageGenerationsAsync(
    new ImageGenerationOptions()
    {
        DeploymentName = openAIDalleName,
        Prompt = imagePrompt,
        Size = ImageSize.Size1024x1024,
        Quality = ImageGenerationQuality.Standard
    });

ImageGenerationData generatedImage = response.Value.Data[0];
if (!string.IsNullOrEmpty(generatedImage.RevisedPrompt))
{
    Console.WriteLine($"\n\nInput prompt automatically revised to:\n {generatedImage.RevisedPrompt}");
}
Console.WriteLine($"\n\nThe generated image is ready at:\n {generatedImage.Url.AbsoluteUri}");

Přizpůsobte výzvu k přizpůsobení obrázků vygenerovaných modelem.

Vyčištění prostředků

Pokud už ukázkovou aplikaci nebo prostředky nepotřebujete, odeberte odpovídající nasazení a všechny prostředky.

azd down

Další kroky