Поделиться через


Создание образов с помощью ИИ Azure с помощью .NET

Приступая к работе с семантического ядра, создав простое консольное приложение чата .NET 8. Приложение будет работать локально и использовать модель OpenAI dell-e-3 для создания почтовых карта и приглашения друзей для похода! Выполните следующие действия, чтобы подготовить Azure OpenAI и узнать, как использовать семантические ядра.

Приступая к работе с пакетом SDK для .NET Azure OpenAI, создав простое консольное приложение чата .NET 8. Приложение будет работать локально и использовать модель OpenAI dell-e-3 для создания почтовых карта и приглашения друзей для похода! Выполните следующие действия, чтобы подготовить Azure OpenAI и узнать, как использовать пакет SDK для .NET Azure OpenAI.

Необходимые компоненты

Развертывание ресурсов Azure

Убедитесь, что вы следуйте предварительным требованиям, чтобы иметь доступ к Службе Azure OpenAI, а также интерфейс командной строки разработчика Azure, а затем следуйте приведенному ниже руководству, чтобы настроить начало работы с примером приложения.

  1. Клонирование репозитория: dotnet/ai-samples

  2. В терминале или командной строке перейдите в каталог кратких руководств.

  3. Это подготавливает ресурсы Azure OpenAI. Для создания службы Azure OpenAI и развертывания модели может потребоваться несколько минут.

    azd up
    

Примечание.

Если у вас уже есть доступная служба Azure OpenAI, можно пропустить развертывание и использовать это значение в Program.cs, предпочтительно из IConfiguration.

Устранение неполадок

В Windows после выполнения azd upмогут появиться следующие сообщения об ошибках:

postprovision.ps1 не имеет цифровой подписи. Сценарий не будет выполняться в системе

Скрипт postprovision.ps1 выполняется для задания секретов пользователей .NET, используемых в приложении. Чтобы избежать этой ошибки, выполните следующую команду PowerShell:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Затем повторно запустите azd up команду.

Еще одна возможная ошибка:

Pwsh не распознается как внутренняя или внешняя команда, операблирование программы или пакетного файла. ПРЕДУПРЕЖДЕНИЕ: сбой перехватчика postprovision с кодом выхода: "1", путь: ".\infra\post-script\postprovision.ps1". : код выхода: 1 Выполнение будет продолжаться, так как Параметр ContinueOnError имеет значение true.

Скрипт postprovision.ps1 выполняется для задания секретов пользователей .NET, используемых в приложении. Чтобы избежать этой ошибки, вручную запустите скрипт с помощью следующей команды PowerShell:

.\infra\post-script\postprovision.ps1

Теперь приложения .NET AI настроены для пользовательских секретов и их можно протестировать.

Пример создания изображений для походов

  1. В терминале или командной строке перейдите semantic-kernel\05-HikeImages в каталог.
  1. В терминале или командной строке перейдите azure-openai-sdk\05-HikeImages в каталог.
  1. Теперь пора попробовать консольное приложение. Введите следующее, чтобы запустить приложение:

    dotnet run
    

    Если появится сообщение об ошибке, возможно, не завершено развертывание ресурсов Azure OpenAI. Подождите пару минут и повторите попытку.

Основные сведения о коде

В нашем приложении используется Microsoft.SemanticKernel пакет, который доступен в NuGet, для отправки и получения запросов в службу Azure OpenAI, развернутую в Azure.

Все приложение содержится в файле Program.cs . Первые несколько строк секретов загрузки кода и значений конфигурации, которые были заданы во dotnet user-secrets время подготовки приложения.

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

AzureOpenAITextToImageService Служба упрощает запросы и ответы.

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

textToImageService После создания службы мы предоставляем больше контекста модели, добавив системный запрос. Хороший запрос на создание изображений требует четкого описания: что находится в изображениях, конкретный цвет для использования, стиля (рисование, картина, реалистичная или мультфильм). Модель будет использовать этот запрос для создания образа. Чтобы модель создавала ответ на основе запроса пользователя, используйте GenerateImageAsync функцию и укажите размер и качество.

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

Настройте запрос на персонализацию изображений, созданных моделью.

Основные сведения о коде

В нашем приложении используется клиентский Azure.AI.OpenAI пакет SDK, доступный в NuGet, для отправки и получения запросов в службу Azure OpenAI, развернутую в Azure.

Все приложение содержится в файле Program.cs . Первые несколько строк секретов загрузки кода и значений конфигурации, которые были заданы во dotnet user-secrets время подготовки приложения.

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

Класс OpenAIClient упрощает запросы и ответы. ChatCompletionOptions указывает параметры реагирования модели.

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 После создания клиента мы предоставляем больше контекста модели, добавив системный запрос. Хороший запрос на создание изображений требует четкого описания: что находится в изображениях, конкретный цвет для использования, стиля (рисование, картина, реалистичная или мультфильм). Модель будет использовать этот запрос для создания образа.

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

Чтобы модель создавала ответ на основе запроса пользователя, используйте GetImageGenerationsAsync функцию и укажите размер и качество.

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

Настройте запрос на персонализацию изображений, созданных моделью.

Очистка ресурсов

Если вам больше не нужен пример приложения или ресурсов, удалите соответствующее развертывание и все ресурсы.

azd down

Следующие шаги