Создание образов с помощью ИИ 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.
Необходимые компоненты
- Пакет SDK для .NET 8.0. Установка пакета SDK для .NET 8.0
- подписка Azure — создайте бесплатную учетную запись.
- Интерфейс командной строки разработчика Azure. Установка или обновление интерфейса командной строки разработчика Azure
- Доступ к службе Azure OpenAI.
- В Windows требуется PowerShell
v7+
. Чтобы проверить версию, запуститеpwsh
в терминале. Он должен возвращать текущую версию. Если он возвращает ошибку, выполните следующую команду:dotnet tool update --global PowerShell
Развертывание ресурсов Azure
Убедитесь, что вы следуйте предварительным требованиям, чтобы иметь доступ к Службе Azure OpenAI, а также интерфейс командной строки разработчика Azure, а затем следуйте приведенному ниже руководству, чтобы настроить начало работы с примером приложения.
Клонирование репозитория: dotnet/ai-samples
В терминале или командной строке перейдите в каталог кратких руководств.
Это подготавливает ресурсы 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 настроены для пользовательских секретов и их можно протестировать.
Пример создания изображений для походов
- В терминале или командной строке перейдите
semantic-kernel\05-HikeImages
в каталог.
- В терминале или командной строке перейдите
azure-openai-sdk\05-HikeImages
в каталог.
Теперь пора попробовать консольное приложение. Введите следующее, чтобы запустить приложение:
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
Следующие шаги
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по