Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этом кратком руководстве вы используете библиотеку Microsoft.Extensions.AI MEAI для создания изображений из текстовых запросов с помощью модели ИИ. Возможности преобразования текста в изображения MEAI позволяют создавать изображения из запросов естественного языка или существующих изображений с помощью согласованной и расширяемой поверхности API.
Интерфейс IImageGenerator предоставляет унифицированный расширяемый API для работы с различными службами создания изображений, что упрощает интеграцию возможностей текста в изображения в приложения .NET. Интерфейс поддерживает следующее:
- Генерация изображений из текста.
- Композиция конвейера с промежуточным ПО, включающая ведение журнала, телеметрию, кэширование.
- Гибкие параметры конфигурации.
- Поддержка нескольких поставщиков ИИ.
Замечание
Интерфейс IImageGenerator в настоящее время помечен как экспериментальный с идентификатором диагностики MEAI001 . Возможно, потребуется отключить это предупреждение в файле проекта или коде.
Предпосылки
- Пакет SDK для .NET 8.0 или более поздней версии — Установите пакет SDK для .NET 8.
- Подписка Azure — создайте бесплатную учетную запись.
- Интерфейс командной строки разработчика Azure (опционально) — установить или обновить интерфейс командной строки разработчика Azure.
Настройка службы ИИ
Чтобы подготовить службу и модель Azure OpenAI с помощью портала Azure, выполните действия, описанные в статье Создание и развертывание ресурса Azure OpenAI Service. На шаге "Развернуть модель" выберите модель gpt-image-1.
Замечание
gpt-image-1 — это более новая модель, которая предлагает несколько улучшений по сравнению с DALL-E 3. Она доступна в OpenAI на ограниченной основе; подайте заявку на доступ с помощью этой формы.
Создание приложения
Выполните следующие действия, чтобы создать консольное приложение .NET, которое создает изображения из текстовых запросов.
Создайте консольное приложение:
dotnet new console -o TextToImageAIПерейдите в каталог
TextToImageAIи добавьте необходимые пакеты в приложение:dotnet add package Azure.AI.OpenAI dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecretsВыполните следующие команды, чтобы добавить секреты приложения для конечной точки Azure OpenAI, имени модели и ключа API:
dotnet user-secrets init dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-Azure-OpenAI-endpoint> dotnet user-secrets set AZURE_OPENAI_GPT_NAME gpt-image-1 dotnet user-secrets set AZURE_OPENAI_API_KEY <your-azure-openai-api-key>Откройте новое приложение в выбранном редакторе (например, Visual Studio).
Реализация базовой генерации изображений
Обновите
Program.csфайл с помощью следующего кода, чтобы получить данные конфигурации и создать AzureOpenAIClient:using Azure; using Azure.AI.OpenAI; using Microsoft.Extensions.AI; using Microsoft.Extensions.Configuration; IConfigurationRoot config = new ConfigurationBuilder() .AddUserSecrets<Program>() .Build(); string endpoint = config["AZURE_OPENAI_ENDPOINT"]; string apiKey = config["AZURE_OPENAI_API_KEY"]; string model = config["AZURE_OPENAI_GPT_NAME"]; // Create the Azure OpenAI client and convert to IImageGenerator. AzureOpenAIClient azureClient = new( new Uri(endpoint), new AzureKeyCredential(apiKey)); var imageClient = azureClient.GetImageClient(model); #pragma warning disable MEAI001 // Type is for evaluation purposes only. IImageGenerator generator = imageClient.AsIImageGenerator();Предыдущий код:
- Загружает конфигурацию из секретов пользователя.
- Создает
ImageClientс помощью OpenAI SDK. - Преобразует
ImageClientвIImageGeneratorс использованием метода расширения AsIImageGenerator(ImageClient).
Добавьте следующий код для реализации базового создания текста в изображение:
// Generate an image from a text prompt var options = new ImageGenerationOptions { MediaType = "image/png" }; string prompt = "A tennis court in a jungle"; var response = await generator.GenerateImagesAsync(prompt, options); // Save the image to a file. var dataContent = response.Contents.OfType<DataContent>().First(); string fileName = SaveImage(dataContent, "jungle-tennis.png"); Console.WriteLine($"Image saved to file: {fileName}"); static string SaveImage(DataContent content, string fileName) { string userDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); var path = Path.Combine(userDirectory, fileName); File.WriteAllBytes(path, content.Data.ToArray()); return Path.GetFullPath(path); }Предыдущий код:
- Задает запрошенный тип файла изображения по параметру ImageGenerationOptions.MediaType.
- Создает изображение с помощью GenerateImagesAsync(IImageGenerator, String, ImageGenerationOptions, CancellationToken) метода с текстовым запросом.
- Сохраняет созданный образ в файл в локальном каталоге пользователя.
Запустите приложение с помощью интегрированной среды разработки или с помощью
dotnet run.Приложение создает изображение и выводит путь к файлу изображения. Откройте файл для просмотра созданного изображения. На следующем рисунке показан один пример созданного изображения.
Настройка параметров создания изображений
Вы можете настроить создание изображений, предоставив другие параметры, такие как размер, формат отклика и количество создаваемых изображений. Класс ImageGenerationOptions позволяет указать:
- AdditionalProperties: Опции, специфичные для поставщика.
- Count: количество генерируемых изображений.
- ImageSize: размеры созданного изображения в виде System.Drawing.Size. Сведения о поддерживаемых размерах см. в справочнике по API OpenAI.
- MediaType: тип носителя (MIME) созданного образа.
- ModelId: идентификатор модели.
- RawRepresentationFactory: обратный вызов, который создает необработанное представление параметров создания изображений из базовой реализации.
- ResponseFormat: Параметры — Uri, Data и Hosted.
Использование интеграции размещения
При создании веб-приложений или размещенных служб можно интегрировать генерацию изображений с помощью внедрения зависимостей и шаблонов размещения. Этот подход обеспечивает лучшее управление жизненным циклом, интеграцию конфигурации и возможность тестирования.
Настройка служб размещения
Пакет Aspire.Azure.AI.OpenAI предоставляет методы расширения для регистрации сервисов Azure OpenAI в контейнере внедрения зависимостей вашего приложения.
Добавьте необходимые пакеты в веб-приложение:
dotnet add package Aspire.Azure.AI.OpenAI --prerelease dotnet add package Azure.AI.OpenAI dotnet add package Microsoft.Extensions.AI.OpenAI --prereleaseНастройте клиент Azure OpenAI и генератор образов в
Program.csфайле:using Aspire.Azure.AI.OpenAI; using Microsoft.Extensions.AI; using OpenAI; WebApplicationBuilder builder = WebApplication.CreateBuilder(args); // Add the Azure OpenAI client using hosting integration. AspireAzureOpenAIClientBuilder openai = builder.AddAzureOpenAIClient("openai");Метод AddAzureOpenAIClient(IHostApplicationBuilder, String, Action<AzureOpenAISettings>, Action<IAzureClientBuilder<AzureOpenAIClient,AzureOpenAIClientOptions>>) регистрирует клиент Azure OpenAI при помощи внедрения зависимостей. Строка подключения (именованная
"openai") извлекается из файла конфигурации, обычно изappsettings.jsonили переменных среды.{ "ConnectionStrings": { "openai": "Endpoint=https://your-resource-name.openai.azure.com/;Key=your-api-key" } }Зарегистрируйте службу с внедрением IImageGenerator зависимостей:
// Register the image generator with dependency injection. ImageGeneratorBuilder imageBuilder = builder.Services.AddImageGenerator(services => { OpenAIClient openAiClient = services.GetRequiredService<OpenAIClient>(); OpenAI.Images.ImageClient imageClient = openAiClient.GetImageClient("gpt-image-1"); #pragma warning disable MEAI001 // Type is for evaluation purposes only. return imageClient.AsIImageGenerator(); #pragma warning restore MEAI001 });Метод AddImageGenerator регистрирует генератор образов в виде единой службы, которая может быть внедрена в контроллеры, службы или минимальные конечные точки API.
Добавление параметров и ведения журнала::
imageBuilder.ConfigureOptions(options => { options.MediaType = "image/png"; }).UseLogging();Предыдущий код:
- Настраивает параметры путем вызова ConfigureOptions(ImageGeneratorBuilder, Action<ImageGenerationOptions>) метода расширения в объекте ImageGeneratorBuilder. Этот метод настраивает ImageGenerationOptions, передаваемый к следующему генератору в конвейере.
- Добавляет логирование в конвейер генератора изображений, вызывая метод расширения UseLogging(ImageGeneratorBuilder, ILoggerFactory, Action<LoggingImageGenerator>).
Использование генератора образов в конечных точках
После регистрации вы можете вливать IImageGenerator в ваши конечные точки или службы.
// Use the image generator in an endpoint.
app.MapPost("/generate-image", async (IImageGenerator generator, string prompt) =>
{
ImageGenerationResponse response = await generator.GenerateImagesAsync(prompt);
DataContent dataContent = response.Contents.OfType<DataContent>().First();
return Results.File(dataContent.Data.ToArray(), dataContent.MediaType);
});
Этот подход к размещению обеспечивает несколько преимуществ:
- Управление конфигурацией. Строки подключения и параметры управляются системой конфигурации .NET.
- Внедрение зависимостей: генератор образов доступен во всем приложении через DI.
- Управление жизненным циклом: службы правильно инициализируются и освобождаются инфраструктурой размещения.
- Тестируемость: реализации макетов можно легко заменить на тестирование.
-
Интеграция с .NET Aspire: при использовании .NET Aspire
AddAzureOpenAIClientметод интегрируется с обнаружением служб и телеметрией.
Лучшие практики
При реализации создания текста в изображениях в приложениях следует учитывать следующие рекомендации.
- Проектирование запроса: написание четких, подробных запросов, описывающих нужный образ. Включите конкретные сведения о стиле, композиции, цветах и элементах.
- Управление затратами: создание образов может быть дорогостоящим. Кэшируйте результаты, когда это возможно, и реализуйте ограничение скорости для контроля затрат.
- Безопасность содержимого: всегда обеспечьте просмотр созданных изображений на соответствие содержимому, особенно в производственных приложениях. Рассмотрите возможность реализации фильтрации содержимого и модерации.
- Взаимодействие с пользователем: создание изображений может занять несколько секунд. Предоставьте индикаторы хода выполнения и грамотно обрабатывайте таймауты.
- Юридические рекомендации. Помните о правах лицензирования и использования для созданных образов. Просмотрите условия обслуживания для поставщика ИИ.
Очистите ресурсы
Если ресурс Azure OpenAI больше не нужен, удалите его, чтобы избежать расходов:
- На портале Azure перейдите к ресурсу Azure OpenAI.
- Выберите ресурс и нажмите кнопку "Удалить".
Дальнейшие шаги
Вы успешно создали несколько различных изображений с помощью интерфейса IImageGenerator в Microsoft.Extensions.AI. Далее можно изучить некоторые из дополнительных функций, включая:
- Уточнение созданного изображения итеративно.
- Редактирование существующего изображения.
- Персонализация изображения, схемы или темы.