Uma biblioteca de integração DALL·E para .NET
Nota A versão atual da biblioteca requer um recurso DALL·E 3. Se você quiser usar o DALL·E 2, consulte esta versão.
A biblioteca está disponível no NuGet. Basta procurar DallENet na GUI do Gerenciador de Pacotes ou executar o seguinte comando na CLI do .NET :
dotnet add package DallENet
Registre o serviço DALL·E na inicialização do aplicativo:
builder . Services . AddDallE ( options =>
{
// Azure OpenAI Service.
options . UseAzure ( resourceName : "" , apiKey : "" , authenticationType : AzureAuthenticationType . ApiKey ) ;
options . DefaultSize = DallEImageSizes . _1792x1024 ; // Default: 1024x1024
options . DefaultQuality = DallEImageQualities . HD ; // Default: Standard
options . DefaultStyle = DallEImageStyles . Natural ; // Default: Vivid
options . DefaultResponseFormat = DallEImageResponseFormats . Url ; // Default: Url
} ) ;
Atualmente, a DallENet oferece suporte apenas ao serviço Azure OpenAI. O suporte para OpenAI será adicionado em uma versão futura. Os parâmetros de configuração necessários são os seguintes:
DALL·E 3 é capaz de gerar imagens em diferentes resoluções:
Utilizando a propriedade DefaultSize é possível especificar o tamanho padrão da imagem, a menos que você passe um valor explícito nos métodos GenerateImageAsync ou GetImageStreamAsync . A resolução padrão é 1024x1024.
O DALL·E 3 é capaz de gerar imagens em qualidade padrão ou HD, ou seja, com detalhes mais finos e maior consistência em toda a imagem. Utilizando a propriedade DefaultQuality é possível especificar a qualidade padrão, a menos que você passe um valor explícito nos métodos GenerateImageAsync ou GetImageStreamAsync . A qualidade padrão é Padrão .
DALL·E 3 é capaz de gerar imagens usando um estilo vívido e natural:
Utilizando a propriedade DefaultStyle é possível especificar o estilo padrão, a menos que você passe um valor explícito nos métodos GenerateImageAsync ou GetImageStreamAsync . O estilo padrão é Vívido .
DALL·E 3 é capaz de retornar a URL da imagem gerada de sua codificação Base64. Utilizando a propriedade DefaultResponseFormat é possível especificar a qualidade padrão, a menos que você passe um valor explícito nos métodos GenerateImageAsync ou GetImageStreamAsync . A qualidade padrão é Url .
A configuração pode ser lida automaticamente em IConfiguration, usando, por exemplo, uma seção DallE no arquivo appsettings.json :
"DallE" : {
"Provider" : "Azure" , // Optional. Currently only Azure is supported
"ApiKey" : "" , // Required
"ResourceName" : "" , // Required
"ApiVersion" : "2023-12-01-preview" , // Optional, used only by Azure OpenAI Service. Allowed values: 2023-12-01-preview (default)
"AuthenticationType" : "ApiKey" , // Optional, Allowed values: ApiKey (default) or ActiveDirectory
"DefaultModel" : "dall-e-3" , // Required
"DefaultSize" : "1792x1024" , // Optional, Allowed values: 1024x1024 (default), 1792x1024 or 1024x1792
"DefaultQuality" : "standard" , // Optional, Allowed values: standard (default) or hd
"DefaultResponseFormat" : "url" , // Optional, Allowed values: url (default) or b64_json
"DefaultStyle" : "vivid" , // Optional, Allowed values: natural (default), or vivid
"ThrowExceptionOnError" : true
//"User": "UserName" // Optional
}
E então use a sobrecarga correspondente do método AddDallE :
// Adds DALL·E service using settings from IConfiguration.
builder . Services . AddDallE ( builder . Configuration ) ;
O método AddDallE também possui uma sobrecarga que aceita um IServiceProvider como argumento. Pode ser usado, por exemplo, se estivermos em uma API Web e precisarmos suportar cenários em que cada usuário possui uma chave de API diferente que pode ser recuperada acessando um banco de dados via Injeção de Dependência:
builder . Services . AddDallE ( ( services , options ) =>
{
var accountService = services . GetRequiredService < IAccountService > ( ) ;
// Dynamically gets the Resource name and the API Key from the service.
var resourceName = "..." ;
var apiKey = "..."
options . UseAzure ( resourceName , apiKey ) ;
} ) ;
Em cenários mais complexos, é possível configurar o DallENet usando código e IConfiguration. Isso pode ser útil se quisermos definir várias propriedades comuns, mas ao mesmo tempo precisarmos de alguma lógica de configuração. Por exemplo:
builder . Services . AddDallE ( ( services , options ) =>
{
// Configure common properties (default size, default style, ecc.) using IConfiguration.
options . UseConfiguration ( builder . Configuration ) ;
var accountService = services . GetRequiredService < IAccountService > ( ) ;
// Dynamically gets the Resource name and the API Key from the service.
var resourceName = "..." ;
var apiKey = "..."
options . UseAzure ( resourceName , apiKey ) ;
} ) ;
A biblioteca pode ser usada em qualquer aplicativo .NET criado com .NET 6.0 ou posterior. Por exemplo, podemos criar uma API Minimal desta forma:
app . MapPost ( "/api/image" , async ( Request request , IDallEClient dallEClient ) =>
{
var response = await dallEClient . GenerateImagesAsync ( request . Prompt ) ;
return TypedResults . Ok ( response ) ;
} )
. WithOpenApi ( ) ;
public record class Request ( string Prompt ) ;
Em particular, a resposta contém o URL da imagem gerada. Se quisermos apenas recuperar a URL da primeira imagem gerada, podemos chamar o método GetImageUrl :
var imageUrl = response . GetImageUrl ( ) ;
Nota As imagens geradas são excluídas automaticamente após 24 horas.
Verifique a pasta Samples para obter mais informações sobre as diferentes implementações.
A documentação técnica completa está disponível aqui.
O projeto está em constante evolução. Contribuições são bem-vindas. Sinta-se à vontade para registrar problemas e obter solicitações no repositório e nós os resolveremos da melhor maneira possível.
Aviso Lembre-se de trabalhar no branch de desenvolvimento , não use o branch master diretamente. Criar solicitações pull visando desenvolver .