Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Neste início rápido, você usa a Microsoft.Extensions.AI biblioteca (MEAI) para gerar imagens a partir de prompts de texto usando um modelo de IA. Os recursos de conversão de texto em imagem do MEAI permitem gerar imagens a partir de prompts de linguagem natural ou imagens existentes usando uma superfície de API consistente e extensível.
A IImageGenerator interface fornece uma API unificada e extensível para trabalhar com vários serviços de geração de imagem, facilitando a integração de recursos de conversão de texto em imagem em seus aplicativos .NET. A interface suporta:
- Geração de texto para imagem.
- A composição do pipeline com middleware (registo, telemetria, cache).
- Opções de configuração flexíveis.
- Suporte para vários provedores de IA.
Observação
A interface IImageGenerator está atualmente marcada como experimental com o ID de diagnóstico MEAI001. Talvez seja necessário suprimir esse aviso no arquivo ou código do projeto.
Pré-requisitos
- SDK do .NET 8.0 ou superior - Instale o SDK do .NET 8.
- Uma assinatura do Azure - Crie uma gratuitamente.
- CLI do Desenvolvedor do Azure (opcional) - Instalar ou atualizar a CLI do Desenvolvedor do Azure.
Configurar o serviço de IA
Para provisionar um serviço e um modelo do Azure OpenAI usando o portal do Azure, conclua as etapas no artigo Criar e implantar um recurso do Serviço OpenAI do Azure. Na etapa "Implantar um modelo", selecione o modelo gpt-image-1.
Observação
gpt-image-1 é um modelo mais recente que oferece várias melhorias em relação ao DALL-E 3. Está disponível na OpenAI de forma limitada; Solicite acesso com este formulário.
Criar o aplicativo
Conclua as etapas a seguir para criar um aplicativo de console .NET que gera imagens a partir de prompts de texto.
Crie um novo aplicativo de console:
dotnet new console -o TextToImageAINavegue até o diretório
TextToImageAIe adicione os pacotes necessários ao seu aplicativo: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.UserSecretsExecute os seguintes comandos para adicionar segredos de aplicativo para seu ponto de extremidade do Azure OpenAI, nome do modelo e chave de 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>Abra o novo aplicativo no editor de sua escolha (por exemplo, Visual Studio).
Implementar a geração básica de imagens
Atualize o
Program.csarquivo com o seguinte código para obter os dados de configuração e criar o 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();O código anterior:
- Carrega configuração a partir de segredos do utilizador.
- Cria um
ImageClienta partir do OpenAI SDK. - Converte o
ImageClientem umIImageGeneratorusando o AsIImageGenerator(ImageClient) método de extensão.
Adicione o seguinte código para implementar a geração básica de texto para imagem:
// 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); }O código anterior:
- Define o tipo de arquivo de imagem solicitado pela configuração ImageGenerationOptions.MediaType.
- Gera uma imagem usando o GenerateImagesAsync(IImageGenerator, String, ImageGenerationOptions, CancellationToken) método com um prompt de texto.
- Salva a imagem gerada em um arquivo no diretório do usuário local.
Execute a aplicação, através da IDE ou usando
dotnet run.A aplicação gera uma imagem e fornece o caminho do ficheiro da imagem. Abra o arquivo para visualizar a imagem gerada. A imagem a seguir mostra um exemplo de uma imagem gerada.
Configurar opções de geração de imagem
Você pode personalizar a geração de imagens fornecendo outras opções, como tamanho, formato de resposta e número de imagens a serem geradas. A ImageGenerationOptions classe permite especificar:
- AdditionalProperties: Opções específicas do provedor.
- Count: O número de imagens a gerar.
- ImageSize: As dimensões da imagem gerada como um System.Drawing.Size. Para obter os tamanhos suportados, consulte a referência da API OpenAI.
- MediaType: O tipo de mídia (tipo MIME) da imagem gerada.
- ModelId: O ID do modelo.
- RawRepresentationFactory: O callback que cria a representação bruta das opções de geração de imagem a partir de uma implementação de base.
- ResponseFormat: As opções são Uri, Datae Hosted.
Utilize a integração de alojamento
Quando constrói aplicações web ou serviços alojados, pode integrar a geração de imagens usando injeção de dependências e padrões de alojamento. Esta abordagem proporciona melhor gestão do ciclo de vida, integração de configuração e capacidade de testabilidade.
Configurar serviços de alojamento
O Aspire.Azure.AI.OpenAI pacote fornece métodos de extensão para registar serviços Azure OpenAI no contentor de injeção de dependências da sua aplicação:
Adicione os pacotes necessários à sua aplicação web:
dotnet add package Aspire.Azure.AI.OpenAI --prerelease dotnet add package Azure.AI.OpenAI dotnet add package Microsoft.Extensions.AI.OpenAI --prereleaseConfigure o cliente Azure OpenAI e o gerador de imagens no seu
Program.csficheiro: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");O AddAzureOpenAIClient(IHostApplicationBuilder, String, Action<AzureOpenAISettings>, Action<IAzureClientBuilder<AzureOpenAIClient,AzureOpenAIClientOptions>>) método regista o cliente Azure OpenAI com injeção de dependências. A cadeia de ligação (chamada
"openai") é recuperada da configuração, normalmente deappsettings.jsonou variáveis de ambiente:{ "ConnectionStrings": { "openai": "Endpoint=https://your-resource-name.openai.azure.com/;Key=your-api-key" } }Registe o IImageGenerator serviço com injeção de dependência:
// 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 });O AddImageGenerator método regista o gerador de imagens como um serviço singleton que pode ser injetado em controladores, serviços ou endpoints mínimos da API.
Adicionar opções e registo:
imageBuilder.ConfigureOptions(options => { options.MediaType = "image/png"; }).UseLogging();O código anterior:
- Configura opções chamando o método de extensão ConfigureOptions(ImageGeneratorBuilder, Action<ImageGenerationOptions>) no ImageGeneratorBuilder. Este método configura o ImageGenerationOptions a ser passado para o gerador seguinte no pipeline.
- Adiciona logging ao pipeline do gerador de imagens ao chamar o método de extensão UseLogging(ImageGeneratorBuilder, ILoggerFactory, Action<LoggingImageGenerator>).
Use o gerador de imagens nos endpoints
Depois de registado, pode injetar IImageGenerator nos seus endpoints ou serviços:
// 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);
});
Esta abordagem de alojamento oferece vários benefícios:
- Gestão de configuração: As strings de ligação e definições são geridas através do sistema de configuração .NET.
- Injeção de dependências: O gerador de imagens está disponível em toda a sua aplicação via DI.
- Gestão do ciclo de vida: Os serviços são devidamente inicializados e eliminados pela infraestrutura de alojamento.
- Testabilidade: Implementações simuladas podem ser facilmente substituídas por testes.
-
Integração com .NET Aspire: Ao usar .NET Aspire, o
AddAzureOpenAIClientmétodo integra-se com a descoberta de serviços e telemetria.
Melhores práticas
Ao implementar a geração de texto para imagem em seus aplicativos, considere estas práticas recomendadas:
- Engenharia de prompts: escreva prompts claros e detalhados que descrevam a imagem desejada. Inclua detalhes específicos sobre estilo, composição, cores e elementos.
- Gestão de custos: A geração de imagens pode ser cara. Armazene os resultados em cache quando possível e implemente o limite de taxa para controlar os custos.
- Segurança de conteúdo: sempre revise as imagens geradas em busca de conteúdo apropriado, especialmente em aplicativos de produção. Considere a implementação de filtragem e moderação de conteúdo.
- Experiência do usuário: a geração de imagens pode levar vários segundos. Forneça indicadores de progresso e lide com tempos limite de forma eficaz.
- Considerações legais: Esteja ciente dos direitos de licenciamento e uso das imagens geradas. Analise os termos de serviço do seu provedor de IA.
Limpeza de recursos
Quando você não precisar mais do recurso OpenAI do Azure, exclua-o para evitar incorrer em encargos:
- No Portal do Azure, navegue até seu recurso do Azure OpenAI.
- Selecione o recurso e, em seguida, selecione Excluir.
Próximos passos
Você gerou com sucesso algumas imagens diferentes usando a IImageGenerator interface em Microsoft.Extensions.AI. Em seguida, você pode explorar algumas das funcionalidades adicionais, incluindo:
- Refinar a imagem gerada iterativamente.
- Editar uma imagem existente.
- Personalizar uma imagem, diagrama ou tema.