Une bibliothèque d'intégration DALL·E pour .NET
Remarque La version actuelle de la bibliothèque nécessite une ressource DALL·E 3. Si vous souhaitez utiliser DALL·E 2, veuillez vous référer à cette version.
La bibliothèque est disponible sur NuGet. Recherchez simplement DallENet dans l’ interface graphique du gestionnaire de packages ou exécutez la commande suivante dans la CLI .NET :
dotnet add package DallENet
Enregistrez le service DALL·E au démarrage de l'application :
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
} ) ;
Actuellement, DallENet prend uniquement en charge Azure OpenAI Service. La prise en charge d'OpenAI sera ajoutée dans une future version. Les paramètres de configuration requis sont les suivants :
DALL·E 3 est capable de générer des images à différentes résolutions :
A l'aide de la propriété DefaultSize , il est possible de spécifier la taille de l'image par défaut, sauf si vous transmettez une valeur explicite dans les méthodes GenerateImageAsync ou GetImageStreamAsync . La résolution par défaut est 1024x1024.
DALL·E 3 est capable de générer des images en qualité standard ou HD, c'est-à-dire avec des détails plus fins et une plus grande cohérence sur l'image. A l'aide de la propriété DefaultQuality , il est possible de spécifier la qualité par défaut, sauf si vous transmettez une valeur explicite dans les méthodes GenerateImageAsync ou GetImageStreamAsync . La qualité par défaut est Standard .
DALL·E 3 est capable de générer des images en utilisant un style vif et naturel :
A l'aide de la propriété DefaultStyle , il est possible de spécifier le style par défaut, sauf si vous transmettez une valeur explicite dans les méthodes GenerateImageAsync ou GetImageStreamAsync . Le style par défaut est Vif .
DALL·E 3 est capable de renvoyer l'URL de l'image générée de son encodage Base64. A l'aide de la propriété DefaultResponseFormat , il est possible de spécifier la qualité par défaut, sauf si vous transmettez une valeur explicite dans les méthodes GenerateImageAsync ou GetImageStreamAsync . La qualité par défaut est Url .
La configuration peut être lue automatiquement depuis IConfiguration, en utilisant par exemple une section DallE dans le fichier 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
}
Et puis utilisez la surcharge correspondante de la méthode AddDallE :
// Adds DALL·E service using settings from IConfiguration.
builder . Services . AddDallE ( builder . Configuration ) ;
La méthode AddDallE possède également une surcharge qui accepte un IServiceProvider comme argument. Il peut être utilisé, par exemple, si nous sommes dans une API Web et que nous devons prendre en charge des scénarios dans lesquels chaque utilisateur dispose d'une clé API différente qui peut être récupérée en accédant à une base de données via l'injection de dépendances :
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 ) ;
} ) ;
Dans des scénarios plus complexes, il est possible de configurer DallENet à l'aide du code et de IConfiguration. Cela peut être utile si nous voulons définir un ensemble de propriétés communes, mais en même temps nous avons besoin d'une certaine logique de configuration. Par exemple:
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 ) ;
} ) ;
La bibliothèque peut être utilisée dans n'importe quelle application .NET créée avec .NET 6.0 ou version ultérieure. Par exemple, nous pouvons créer une API minimale de cette manière :
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 ) ;
En particulier, la réponse contient l'URL de l'image générée. Si l'on souhaite simplement récupérer l'URL de la première image générée, on peut appeler la méthode GetImageUrl :
var imageUrl = response . GetImageUrl ( ) ;
Remarque Les images générées sont automatiquement supprimées après 24 heures.
Consultez le dossier Samples pour plus d’informations sur les différentes implémentations.
La documentation technique complète est disponible ici.
Le projet est en constante évolution. Les contributions sont les bienvenues. N'hésitez pas à signaler des problèmes et des demandes d'extraction sur le dépôt et nous les traiterons autant que possible.
Attention Pensez à travailler sur la branche develop , n'utilisez pas directement la branche master . Créez des Pull Requests ciblant le développement .