.NET 的 DALL·E 集成库
注意当前版本的库需要 DALL·E 3 资源。如果您想使用DALL·E 2,请参考此版本。
该库可在 NuGet 上使用。只需在程序包管理器 GUI中搜索DallENet或在.NET CLI中运行以下命令:
dotnet add package DallENet
在应用程序启动时注册DALL·E服务:
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
} ) ;
目前, DallENet仅支持 Azure OpenAI 服务。未来版本将添加对 OpenAI 的支持。所需的配置参数如下:
DALL·E 3 能够生成不同分辨率的图像:
使用DefaultSize属性,可以指定默认图像大小,除非您在GenerateImageAsync或GetImageStreamAsync方法中传递显式值。默认分辨率为 1024x1024。
DALL·E 3 能够生成标准或高清质量的图像,即图像具有更精细的细节和更高的一致性。使用DefaultQuality属性,可以指定默认质量,除非您在GenerateImageAsync或GetImageStreamAsync方法中传递显式值。默认质量为Standard 。
DALL·E 3能够生成具有生动自然风格的图像:
使用DefaultStyle属性,可以指定默认样式,除非您在GenerateImageAsync或GetImageStreamAsync方法中传递显式值。默认样式是Vivid 。
DALL·E 3 能够返回其 Base64 编码生成的图像的 URL。使用DefaultResponseFormat属性,可以指定默认质量,除非您在GenerateImageAsync或GetImageStreamAsync方法中传递显式值。默认质量是Url 。
可以使用appsettings.json文件中的DallE部分自动从 IConfiguration 读取配置:
"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
}
然后使用che AddDallE方法的相应重载:
// Adds DALL·E service using settings from IConfiguration.
builder . Services . AddDallE ( builder . Configuration ) ;
AddDallE方法还有一个重载,它接受 IServiceProvider 作为参数。例如,如果我们在 Web API 中,并且需要支持每个用户都有不同的 API 密钥(可以通过依赖注入访问数据库来检索该密钥)的场景,则可以使用它:
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 ) ;
} ) ;
在更复杂的场景中,可以使用代码和 IConfiguration 来配置DallENet 。如果我们想要设置一堆通用属性,但同时我们需要一些配置逻辑,这可能很有用。例如:
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 ) ;
} ) ;
该库可用于使用 .NET 6.0 或更高版本构建的任何 .NET 应用程序。例如,我们可以这样创建一个Minimal API:
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 ) ;
特别是,响应包含生成图像的 URL。如果我们只想检索第一个生成的图像的 URL,我们可以调用GetImageUrl方法:
var imageUrl = response . GetImageUrl ( ) ;
注意生成的图像将在 24 小时后自动删除。
检查 Samples 文件夹以获取有关不同实现的更多信息。
完整的技术文档可在此处获取。
该项目在不断发展。欢迎贡献。请随意在存储库上提出问题和拉取请求,我们将尽力解决这些问题。
警告请记住在开发分支上工作,不要直接使用主分支。创建针对开发的拉取请求。