Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze quickstart gebruikt u de Microsoft.Extensions.AI bibliotheek (MEAI) om afbeeldingen te genereren op basis van tekstprompts met behulp van een AI-model. Met de mogelijkheden voor tekst-naar-afbeelding van MEAI kunt u afbeeldingen genereren op basis van prompts in natuurlijke taal of bestaande afbeeldingen met behulp van een consistent en uitbreidbaar API-oppervlak.
De IImageGenerator interface biedt een geïntegreerde, uitbreidbare API voor het werken met verschillende services voor het genereren van afbeeldingen, waardoor u eenvoudig tekst-naar-afbeeldingsmogelijkheden kunt integreren in uw .NET-apps. De interface ondersteunt:
- Genereren van tekst naar afbeelding.
- Pijplijnsamenstelling met middleware (logboekregistratie, telemetrie, caching).
- Flexibele configuratieopties.
- Ondersteuning voor meerdere AI-providers.
Opmerking
De IImageGenerator interface is momenteel gemarkeerd als experimenteel met de MEAI001 diagnostische id. Mogelijk moet u deze waarschuwing onderdrukken in uw projectbestand of code.
Vereiste voorwaarden
- .NET 8.0 SDK of hoger - Installeer de .NET 8 SDK.
- Een Azure-abonnement: maak er gratis een.
- Azure Developer CLI (optioneel): de Azure Developer CLI-installeren of bijwerken.
De AI-service configureren
Als u een Azure OpenAI-service en -model wilt inrichten met behulp van Azure Portal, voert u de stappen in het Een Azure OpenAI-serviceresource maken en implementeren artikel uit. Selecteer in de stap Een model implementeren het gpt-image-1 model.
Opmerking
gpt-image-1 is een nieuwer model dat verschillende verbeteringen biedt ten opzichte van DALL-E 3. Het is op beperkte basis beschikbaar vanuit OpenAI; aanvragen voor toegang met dit formulier.
De toepassing maken
Voer de volgende stappen uit om een .NET-consoletoepassing te maken waarmee afbeeldingen worden gegenereerd op basis van tekstprompts.
Maak een nieuwe consoletoepassing:
dotnet new console -o TextToImageAIGa naar de map
TextToImageAIen voeg de benodigde pakketten toe aan uw app: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.UserSecretsVoer de volgende opdrachten uit om app-geheimen toe te voegen voor uw Azure OpenAI-eindpunt, modelnaam en API-sleutel:
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>Open de nieuwe app in uw gewenste editor (bijvoorbeeld Visual Studio).
Eenvoudige beeldgeneratie implementeren
Werk het
Program.csbestand bij met de volgende code om de configuratiegegevens op te halen en het AzureOpenAIClientvolgende te maken: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();De voorgaande code:
- Laadt de configuratie van gebruikersgeheimen.
- Hiermee wordt een
ImageClientgemaakt van de OpenAI SDK. - Converteert de
ImageClientnaar eenIImageGeneratormet behulp van de AsIImageGenerator(ImageClient) extensiemethode.
Voeg de volgende code toe om eenvoudige generatie van tekst-naar-afbeelding te implementeren:
// 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); }De voorgaande code:
- Hiermee stelt u het aangevraagde afbeeldingsbestandstype in met ImageGenerationOptions.MediaType.
- Hiermee wordt een afbeelding gegenereerd met behulp van de GenerateImagesAsync(IImageGenerator, String, ImageGenerationOptions, CancellationToken) methode met een tekstprompt.
- Slaat de gegenereerde afbeelding op in een bestand in de lokale gebruikersmap.
Voer de toepassing uit via de IDE of met behulp van
dotnet run.De toepassing genereert een afbeelding en voert het bestandspad naar de afbeelding uit. Open het bestand om de gegenereerde afbeelding weer te geven. In de volgende afbeelding ziet u een voorbeeld van een gegenereerde afbeelding.
Opties voor het genereren van afbeeldingen configureren
U kunt het genereren van afbeeldingen aanpassen door andere opties op te geven, zoals grootte, antwoordindeling en het aantal afbeeldingen dat moet worden gegenereerd. Met de ImageGenerationOptions klasse kunt u het volgende opgeven:
- AdditionalProperties: Providerspecifieke opties.
- Count: het aantal afbeeldingen dat moet worden gegenereerd.
- ImageSize: De afmetingen van de gegenereerde afbeelding als een System.Drawing.Size. Zie de OpenAI API-verwijzing voor ondersteunde grootten.
- MediaType: Het mediatype (MIME-type) van de gegenereerde afbeelding.
- ModelId: de model-id.
- RawRepresentationFactory: De callback waarmee de onbewerkte weergave van de opties voor het genereren van afbeeldingen wordt gemaakt op basis van een onderliggende implementatie.
- ResponseFormat: Opties zijn Uri, Dataen Hosted.
Hostingintegratie gebruiken
Wanneer u web-apps of gehoste services bouwt, kunt u het genereren van afbeeldingen integreren met behulp van afhankelijkheidsinjectie- en hostingpatronen. Deze aanpak biedt een beter levenscyclusbeheer, configuratie-integratie en testbaarheid.
Hostingservices configureren
Het Aspire.Azure.AI.OpenAI pakket biedt uitbreidingsmethoden voor het registreren van Azure OpenAI-services met de container voor afhankelijkheidsinjectie van uw toepassing:
Voeg de benodigde pakketten toe aan uw webtoepassing:
dotnet add package Aspire.Azure.AI.OpenAI --prerelease dotnet add package Azure.AI.OpenAI dotnet add package Microsoft.Extensions.AI.OpenAI --prereleaseConfigureer de Azure OpenAI-client en afbeeldingsgenerator in uw
Program.csbestand: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");De AddAzureOpenAIClient(IHostApplicationBuilder, String, Action<AzureOpenAISettings>, Action<IAzureClientBuilder<AzureOpenAIClient,AzureOpenAIClientOptions>>) methode registreert de Azure OpenAI-client met afhankelijkheidsinjectie. De verbindingsreeks (benoemd
"openai") wordt opgehaald uit de configuratie, meestal uitappsettings.jsonof omgevingsvariabelen:{ "ConnectionStrings": { "openai": "Endpoint=https://your-resource-name.openai.azure.com/;Key=your-api-key" } }Registreer de IImageGenerator service met afhankelijkheidsinjectie:
// 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 });De AddImageGenerator methode registreert de image generator als een singleton service die kan injecteren in controllers, services of minimale API-eindpunten.
Opties en logboekregistratie toevoegen::
imageBuilder.ConfigureOptions(options => { options.MediaType = "image/png"; }).UseLogging();De voorgaande code:
- Hiermee configureert u opties door de ConfigureOptions(ImageGeneratorBuilder, Action<ImageGenerationOptions>) extensiemethode aan te roepen op de ImageGeneratorBuilder. Met deze methode wordt de ImageGenerationOptions geconfigureerd om te worden doorgegeven aan de volgende generator in de pijplijn.
- Hiermee voegt u logboekregistratie toe aan de pijplijn van de afbeeldingengenerator door de UseLogging(ImageGeneratorBuilder, ILoggerFactory, Action<LoggingImageGenerator>)-extensiemethode aan te roepen.
Gebruik de afbeeldingengenerator in eindpunten
Zodra u zich geregistreerd hebt, kunt u IImageGenerator toevoegen aan uw eindpunten of services.
// 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);
});
Deze hostingbenadering biedt verschillende voordelen:
- Configuratiebeheer: verbindingsreeksen en -instellingen worden beheerd via het .NET-configuratiesysteem.
- Afhankelijkheidsinjectie: De afbeeldingengenerator is beschikbaar in uw applicatie via DI.
- Levenscyclusbeheer: Services worden correct geïnitialiseerd en verwijderd door de hostinginfrastructuur.
- Testbaarheid: Mock-implementaties kunnen eenvoudig worden vervangen door tests.
-
Integratie met .NET Aspire: Wanneer u .NET Aspire gebruikt, kan de
AddAzureOpenAIClientmethode worden geïntegreerd met servicedetectie en telemetrie.
Beste praktijken
Houd bij het implementeren van het genereren van tekst-naar-afbeelding in uw toepassingen rekening met de volgende aanbevolen procedures:
- Prompt engineering: schrijf duidelijke, gedetailleerde prompts die de gewenste afbeelding beschrijven. Voeg specifieke details toe over stijl, samenstelling, kleuren en elementen.
- Kostenbeheer: het genereren van afbeeldingen kan duur zijn. Cacheresultaten indien mogelijk en implementeer snelheidsbeperking om kosten te beheren.
- Inhoudsveiligheid: Bekijk altijd gegenereerde afbeeldingen voor de juiste inhoud, met name in productietoepassingen. Overweeg om inhoudsfilters en toezicht te implementeren.
- Gebruikerservaring: het genereren van afbeeldingen kan enkele seconden duren. Geef voortgangsindicatoren op en handel time-outs soepel af.
- Juridische overwegingen: houd rekening met licentie- en gebruiksrechten voor gegenereerde afbeeldingen. Bekijk de servicevoorwaarden voor uw AI-provider.
De hulpbronnen opschonen
Wanneer u de Azure OpenAI-resource niet meer nodig hebt, verwijdert u deze om kosten te voorkomen:
- Navigeer in Azure Portal naar uw Azure OpenAI-resource.
- Selecteer de resource en selecteer Verwijderen.
Volgende stappen
U hebt een aantal verschillende afbeeldingen gegenereerd met behulp van de IImageGenerator interface in Microsoft.Extensions.AI. Vervolgens kunt u enkele van de aanvullende functionaliteit verkennen, waaronder:
- De gegenereerde afbeelding iteratief verfijnen.
- Een bestaande afbeelding bewerken.
- Een afbeelding, diagram of thema aanpassen.