你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 Azure OpenAI 服务生成图像

注意

图像生成 API 根据文本提示创建图像。 它不会编辑现有图像或创建变体。

使用本指南开始在浏览器中使用 Azure OpenAI 生成图像。

先决条件

注意

目前,必须提交应用程序才能访问 Azure OpenAI 服务。 若要申请访问权限,请填写此表单。 如果需要帮助,请在此存储库中提出问题以联系 Microsoft。

登录到 Azure OpenAI Studio

浏览到 Azure OpenAI Studio,然后使用与 Azure OpenAI 资源关联的凭据登录。 在登录过程中或登录之后,选择适当的目录、Azure 订阅和 Azure OpenAI 资源。

在 Azure OpenAI Studio 登陆页中,选择“DALL·E playground(预览版)”,以使用图像生成 API。 选择页面顶部附近的“设置”,并确认“部署”下拉列表选择了 DALL-E 3 部署。

试用图像生成

通过 DALL·E playground(预览版)开始探索使用无代码方法的 Azure OpenAI 功能。 在文本框中输入图像提示,然后选择“生成”。 AI 生成的图像准备就绪后,它将显示在页面上。

注意

图像生成 API 附带内容审核筛选器。 如果 Azure OpenAI 将你的提示识别为有害内容,则不会返回生成的图像。 有关详细信息,请参阅事件筛选

屏幕截图显示 Azure OpenAI Studio 登录页显示 DALL-E playground(预览版)与生成的北极熊图像。

在 DALL·E playground(预览版)中,还可以查看根据设置预填充的 Python 和 cURL 代码示例。 选择页面顶部附近的“查看代码”。 可以使用此代码编写完成相同任务的应用程序。

清理资源

如果你想要清理和删除 OpenAI 资源,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。

后续步骤

使用本指南开始通过 Python 调用 Azure OpenAI 服务图像生成 REST API。

先决条件

注意

目前,必须提交应用程序才能访问 Azure OpenAI 服务。 若要申请访问权限,请填写此表单。 如果需要帮助,请在此存储库中提出问题以联系 Microsoft。

检索密钥和终结点

若要成功调用 Azure OpenAI API,需要有关 Azure OpenAI 资源的以下信息:

变量 名称
终结点 api_base 终结点值位于 Azure 门户中资源的“密钥和终结点”下。 也可在“Azure OpenAI Studio”>“操场”>“代码视图”中找到该值。 示例终结点为:https://docs-test-001.openai.azure.com/
api_key 密钥值也位于 Azure 门户中资源的“密钥和终结点”下。 Azure 为资源生成两个密钥。 可以使用其中任意一个值。

在 Azure 门户中转到你的资源。 在导航窗格中,选择“资源管理”下的“密钥和终结点”。 复制“终结点”值和访问密钥值。 可以使用 KEY 1 或 KEY 2 值。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。

屏幕截图显示 Azure 门户中的 Azure OpenAI 资源的“密钥和终结点”页面。

创建新的 Python 应用程序

创建名为“quickstart.py”的新 Python 文件。 在首选编辑器或 IDE 中打开新文件。

  1. quickstart.py 的内容替换为以下代码。 在相应的字段中输入终结点 URL 和密钥。 将 prompt 的值更改为首选文本。

    还需要将 URL 中的 <dalle3> 替换为你在部署 DALL-E3 模型时选择的部署名称。 输入模型名称将导致错误,除非选择的部署名称与基础模型名称相同。 如果遇到错误,请仔细检查,确保你的终结点和 /openai/deployments 之间的分隔处没有重复的 /

    import requests
    import time
    import os
    api_base = '<your_endpoint>'  # Enter your endpoint here
    api_key = '<your_key>'        # Enter your API key here
    
    api_version = '2024-02-01'
    url = f"{api_base}/openai/deployments/<dalle3>/images/generations?api-version={api_version}"
    headers= { "api-key": api_key, "Content-Type": "application/json" }
    body = {
        # Enter your prompt text here
        "prompt": "A multi-colored umbrella on the beach, disposable camera",
        "size": "1024x1024", # supported values are “1792x1024”, “1024x1024” and “1024x1792” 
        "n": 1, #The number of images to generate. Only n=1 is supported for DALL-E 3.
        "quality": "hd", # Options are “hd” and “standard”; defaults to standard 
        "style": "vivid" # Options are “natural” and “vivid”; defaults to “vivid”
    }
    submission = requests.post(url, headers=headers, json=body)
    
    image_url = submission.json()['data'][0]['url']
    
    print(image_url)
    

    此脚本进行同步图像生成 API 调用。

    重要

    请记住完成后将密钥从代码中删除,永远不要公开发布该密钥。 对于生产,请使用安全的方式存储和访问凭据。 有关详细信息,请参阅 Azure Key Vault

  2. 使用 python 命令运行应用程序:

    python quickstart.py
    

    片刻之后即可获得响应。

输出

成功的图像生成 API 调用的输出如下示例所示。 url 字段包含一个 URL,可在其中下载生成的图像。 URL 保持活动状态 24 小时。

{ 
    "created": 1698116662, 
    "data": [ 
        { 
            "url": "<URL_to_generated_image>",
            "revised_prompt": "<prompt_that_was_used>" 
        }
    ]
} 

图像生成 API 附带内容审核筛选器。 如果服务将你的提示识别为有害内容,则不会生成图像。 有关详细信息,请参阅事件筛选。 有关错误响应的示例,请参阅 DALL-E 操作指南

系统将返回操作状态 Failed,消息中的 error.code 值将设置为 contentFilter。 下面是一个示例:

{
    "created": 1698435368,
    "error":
    {
        "code": "contentFilter",
        "message": "Your task failed as a result of our safety system."
    }
}

生成的图像本身也可能会被筛除。 在这种情况下,错误消息设置为 Generated image was filtered as a result of our safety system.。 下面是一个示例:

{
    "created": 1698435368,
    "error":
    {
        "code": "contentFilter",
        "message": "Generated image was filtered as a result of our safety system."
    }
}

清理资源

如果你想要清理和删除 OpenAI 资源,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。

后续步骤

使用本指南通过适用于 Python 的 Azure OpenAI SDK 开始生成图像。

库源代码 | | 示例

先决条件

注意

目前,必须提交应用程序才能访问 Azure OpenAI 服务。 若要申请访问权限,请填写此表单。 如果需要帮助,请在此存储库中提出问题以联系 Microsoft。

设置

检索密钥和终结点

若要成功调用 Azure OpenAI API,需要有关 Azure OpenAI 资源的以下信息:

变量 名称
终结点 api_base 终结点值位于 Azure 门户中资源的“密钥和终结点”下。 也可在“Azure OpenAI Studio”>“操场”>“代码视图”中找到该值。 示例终结点为:https://docs-test-001.openai.azure.com/
api_key 密钥值也位于 Azure 门户中资源的“密钥和终结点”下。 Azure 为资源生成两个密钥。 可以使用其中任意一个值。

在 Azure 门户中转到你的资源。 在导航窗格中,选择“资源管理”下的“密钥和终结点”。 复制“终结点”值和访问密钥值。 可以使用 KEY 1 或 KEY 2 值。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。

屏幕截图显示 Azure 门户中的 Azure OpenAI 资源的“密钥和终结点”页面。

为密钥和终结点创建和分配持久环境变量。

环境变量

为密钥和终结点创建和分配持久环境变量。

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

创建新的 Python 应用程序

打开命令提示符并浏览到你的项目文件夹。 创建新的 python 文件 quickstart.py。

安装 Python SDK

使用以下命令安装 OpenAI Python SDK:

pip install openai

同时安装以下库:

pip install requests
pip install pillow 

使用 DALL-E 生成图像

在首选编辑器或 IDE 中打开 _quickstart.py。

quickstart.py 的内容替换为以下代码。

from openai import AzureOpenAI
import os
import requests
from PIL import Image
import json

client = AzureOpenAI(
    api_version="2024-02-01",  
    api_key=os.environ["AZURE_OPENAI_API_KEY"],  
    azure_endpoint=os.environ['AZURE_OPENAI_ENDPOINT']
)

result = client.images.generate(
    model="dalle3", # the name of your DALL-E 3 deployment
    prompt="a close-up of a bear walking throughthe forest",
    n=1
)

json_response = json.loads(result.model_dump_json())

# Set the directory for the stored image
image_dir = os.path.join(os.curdir, 'images')

# If the directory doesn't exist, create it
if not os.path.isdir(image_dir):
    os.mkdir(image_dir)

# Initialize the image path (note the filetype should be png)
image_path = os.path.join(image_dir, 'generated_image.png')

# Retrieve the generated image
image_url = json_response["data"][0]["url"]  # extract image URL from response
generated_image = requests.get(image_url).content  # download the image
with open(image_path, "wb") as image_file:
    image_file.write(generated_image)

# Display the image in the default image viewer
image = Image.open(image_path)
image.show()
  1. 在相应的字段中输入终结点 URL 和密钥。
  2. prompt 的值更改为首选文本。
  3. 将值 model 更改为已部署的 DALL-E 3 模型的名称。

重要

请记住完成后将密钥从代码中删除,永远不要公开发布该密钥。 对于生产,请使用安全的方式存储和访问凭据。 有关详细信息,请参阅 Azure Key Vault

使用 python 命令运行应用程序:

python quickstart.py

片刻之后即可获得响应。

输出

Azure OpenAI 将输出映像存储在指定目录中的 generated_image.png 文件中。 脚本还将在默认图像查看器中显示该图像。

图像生成 API 附带内容审核筛选器。 如果服务将你的提示识别为有害内容,则不会生成图像。 有关详细信息,请参阅事件筛选

清理资源

如果你想要清理和删除 OpenAI 资源,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。

后续步骤

使用本指南通过适用于 C# 的 Azure OpenAI SDK 开始生成图像。

库源代码 | 包 (NuGet) | 示例

先决条件

注意

目前,必须提交应用程序才能访问 Azure OpenAI 服务。 若要申请访问权限,请填写此表单。 如果需要帮助,请在此存储库中提出问题以联系 Microsoft。

设置

检索密钥和终结点

若要成功对 Azure OpenAI 发出调用,需要一个终结点和一个密钥。

变量名称
ENDPOINT 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 或者,可以在“Azure OpenAI Studio”>“操场”>“代码视图”中找到该值。 示例终结点为:https://docs-test-001.openai.azure.com/
API-KEY 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 可以使用 KEY1KEY2

在 Azure 门户中转到你的资源。 可在“资源管理”部分中找到“密钥和终结点”部分。 复制终结点和访问密钥,因为在对 API 调用进行身份验证时需要这两项。 可以使用 KEY1KEY2。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。

Azure 门户中 Azure OpenAI 资源概述 UI 的屏幕截图,其中终结点和访问密钥的位置用红圈标示。

环境变量

为密钥和终结点创建和分配持久环境变量。

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

创建新的 .NET Core 应用程序

在控制台窗口(例如 cmd、PowerShell 或 Bash)中,使用 dotnet new 命令创建名为 azure-openai-quickstart 的新控制台应用。 此命令将创建包含单个 C# 源文件的简单“Hello World”项目:Program.cs

dotnet new console -n azure-openai-quickstart

将目录更改为新创建的应用文件夹。 可使用以下代码生成应用程序:

dotnet build

生成输出不应包含警告或错误。

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

安装 OpenAI .NET SDK

使用以下命令安装客户端库:

dotnet add package Azure.AI.OpenAI --version 1.0.0-beta.6

使用 DALL-E 生成图像

从项目目录中,打开 Program.cs 文件,并将其内容替换为以下代码:

using System;
using System.IO;
using System.Threading.Tasks;
using Azure.AI.OpenAI;

namespace Azure.AI.OpenAI.Tests.Samples
{
    public partial class GenerateImages
    {
        // add an async Main method:
        public static async Task Main(string[] args)
        {
            string endpoint = GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
            string key = GetEnvironmentVariable("AZURE_OPENAI_API_KEY");

            OpenAIClient client = new(new Uri(endpoint), new AzureKeyCredential(key));

            Response<ImageGenerations> imageGenerations = await client.GetImageGenerationsAsync(
                new ImageGenerationOptions()
                {
                    Prompt = "a happy monkey eating a banana, in watercolor",
                    Size = ImageSize.Size256x256,
                });

            // Image Generations responses provide URLs you can use to retrieve requested images
            Uri imageUri = imageGenerations.Value.Data[0].Url;
            
            // Print the image URI to console:
            Console.WriteLine(imageUri);
        }
    }
}

使用以下命令从应用程序目录生成并运行应用程序:

dotnet build
dotnet run

输出

生成的图像的 URL 将输出到控制台中。

https://dalleproduse.blob.core.windows.net/private/images/552c5522-af4a-4877-a19c-400fac04a422/generated_00.png?se=2023-08-17T16%3A54%3A40Z&sig=XGCIx9r0WvWTJ0LL%2FJGymo2WYp4FDbSQNNrGRUnnUzI%3D&ske=2023-08-19T01%3A10%3A14Z&skoid=09ba021e-c417-441c-b203-c81e5dcd7b7f&sks=b&skt=2023-08-12T01%3A10%3A14Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02

注意

图像生成 API 附带内容审核筛选器。 如果服务将你的提示识别为有害内容,则不会返回生成的图像。 有关详细信息,请参阅内容筛选器一文。

清理资源

如果你想要清理和移除 Azure OpenAI 资源,可以删除该资源。 在删除资源之前,必须先删除所有已部署的模型。

后续步骤

使用本指南通过适用于 Java 的 Azure OpenAI SDK 开始生成图像。

库源代码 | 项目 (Maven) | 示例

先决条件

  • Azure 订阅 - 免费创建订阅
  • 已在所需的 Azure 订阅中授予对 Azure OpenAI 服务的访问权限。 目前,仅应用程序授予对此服务的访问权限。 可以填写 https://aka.ms/oai/access 处的表单来申请对 Azure OpenAI 服务的访问权限。

注意

目前,必须提交应用程序才能访问 Azure OpenAI 服务。 若要申请访问权限,请填写此表单。 如果需要帮助,请在此存储库中提出问题以联系 Microsoft。

设置

检索密钥和终结点

若要成功对 Azure OpenAI 发出调用,需要一个终结点和一个密钥。

变量名称
ENDPOINT 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 或者,可以在“Azure OpenAI Studio”>“操场”>“代码视图”中找到该值。 示例终结点为:https://docs-test-001.openai.azure.com/
API-KEY 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 可以使用 KEY1KEY2

在 Azure 门户中转到你的资源。 可在“资源管理”部分中找到“密钥和终结点”部分。 复制终结点和访问密钥,因为在对 API 调用进行身份验证时需要这两项。 可以使用 KEY1KEY2。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。

Azure 门户中 Azure OpenAI 资源概述 UI 的屏幕截图,其中终结点和访问密钥的位置用红圈标示。

环境变量

为密钥和终结点创建和分配持久环境变量。

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

创建新的 Java 应用程序

创建一个新的 Gradle 项目。

在控制台窗口(例如 cmd、PowerShell 或 Bash)中,为应用创建一个新目录并导航到该目录。

mkdir myapp && cd myapp

从工作目录运行 gradle init 命令。 此命令将创建 Gradle 的基本生成文件,包括 build.gradle.kts,在运行时将使用该文件创建并配置应用程序。

gradle init --type basic

当提示你选择一个 DSL 时,选择 Kotlin

安装 Java SDK

本快速入门使用 Gradle 依赖项管理器。 可以在 Maven 中央存储库中找到客户端库以及其他依赖项管理器的信息。

找到 build.gradle.kts,并使用喜好的 IDE 或文本编辑器将其打开。 然后在该文件中复制以下生成配置。 此配置将项目定义为一个 Java 应用程序,其入口点为 OpenAIQuickstart 类。 它会导入 Azure AI 视觉库。

plugins {
    java
    application
}
application { 
    mainClass.set("OpenAIQuickstart")
}
repositories {
    mavenCentral()
}
dependencies {
    implementation(group = "com.azure", name = "azure-ai-openai", version = "1.0.0-beta.3")
    implementation("org.slf4j:slf4j-simple:1.7.9")
}

使用 DALL-E 生成图像

  1. 创建 Java 文件。

    从工作目录运行以下命令,以创建项目源文件夹:

    mkdir -p src/main/java
    

    导航到新文件夹,并创建名为 OpenAIQuickstart.java 的文件。

  2. 在首选编辑器或 IDE 中打开 OpenAIQuickstart.java,并粘贴以下代码。

    import com.azure.ai.openai.OpenAIAsyncClient;
    import com.azure.ai.openai.OpenAIClientBuilder;
    import com.azure.ai.openai.models.ImageGenerationOptions;
    import com.azure.ai.openai.models.ImageLocation;
    import com.azure.core.credential.AzureKeyCredential;
    import com.azure.core.models.ResponseError;
    
    import java.util.concurrent.TimeUnit;
    
    /**
     * Sample demonstrates how to get the images for a given prompt.
     */
    public class OpenAIQuickstart {
    
        /**
         * Runs the sample algorithm and demonstrates how to get the images for a given prompt.
         *
         * @param args Unused. Arguments to the program.
         */
        public static void main(String[] args) throws InterruptedException {
    
            // Get key and endpoint from environment variables:
            String azureOpenaiKey = System.getenv("AZURE_OPENAI_API_KEY");
            String endpoint = System.getenv("AZURE_OPENAI_ENDPOINT");
    
            OpenAIAsyncClient client = new OpenAIClientBuilder()
                .endpoint(endpoint)
                .credential(new AzureKeyCredential(azureOpenaiKey))
                .buildAsyncClient();
    
            ImageGenerationOptions imageGenerationOptions = new ImageGenerationOptions(
                "A drawing of the Seattle skyline in the style of Van Gogh");
            client.getImages(imageGenerationOptions).subscribe(
                images -> {
                    for (ImageLocation imageLocation : images.getData()) {
                        ResponseError error = imageLocation.getError();
                        if (error != null) {
                            System.out.printf("Image generation operation failed. Error code: %s, error message: %s.%n",
                                error.getCode(), error.getMessage());
                        } else {
                            System.out.printf(
                                "Image location URL that provides temporary access to download the generated image is %s.%n",
                                imageLocation.getUrl());
                        }
                    }
                },
                error -> System.err.println("There was an error getting images." + error),
                () -> System.out.println("Completed getImages."));
    
            // The .subscribe() creation and assignment is not a blocking call. For the purpose of this example, we sleep
            // the thread so the program does not end before the send operation is complete. Using .block() instead of
            // .subscribe() will turn this into a synchronous call.
            TimeUnit.SECONDS.sleep(10);
        }
    }
    
  3. 导航回项目根文件夹,并通过以下内容生成应用:

    gradle build
    

    然后,使用 gradle run 命令运行应用:

    gradle run
    

输出

生成的图像的 URL 将输出到控制台中。

Image location URL that provides temporary access to download the generated image is https://dalleproduse.blob.core.windows.net/private/images/d2ea917f-8802-4ad6-8ef6-3fb7a15c8482/generated_00.png?se=2023-08-25T23%3A11%3A28Z&sig=%2BKa5Mkb9U88DfvxoBpyAjamYRzwb7aVCEucM6XJC3wQ%3D&ske=2023-08-31T15%3A27%3A47Z&skoid=09ba021e-c417-441c-b203-c81e5dcd7b7f&sks=b&skt=2023-08-24T15%3A27%3A47Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02.
Completed getImages.

注意

图像生成 API 附带内容审核筛选器。 如果服务将你的提示识别为有害内容,则不会返回生成的图像。 有关详细信息,请参阅内容筛选器一文。

清理资源

如果你想要清理和移除 Azure OpenAI 资源,可以删除该资源。 在删除资源之前,必须先删除所有已部署的模型。

后续步骤

使用本指南通过适用于 JavaScript 的 Azure OpenAI SDK 开始生成图像。

库源代码 | 包 (npm) | 示例

先决条件

注意

目前,必须提交应用程序才能访问 Azure OpenAI 服务。 若要申请访问权限,请填写此表单。 如果需要帮助,请在此存储库中提出问题以联系 Microsoft。

设置

检索密钥和终结点

若要成功对 Azure OpenAI 发出调用,需要一个终结点和一个密钥。

变量名称
ENDPOINT 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 或者,可以在“Azure OpenAI Studio”>“操场”>“代码视图”中找到该值。 示例终结点为:https://docs-test-001.openai.azure.com/
API-KEY 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 可以使用 KEY1KEY2

在 Azure 门户中转到你的资源。 可在“资源管理”部分中找到“密钥和终结点”部分。 复制终结点和访问密钥,因为在对 API 调用进行身份验证时需要这两项。 可以使用 KEY1KEY2。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。

Azure 门户中 Azure OpenAI 资源概述 UI 的屏幕截图,其中终结点和访问密钥的位置用红圈标示。

环境变量

为密钥和终结点创建和分配持久环境变量。

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

创建 Node 应用程序

在控制台窗口(例如 cmd、PowerShell 或 Bash)中,为应用创建一个新目录并导航到该目录。 然后运行 npm init 命令以使用 package.json 文件创建一个 node 应用程序。

npm init

安装客户端库

使用 npm 安装适用于 JavaScript 的 Azure OpenAI 客户端库:

npm install @azure/openai

你的应用的 package.json 文件将随依赖项进行更新。

使用 DALL-E 生成图像

创建一个名为 ImageGeneration.js 的新文件,然后在首选代码编辑器中打开它。 将以下代码复制到 ImageGeneration.js 文件中:

const { OpenAIClient, AzureKeyCredential } = require("@azure/openai");

// You will need to set these environment variables or edit the following values
const endpoint = process.env["AZURE_OPENAI_ENDPOINT"] ;
const azureApiKey = process.env["AZURE_OPENAI_API_KEY"] ;

// The prompt to generate images from
const prompt = "a monkey eating a banana";
const size = "256x256";

// The number of images to generate
const n = 2;

async function main() {
    console.log("== Batch Image Generation ==");
  
    const client = new OpenAIClient(endpoint, new AzureKeyCredential(azureApiKey));
    const deploymentName = "dall-e";
    const results = await client.getImages(deploymentName, prompt, { n, size });
  
    for (const image of results.data) {
      console.log(`Image generation result URL: ${image.url}`);
    }
    //console.log(`Image generation result URL: ${results.result.status}`);
}

main().catch((err) => {
console.error("The sample encountered an error:", err);
});

使用以下命令运行该脚本:

node _ImageGeneration.js

输出

生成的图像的 URL 将输出到控制台中。

== Batch Image Generation ==
Image generation result URL: https://dalleproduse.blob.core.windows.net/private/images/5e7536a9-a0b5-4260-8769-2d54106f2913/generated_00.png?se=2023-08-29T19%3A12%3A57Z&sig=655GkWajOZ9ALjFykZF%2FBMZRPQALRhf4UPDImWCQoGI%3D&ske=2023-09-02T18%3A53%3A23Z&skoid=09ba021e-c417-441c-b203-c81e5dcd7b7f&sks=b&skt=2023-08-26T18%3A53%3A23Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02
Image generation result URL: https://dalleproduse.blob.core.windows.net/private/images/5e7536a9-a0b5-4260-8769-2d54106f2913/generated_01.png?se=2023-08-29T19%3A12%3A57Z&sig=B24ymPLSZ3HfG23uojOD9VlRFGxjvgcNmvFo4yPUbEc%3D&ske=2023-09-02T18%3A53%3A23Z&skoid=09ba021e-c417-441c-b203-c81e5dcd7b7f&sks=b&skt=2023-08-26T18%3A53%3A23Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02

注意

图像生成 API 附带内容审核筛选器。 如果服务将你的提示识别为有害内容,则不会返回生成的图像。 有关详细信息,请参阅内容筛选器一文。

清理资源

如果你想要清理和移除 Azure OpenAI 资源,可以删除该资源。 在删除资源之前,必须先删除所有已部署的模型。

后续步骤

使用本指南通过适用于 Go 的 Azure OpenAI SDK 开始生成图像。

库源代码 | | 示例

先决条件

  • Azure 订阅 - 免费创建订阅
  • 已在所需的 Azure 订阅中授予对 DALL-E 的访问权限。目前,仅能通过应用程序授予对此服务的访问权限。 可以通过在 https://aka.ms/oai/access 上填写表单来申请对 Azure OpenAI 的访问权限。 现有的 Azure OpenAI 客户需要重新输入表单才能访问 DALL-E。 如果有任何问题,请在此存储库上提出问题以联系我们。

注意

目前,必须提交应用程序才能访问 Azure OpenAI 服务。 若要申请访问权限,请填写此表单。 如果需要帮助,请在此存储库中提出问题以联系 Microsoft。

设置

检索密钥和终结点

若要成功对 Azure OpenAI 发出调用,需要一个终结点和一个密钥。

变量名称
ENDPOINT 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 或者,可以在“Azure OpenAI Studio”>“操场”>“代码视图”中找到该值。 示例终结点为:https://docs-test-001.openai.azure.com/
API-KEY 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 可以使用 KEY1KEY2

在 Azure 门户中转到你的资源。 可在“资源管理”部分中找到“密钥和终结点”部分。 复制终结点和访问密钥,因为在对 API 调用进行身份验证时需要这两项。 可以使用 KEY1KEY2。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。

Azure 门户中 Azure OpenAI 资源概述 UI 的屏幕截图,其中终结点和访问密钥的位置用红圈标示。

环境变量

为密钥和终结点创建和分配持久环境变量。

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

创建新的 Go 应用程序

打开命令提示符,然后导航到项目文件夹。 创建新文件 sample.go。

安装 Go SDK

使用以下命令安装 OpenAI Go SDK:

go get github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai@latest

或者,如果使用 dep,则在存储库中运行以下命令:

dep ensure -add github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai

使用 DALL-E 生成图像

在首选代码编辑器中打开 sample.go。

将以下代码添加到你的脚本:

package main

import (
	"context"
	"fmt"
	"net/http"
	"os"

	"github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai"
	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
)

func main() {
	azureOpenAIKey := os.Getenv("AZURE_OPENAI_API_KEY")

	// Ex: "https://<your-azure-openai-host>.openai.azure.com"
	azureOpenAIEndpoint := os.Getenv("AZURE_OPENAI_ENDPOINT")

	if azureOpenAIKey == "" || azureOpenAIEndpoint == "" {
		fmt.Fprintf(os.Stderr, "Skipping example, environment variables missing\n")
		return
	}

	keyCredential, err := azopenai.NewKeyCredential(azureOpenAIKey)

	if err != nil {
		// handle error
	}

	client, err := azopenai.NewClientWithKeyCredential(azureOpenAIEndpoint, keyCredential, nil)

	if err != nil {
		// handle error
	}

	resp, err := client.CreateImage(context.TODO(), azopenai.ImageGenerationOptions{
		Prompt:         to.Ptr("a painting of a cat in the style of Dali"),
		ResponseFormat: to.Ptr(azopenai.ImageGenerationResponseFormatURL),
	}, nil)

	if err != nil {
		// handle error
	}

	for _, generatedImage := range resp.Data {
		// the underlying type for the generatedImage is dictated by the value of
		// ImageGenerationOptions.ResponseFormat. In this example we used `azopenai.ImageGenerationResponseFormatURL`,
		// so the underlying type will be ImageLocation.

		resp, err := http.Head(*generatedImage.URL)

		if err != nil {
			// handle error
		}

		fmt.Fprintf(os.Stderr, "Image generated, HEAD request on URL returned %d\nImage URL: %s\n", resp.StatusCode, *generatedImage.URL)
	}
}

使用 go run 命令运行脚本:

go run sample.go

输出

生成的图像的 URL 将输出到控制台中。

Image generated, HEAD request on URL returned 200
Image URL: https://dalleproduse.blob.core.windows.net/private/images/d7b28a5c-ca32-4792-8c2a-6a5d8d8e5e45/generated_00.png?se=2023-08-29T17%3A05%3A37Z&sig=loqntaPypYVr9VTT5vpbsjsCz31g1GsdoQi0smbGkks%3D&ske=2023-09-02T18%3A53%3A23Z&skoid=09ba021e-c417-441c-b203-c81e5dcd7b7f&sks=b&skt=2023-08-26T18%3A53%3A23Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02

注意

图像生成 API 附带内容审核筛选器。 如果服务将你的提示识别为有害内容,则不会返回生成的图像。 有关详细信息,请参阅内容筛选器一文。

清理资源

如果你想要清理和删除 OpenAI 资源,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。

后续步骤

使用本指南开始通过 PowerShell 调用 Azure OpenAI 服务图像生成 REST API。

注意

图像生成 API 根据文本提示创建图像。 它不会编辑现有图像或创建变体。

先决条件

  • Azure 订阅。 免费创建一个。
  • 已在所需的 Azure 订阅中授予对 DALL-E 的访问权限。
  • 对于此任务,建议使用最新版本的 PowerShell 7,因为这些示例使用了 Windows PowerShell 5.1 中不可用的新功能。
  • 在美国东部区域创建的 Azure OpenAI 资源。 有关详细信息,请参阅使用 Azure OpenAI 创建资源和部署模型

注意

目前,必须提交应用程序才能访问 Azure OpenAI 服务。 若要申请访问权限,请填写此表单。 如果需要帮助,请在此存储库中提出问题以联系 Microsoft。

检索密钥和终结点

若要成功调用 Azure OpenAI API,需要有关 Azure OpenAI 资源的以下信息:

变量 名称
终结点 api_base 终结点值位于 Azure 门户中资源的“密钥和终结点”下。 也可在“Azure OpenAI Studio”>“操场”>“代码视图”中找到该值。 示例终结点为:https://docs-test-001.openai.azure.com/
api_key 密钥值也位于 Azure 门户中资源的“密钥和终结点”下。 Azure 为资源生成两个密钥。 可以使用其中任意一个值。

在 Azure 门户中转到你的资源。 在导航窗格中,选择“资源管理”下的“密钥和终结点”。 复制“终结点”值和访问密钥值。 可以使用 KEY 1 或 KEY 2 值。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。

屏幕截图显示 Azure 门户中的 Azure OpenAI 资源的“密钥和终结点”页面。

为密钥和终结点创建和分配持久环境变量。

环境变量

$Env:AZURE_OPENAI_API_KEY = 'YOUR_KEY_VALUE'
$Env:AZURE_OPENAI_ENDPOINT = 'YOUR_ENDPOINT'

创建新的 PowerShell 脚本

  1. 创建一个名为 quickstart.ps1 的新 PowerShell 文件。 在首选编辑器或 IDE 中打开新文件。

  2. 将 quickstart.ps1 的内容替换为以下代码。 在相应的字段中输入终结点 URL 和密钥。 将 prompt 的值更改为首选文本。

    # Azure OpenAI metadata variables
    $openai = @{
      api_key     = $Env:AZURE_OPENAI_API_KEY
      api_base    = $Env:AZURE_OPENAI_ENDPOINT # your endpoint should look like the following https://YOUR_RESOURCE_NAME.openai.azure.com/
      api_version = '2023-06-01-preview' # this may change in the future
    }
    
    # Text to describe image
    $prompt = 'A painting of a dog'
    
    # Header for authentication
    $headers = [ordered]@{
      'api-key' = $openai.api_key
    }
    
    # Adjust these values to fine-tune completions
    $body = [ordered]@{
       prompt = $prompt
       size   = '1024x1024'
       n      = 1
    } | ConvertTo-Json
    
     # Call the API to generate the image and retrieve the response
    $url = "$($openai.api_base)/openai/images/generations:submit?api-version=$($openai.api_version)"
    
    $submission = Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Post -ContentType 'application/json' -ResponseHeadersVariable submissionHeaders
    
     $operation_location = $submissionHeaders['operation-location'][0]
     $status = ''
     while ($status -ne 'succeeded') {
         Start-Sleep -Seconds 1
         $response = Invoke-RestMethod -Uri $operation_location -Headers $headers
         $status   = $response.status
     }
    
    # Set the directory for the stored image
    $image_dir = Join-Path -Path $pwd -ChildPath 'images'
    
    # If the directory doesn't exist, create it
    if (-not(Resolve-Path $image_dir -ErrorAction Ignore)) {
        New-Item -Path $image_dir -ItemType Directory
    }
    
    # Initialize the image path (note the filetype should be png)
    $image_path = Join-Path -Path $image_dir -ChildPath 'generated_image.png'
    
    # Retrieve the generated image
    $image_url = $response.result.data[0].url  # extract image URL from response
    $generated_image = Invoke-WebRequest -Uri $image_url -OutFile $image_path  # download the image
    return $image_path
    

    重要

    对于生产,请使用安全的方式存储和访问凭据,例如使用 Azure Key Vault 的 PowerShell Secret Management。 有关凭据安全性的详细信息,请参阅 Azure AI 服务安全性一文。

  3. 使用 PowerShell 运行脚本:

    ./quickstart.ps1
    

    脚本将会循环,直到生成的图像准备就绪。

输出

PowerShell 会从 Azure OpenAI 要求映像,并将输出映像存储在指定目录中的 generated_image.png 文件中。 为方便起见,会在脚本末尾返回文件的完整路径。

图像生成 API 附带内容审核筛选器。 如果服务将你的提示识别为有害内容,则不会生成图像。 有关详细信息,请参阅事件筛选

清理资源

如果你想要清理和删除 OpenAI 资源,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。

后续步骤