銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

MS LearnのAOAIのDALL-E 3を使用して画像を生成するサンプルを動かす方法

Azure OpenAI Serviceを試しているのですが、以下のページのDALL-E 3を使うC#のサンプルコードが動かなかったので、2024年2月25日現在で動かした手順を載せておきます。フィードバック済みです。

learn.microsoft.com

まず前提条件が足りていません。DALL-E 3モデルをデプロイしておく必要があるのですが、このためにはOpenAI serviceリソースをSweden Centralに作成しておく必要があります*1

OpenAI serviceを作成したら、ドキュメントの手順通りエンドポイントとキーをメモっておきます。

次にAzure OpenAI Studioに移動して、管理>デプロイメニューを開きます。ここで、dall-e-3 モデルのモデルがデプロイされていることを確認します。自分は最初からデプロイされていましたが、ない場合は新規にデプロイすればよいと思われます。ここで、デプロイ名をメモっておきます。

そして動いたサンプルコードは以下の通りです。

using Azure.AI.OpenAI;
using Azure;

var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
var key = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY");

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

var imageGenerations = await client.GetImageGenerationsAsync(
    new ImageGenerationOptions()
    {
        Prompt = "a happy monkey eating a banana, in watercolor",
        Size = ImageSize.Size1024x1024,
        DeploymentName = "Dalle3"
    });

// 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);

Environment.GetEnvironmentVariable でないと動かないのは比較的わかりやすいですが、ImageGenerationOptions のプロパティに DeploymentName が指定されていないと例外がスローされます。値は先ほどメモっておいたdall-e-3モデルのデプロイ名です。また自分が試したときは Sizeプロパティが ImageSize.Size256x256 だとエラーになりました。

以上の手順でドキュメント通り、生成された画像のURLが表示されました。

*1:もしかしたらこのドキュメントはDALL-E 2向けかもしれませんが、いずれにせよこのドキュメントのままでは動きませんでした