Comparteix a través de


Generación de imágenes mediante Azure AI con .NET

Empiece a trabajar con el kernel semántico mediante la creación de una sencilla aplicación de chat de consola de .NET 8. La aplicación se ejecutará localmente y usará el modelo OpenAI dell-e-3 para generar tarjeta postal e invitar a sus amigos para una caminata. Siga estos pasos para aprovisionar Azure OpenAI y aprenda a usar el kernel semántico.

Empiece a trabajar con el SDK de Azure OpenAI de .NET mediante la creación de una sencilla aplicación de chat de consola de .NET 8. La aplicación se ejecutará localmente y usará el modelo OpenAI dell-e-3 para generar tarjeta postal e invitar a sus amigos para una caminata. Siga estos pasos para aprovisionar Azure OpenAI y aprenda a usar el SDK de Azure OpenAI de .NET.

Requisitos previos

Implementación de los recursos de Azure

Asegúrese de seguir los Requisitos previos para tener acceso a Azure OpenAI Service, así como a Azure Developer CLI y, a continuación, siga esta guía para establecer el inicio de la aplicación de ejemplo.

  1. Clone el repositorio: dotnet/ai-samples

  2. Desde un terminal o símbolo del sistema, vaya al directorio inicios rápidos.

  3. Esto aprovisiona los recursos de Azure OpenAI. Puede tardar varios minutos en crear el servicio Azure OpenAI e implementar el modelo.

    azd up
    

Nota:

Si ya tiene disponible un servicio Azure OpenAI, puede omitir la implementación y usar ese valor en el Program.cs, preferiblemente de IConfiguration.

Solución de problemas

En Windows, es posible que reciba los siguientes mensajes de error después de ejecutar azd up:

postprovision.ps1 no está firmado digitalmente. El script no se ejecutará en el sistema

El script postprovision.ps1 se ejecuta para establecer los secretos de usuario de .NET usados en la aplicación. Para evitar este error, ejecute el siguiente comando de PowerShell:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

A continuación, vuelva a ejecutar el comando azd up.

Otro posible error:

'pwsh' no se reconoce como un comando interno o externo, programa operable o archivo por lotes. ADVERTENCIA: Error en el enlace "postprovision" con código de salida: '1', Ruta de acceso: '.\infra\post-script\postprovision.ps1'. : código de salida: 1 La ejecución continuará desde que ContinueOnError se ha establecido en true.

El script postprovision.ps1 se ejecuta para establecer los secretos de usuario de .NET usados en la aplicación. Para evitar este error, ejecute manualmente el script mediante el siguiente comando de PowerShell:

.\infra\post-script\postprovision.ps1

Las aplicaciones de .NET AI ahora tienen configurados los secretos de usuario y se pueden probar.

Probar el ejemplo generar imágenes de senderismo

  1. Desde un terminal o símbolo del sistema, vaya al directorio semantic-kernel\05-HikeImages.
  1. Desde un terminal o símbolo del sistema, vaya al directorio azure-openai-sdk\05-HikeImages.
  1. Ahora es el momento de probar la aplicación de consola. Escriba lo siguiente para ejecutar la aplicación:

    dotnet run
    

    Si recibe un mensaje de error, es posible que los recursos de Azure OpenAI no hayan terminado de implementarse. Espere un par de minutos e inténtelo de nuevo.

Descripción del código

Nuestra aplicación usa el paquete Microsoft.SemanticKernel, que está disponible en NuGet, para enviar y recibir solicitudes a un servicio Azure OpenAI implementado en Azure.

Toda la aplicación está contenida en el archivo Program.cs. Las primeras líneas de código cargan secretos y valores de configuración establecidos en dotnet user-secrets para usted durante el aprovisionamiento de la aplicación.

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

El servicio AzureOpenAITextToImageService facilita las solicitudes y respuestas.

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

Una vez creado el servicio textToImageService, proporcionamos más contexto al modelo agregando una solicitud del sistema. Un buen aviso para generar imágenes requiere una descripción clara: lo que hay en las imágenes, color específico para usar, estilo (dibujo, pintura, realista o dibujos animados). El modelo usará este mensaje para generar la imagen. Para que el modelo genere una respuesta basada en la solicitud del usuario, use la función GenerateImageAsync, y especifique el tamaño y la calidad.

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

Personalice el mensaje para personalizar las imágenes generadas por el modelo.

Descripción del código

Nuestra aplicación usa el SDK de cliente Azure.AI.OpenAI, que está disponible en NuGet, para enviar y recibir solicitudes a un servicio Azure OpenAI implementado en Azure.

Toda la aplicación está contenida en el archivo Program.cs. Las primeras líneas de código cargan secretos y valores de configuración establecidos en dotnet user-secrets para usted durante el aprovisionamiento de la aplicación.

// == 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);

La clase OpenAIClient facilita las solicitudes y respuestas. ChatCompletionOptions especifica parámetros de cómo responderá el modelo.

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
};

Una vez creado el cliente OpenAIClient, proporcionamos más contexto al modelo agregando un símbolo del sistema. Un buen aviso para generar imágenes requiere una descripción clara: lo que hay en las imágenes, color específico para usar, estilo (dibujo, pintura, realista o dibujos animados). El modelo usará este mensaje para generar la imagen.

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!'
""";

Para que el modelo genere una respuesta basada en la solicitud del usuario, use la función GetImageGenerationsAsync, y especifique el tamaño y la calidad.

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

Personalice el mensaje para personalizar las imágenes generadas por el modelo.

Limpieza de recursos

Cuando ya no necesite la aplicación o los recursos de ejemplo, quite la implementación correspondiente y todos los recursos.

azd down

Pasos siguientes