在本快速入门中,你将使用 Microsoft.Extensions.AI (MEAI) 库通过 AI 模型从文本提示生成图像。 MEAI 文本到图像功能允许使用一致且可扩展的 API 图面从自然语言提示或现有图像生成图像。
该 IImageGenerator 接口提供统一的可扩展 API,用于处理各种图像生成服务,使文本到图像功能易于集成到 .NET 应用中。 接口支持:
- 文本到图像生成。
- 使用中间件(日志记录、遥测、缓存)进行管道组合。
- 灵活的配置选项。
- 支持多个人工智能提供商。
注释
该 IImageGenerator 接口当前标记为实验性,并使用 MEAI001 诊断 ID。 可能需要在项目文件或代码中禁止显示此警告。
先决条件
- .NET 8.0 SDK 或更高版本 - 安装 .NET 8 SDK。
- Azure 订阅 - 免费创建订阅。
- Azure 开发人员 CLI (可选) - 安装或更新 Azure 开发人员 CLI。
配置 AI 服务
若要使用 Azure 门户预配 Azure OpenAI 服务和模型,请完成创建和部署 Azure OpenAI 服务资源一文中的步骤。 在“部署模型”步骤中,选择模型 gpt-image-1 。
注释
gpt-image-1 是一种较新的模型,提供 DALL-E 3 的多项改进。 它由 OpenAI 提供,数量有限;请使用此表单申请访问。
创建应用程序
完成以下步骤以创建一个 .NET 控制台应用程序,该应用程序从文本提示生成图像。
创建新的控制台应用程序:
dotnet new console -o TextToImageAI导航到
TextToImageAI目录,并将必要的包添加到应用: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.UserSecrets运行以下命令,为 Azure OpenAI 终结点、模型名称和 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>在所选编辑器中打开新应用(例如 Visual Studio)。
实现基本映像生成
请使用以下代码对
Program.cs文件进行更新,以获取配置数据并创建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();前面的代码:
- 从用户机密加载配置。
- 从 OpenAI SDK 创建一个
ImageClient。 - 使用AsIImageGenerator(ImageClient)扩展方法将
ImageClient转换为IImageGenerator。
添加以下代码以实现基本文本到图像生成:
// 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); }前面的代码:
- 通过设定
来指定所请求的图像文件类型。 - 使用 GenerateImagesAsync(IImageGenerator, String, ImageGenerationOptions, CancellationToken) 带有文本提示的方法生成图像。
- 将生成的映像保存到本地用户目录中的文件。
- 通过设定
通过 IDE 或使用
dotnet run运行应用程序。应用程序生成一个映像,并将文件路径输出到映像。 打开该文件以查看生成的图像。 下图显示了生成的映像的一个示例。
配置映像生成选项
可以通过提供其他选项(例如大小、响应格式和要生成的图像数)来自定义图像生成。 类 ImageGenerationOptions 允许你指定:
- AdditionalProperties:提供程序特定的选项。
- Count:要生成的图像数。
- ImageSize:生成的图像的尺寸。System.Drawing.Size 有关支持的大小,请参阅 OpenAI API 参考。
- MediaType:生成的映像的媒体类型(MIME 类型)。
- ModelId:模型ID。
- RawRepresentationFactory:用于从基础实现创建图像生成选项的原始表示形式的回调。
- ResponseFormat:选项为 Uri、 Data和 Hosted。
最佳做法
在应用程序中实现文本到图像生成时,请考虑以下最佳做法:
- 提示工程:编写清晰、详细的提示,描述所需图像。 包括有关样式、合成、颜色和元素的特定详细信息。
- 成本管理:映像生成可能很昂贵。 尽可能缓存结果并实施速率限制来控制成本。
- 内容安全:始终查看生成的图像以获取适当的内容,尤其是在生产应用程序中。 请考虑实现内容筛选和审查。
- 用户体验:映像生成可能需要几秒钟时间。 提供进度指示器并优雅地处理超时。
- 法律注意事项:了解生成的映像的许可和使用权限。 查看 AI 提供商的服务条款。
清理资源
不再需要 Azure OpenAI 资源时,请将其删除以避免产生费用:
- 在 Azure 门户中,导航到 Azure OpenAI 资源。
- 选择资源,然后选择“ 删除”。
后续步骤
你已使用 IImageGenerator 接口 Microsoft.Extensions.AI成功生成了一些不同的图像。 接下来,可以探索一些附加功能,包括:
- 以迭代方式优化生成的图像。
- 编辑现有图像。
- 个性化图像、图表或主题。