Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym szybkim starcie użyjesz biblioteki Microsoft.Extensions.AI (MEAI), aby wygenerować obrazy na podstawie poleceń tekstowych przy użyciu modelu AI. Funkcje interfejsu MEAI text-to-image umożliwiają generowanie obrazów na podstawie monitów języka naturalnego lub istniejących obrazów przy użyciu spójnej i rozszerzalnej powierzchni interfejsu API.
Interfejs IImageGenerator udostępnia ujednolicony, rozszerzalny interfejs API do pracy z różnymi usługami generowania obrazów, co ułatwia integrowanie funkcji tekst-obraz z aplikacjami platformy .NET. Interfejs obsługuje:
- Generowanie tekstu do obrazu.
- Kompozycja potoku z zastosowaniem middleware (rejestrowanie, telemetria, buforowanie).
- Elastyczne opcje konfiguracji.
- Obsługa wielu dostawców sztucznej inteligencji.
Uwaga / Notatka
Interfejs IImageGenerator jest obecnie oznaczony jako eksperymentalny z identyfikatorem diagnostycznym MEAI001 . Może być konieczne pominięcie tego ostrzeżenia w pliku lub kodzie projektu.
Wymagania wstępne
- Zestaw .NET 8.0 SDK lub nowszy — Zainstaluj zestaw .NET 8 SDK.
- Subskrypcja platformy Azure — utwórz bezpłatnie.
- Interfejs wiersza polecenia dla deweloperów platformy Azure (opcjonalnie) — instalowanie lub aktualizowanie interfejsu wiersza polecenia dewelopera platformy Azure.
Konfigurowanie usługi sztucznej inteligencji
Aby aprowizować usługę Azure OpenAI i model przy użyciu witryny Azure Portal, wykonaj kroki opisane w artykule Tworzenie i wdrażanie zasobu usługi Azure OpenAI Service. W kroku "Wdrażanie modelu" wybierz gpt-image-1 model.
Uwaga / Notatka
gpt-image-1 jest nowszym modelem, który oferuje kilka ulepszeń nad DALL-E 3. Jest dostępna od OpenAI w ograniczonym zakresie; można ubiegać się o dostęp za pomocą tego formularza.
Tworzenie aplikacji
Wykonaj poniższe kroki, aby utworzyć aplikację konsolową platformy .NET, która generuje obrazy na podstawie monitów tekstowych.
Utwórz nową aplikację konsolową:
dotnet new console -o TextToImageAIPrzejdź do katalogu
TextToImageAIi dodaj niezbędne pakiety do aplikacji: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.UserSecretsUruchom następujące polecenia, aby dodać tajne informacje aplikacji dla punktu końcowego usługi Azure OpenAI, nazwy modelu i klucza 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>Otwórz nową aplikację w wybranym edytorze (na przykład Visual Studio).
Implementowanie podstawowego generowania obrazów
Zaktualizuj plik
Program.csza pomocą następującego kodu, aby pobrać dane konfiguracji i utworzyć 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();Poprzedni kod:
- Ładuje konfigurację z tajnych danych użytkownika.
- Tworzy element
ImageClientna podstawie zestawu OpenAI SDK. - Konwertuje element
ImageClientnaIImageGeneratorprzy użyciu AsIImageGenerator(ImageClient) metody rozszerzenia.
Dodaj następujący kod, aby zaimplementować podstawowe generowanie tekstu do obrazu:
// 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); }Poprzedni kod:
- Ustawia żądany typ pliku obrazu, ustawiając wartość ImageGenerationOptions.MediaType.
- Generuje obraz przy użyciu GenerateImagesAsync(IImageGenerator, String, ImageGenerationOptions, CancellationToken) metody z monitem tekstowym.
- Zapisuje wygenerowany obraz w pliku w katalogu użytkownika lokalnego.
Uruchom aplikację za pośrednictwem środowiska IDE lub za pomocą polecenia
dotnet run.Aplikacja generuje obraz i generuje ścieżkę pliku do obrazu. Otwórz plik, aby wyświetlić wygenerowany obraz. Na poniższej ilustracji przedstawiono jeden przykład wygenerowanego obrazu.
Konfigurowanie opcji generowania obrazów
Generowanie obrazu można dostosować, udostępniając inne opcje, takie jak rozmiar, format odpowiedzi i liczba obrazów do wygenerowania. Klasa ImageGenerationOptions umożliwia określenie:
- AdditionalProperties: opcje specyficzne dla dostawcy.
- Count: liczba obrazów do wygenerowania.
- ImageSize: wymiary wygenerowanego obrazu jako System.Drawing.Size. Aby uzyskać informacje o obsługiwanych rozmiarach, sprawdź dokumentację interfejsu API OpenAI.
- MediaType: typ nośnika (typ MIME) wygenerowanego obrazu.
- ModelId: identyfikator modelu.
- RawRepresentationFactory: wywołanie zwrotne, które tworzy nieprzetworzone reprezentacje opcji generowania obrazów na podstawie podstawowej implementacji.
- ResponseFormat: Opcje to Uri, Data, i Hosted.
Korzystanie z integracji hostingu
Podczas tworzenia aplikacji internetowych lub hostowanych usług można zintegrować generowanie obrazów przy użyciu wstrzykiwania zależności i wzorców hostingu. Takie podejście zapewnia lepsze zarządzanie cyklem życia, integrację konfiguracji i możliwość testowania.
Konfigurowanie usług hostingu
Pakiet Aspire.Azure.AI.OpenAI udostępnia metody rozszerzające do rejestrowania usług Azure OpenAI w kontenerze wstrzykiwania zależności Twojej aplikacji.
Dodaj niezbędne pakiety do aplikacji internetowej:
dotnet add package Aspire.Azure.AI.OpenAI --prerelease dotnet add package Azure.AI.OpenAI dotnet add package Microsoft.Extensions.AI.OpenAI --prereleaseSkonfiguruj klienta usługi Azure OpenAI i generator obrazów w swoim pliku
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");Metoda AddAzureOpenAIClient(IHostApplicationBuilder, String, Action<AzureOpenAISettings>, Action<IAzureClientBuilder<AzureOpenAIClient,AzureOpenAIClientOptions>>) rejestruje klienta usługi Azure OpenAI za pomocą iniekcji zależności. Ciąg połączenia (o nazwie
"openai") jest pobierany z konfiguracji, zazwyczaj zappsettings.jsonlub zmiennych środowiskowych.{ "ConnectionStrings": { "openai": "Endpoint=https://your-resource-name.openai.azure.com/;Key=your-api-key" } }Zarejestruj usługę za pomocą IImageGenerator iniekcji zależności:
// 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 });Metoda AddImageGenerator rejestruje generator obrazów jako pojedynczą usługę, którą można wstrzykiwać do kontrolerów, usług lub minimalnych punktów końcowych interfejsu API.
Dodaj opcje i rejestrowanie::
imageBuilder.ConfigureOptions(options => { options.MediaType = "image/png"; }).UseLogging();Poprzedni kod:
- Konfiguruje opcje za pomocą wywołania metody rozszerzenia ConfigureOptions(ImageGeneratorBuilder, Action<ImageGenerationOptions>) na ImageGeneratorBuilder. Metoda ta konfiguruje ImageGenerationOptions, aby został przekazany do następnego generatora w potoku.
- Dodaje rejestrowanie do potoku generatora obrazów za pomocą wywołania UseLogging(ImageGeneratorBuilder, ILoggerFactory, Action<LoggingImageGenerator>) metody rozszerzenia.
Używanie generatora obrazów w punktach dostępu
Po zarejestrowaniu możesz wstrzyknąć IImageGenerator do punktów końcowych lub usług:
// 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);
});
Takie podejście hostingowe zapewnia kilka korzyści:
- Zarządzanie konfiguracją: parametry połączenia i ustawienia są zarządzane za pośrednictwem systemu konfiguracji platformy .NET.
- Wstrzykiwanie zależności: generator obrazów jest dostępny w całej aplikacji za pośrednictwem Dependency Injection.
- Zarządzanie cyklem życia: usługi są prawidłowo inicjowane i usuwane przez infrastrukturę hostingu.
- Możliwość testowania: implementacje makiety można łatwo zastąpić do testowania.
-
Integracja z platformą .NET Aspire: w przypadku korzystania z platformy .NET Aspire
AddAzureOpenAIClientmetoda integruje się z odnajdywaniem usług i telemetrią.
Najlepsze rozwiązania
Podczas implementowania generowania tekstu do obrazu w aplikacjach należy wziąć pod uwagę następujące najlepsze rozwiązania:
- Inżynieria podpowiedzi: Napisz jasne, szczegółowe podpowiedzi opisujące pożądany obraz. Uwzględnij szczegółowe informacje o stylu, kompozycji, kolorach i elementach.
- Zarządzanie kosztami: generowanie obrazów może być kosztowne. Buforuj wyniki, gdy jest to możliwe i zaimplementuj ograniczanie szybkości w celu kontrolowania kosztów.
- Bezpieczeństwo zawartości: zawsze sprawdzaj wygenerowane obrazy pod kątem odpowiedniej zawartości, szczególnie w aplikacjach produkcyjnych. Rozważ zaimplementowanie filtrowania zawartości i moderowania.
- Środowisko użytkownika: generowanie obrazów może potrwać kilka sekund. Zapewnij wskaźniki postępu i elegancko obsłuż limity czasu.
- Zagadnienia prawne: Należy pamiętać o licencjach i prawach użytkowania do wygenerowanych obrazów. Zapoznaj się z warunkami świadczenia usługi dla dostawcy sztucznej inteligencji.
Uprzątnij zasoby
Jeśli zasób usługi Azure OpenAI nie jest już potrzebny, usuń go, aby uniknąć naliczania opłat:
- W witrynie Azure Portal przejdź do zasobu Azure OpenAI.
- Wybierz zasób, a następnie wybierz pozycję Usuń.
Dalsze kroki
Pomyślnie wygenerowano kilka różnych obrazów przy użyciu interfejsu IImageGenerator w pliku Microsoft.Extensions.AI. Następnie możesz zapoznać się z niektórymi dodatkowymi funkcjami, takimi jak:
- Udoskonalanie wygenerowanego obrazu iteracyjnie.
- Edytowanie istniejącego obrazu.
- Personalizowanie obrazu, diagramu lub motywu.