Eine DALL·E-Integrationsbibliothek für .NET
Hinweis Die aktuelle Version der Bibliothek erfordert eine DALL·E 3-Ressource. Wenn Sie DALL·E 2 verwenden möchten, lesen Sie bitte diese Version.
Die Bibliothek ist auf NuGet verfügbar. Suchen Sie einfach in der Paketmanager-GUI nach DallENet oder führen Sie den folgenden Befehl in der .NET-CLI aus:
dotnet add package DallENetRegistrieren Sie den DALL·E-Dienst beim Anwendungsstart:
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
} ) ;Derzeit unterstützt DallENet nur den Azure OpenAI Service. Unterstützung für OpenAI wird in einer zukünftigen Version hinzugefügt. Die erforderlichen Konfigurationsparameter sind die folgenden:
DALL·E 3 ist in der Lage, Bilder in verschiedenen Auflösungen zu erzeugen:
Mit der DefaultSize- Eigenschaft ist es möglich, die Standardbildgröße anzugeben, es sei denn, Sie übergeben einen expliziten Wert in den Methoden GenerateImageAsync oder GetImageStreamAsync . Die Standardauflösung beträgt 1024 x 1024.
DALL·E 3 ist in der Lage, Bilder in Standard- oder HD-Qualität zu erzeugen, also mit feineren Details und größerer Konsistenz im gesamten Bild. Mit der DefaultQuality- Eigenschaft ist es möglich, die Standardqualität anzugeben, es sei denn, Sie übergeben einen expliziten Wert in den Methoden GenerateImageAsync oder GetImageStreamAsync . Die Standardqualität ist Standard .
DALL·E 3 ist in der Lage, Bilder in einem lebendigen oder natürlichen Stil zu erzeugen:
Mithilfe der DefaultStyle- Eigenschaft ist es möglich, den Standardstil anzugeben, es sei denn, Sie übergeben einen expliziten Wert in den Methoden GenerateImageAsync oder GetImageStreamAsync . Der Standardstil ist Vivid .
DALL·E 3 ist in der Lage, die URL des generierten Bildes seiner Base64-Kodierung zurückzugeben. Mit der Eigenschaft DefaultResponseFormat ist es möglich, die Standardqualität anzugeben, es sei denn, Sie übergeben einen expliziten Wert in den Methoden GenerateImageAsync oder GetImageStreamAsync . Die Standardqualität ist URL .
Die Konfiguration kann automatisch aus IConfiguration gelesen werden, beispielsweise mithilfe eines DallE -Abschnitts in der Datei 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
}Und dann verwenden Sie die entsprechende Überladung der AddDallE -Methode:
// Adds DALL·E service using settings from IConfiguration.
builder . Services . AddDallE ( builder . Configuration ) ;Die AddDallE -Methode verfügt auch über eine Überladung, die einen IServiceProvider als Argument akzeptiert. Es kann beispielsweise verwendet werden, wenn wir uns in einer Web-API befinden und Szenarien unterstützen müssen, in denen jeder Benutzer einen anderen API-Schlüssel hat, der beim Zugriff auf eine Datenbank über Dependency Injection abgerufen werden kann:
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 ) ;
} ) ;In komplexeren Szenarien ist es möglich, DallENet sowohl mit Code als auch mit IConfiguration zu konfigurieren. Dies kann nützlich sein, wenn wir eine Reihe gemeinsamer Eigenschaften festlegen möchten, gleichzeitig aber eine Konfigurationslogik benötigen. Zum Beispiel:
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 ) ;
} ) ; Die Bibliothek kann in jeder .NET-Anwendung verwendet werden, die mit .NET 6.0 oder höher erstellt wurde. So können wir beispielsweise eine Minimal-API erstellen:
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 ) ;Die Antwort enthält insbesondere die URL des generierten Bildes. Wenn wir nur die URL des ersten generierten Bildes abrufen möchten, können wir die GetImageUrl -Methode aufrufen:
var imageUrl = response . GetImageUrl ( ) ;Hinweis Erstellte Bilder werden nach 24 Stunden automatisch gelöscht.
Weitere Informationen zu den verschiedenen Implementierungen finden Sie im Ordner „Beispiele“.
Die vollständige technische Dokumentation finden Sie hier.
Das Projekt entwickelt sich ständig weiter. Beiträge sind willkommen. Fühlen Sie sich frei, Probleme einzureichen und Anfragen im Repo zu stellen, und wir werden uns so gut wie möglich darum kümmern.
Warnung: Denken Sie daran, am Entwicklungszweig zu arbeiten und nicht direkt den Master- Zweig zu verwenden. Erstellen Sie Pull-Anfragen mit dem Ziel „develop“ .