.NET で AI を使用してイメージを生成する

単純な .NET 8 コンソール チャット アプリケーションを作成することで、AI の利用を開始します。 アプリケーションはローカルで実行され、OpenAI dall-e-3 モデルを使用してポスト カード イメージを生成し、友人をハイキングに誘います。 次の手順に従って、OpenAI にアクセスし、Semantic Kernel の使用方法を学習します。

前提条件

  • .NET 8.0 SDK - .NET 8.0 SDK をインストールします
  • このサンプルを実行できるようにするための OpenAI の API キー
  • Windows では PowerShell v7+ が必要です。 バージョンを検証するには、ターミナルで pwsh を実行します。 現在のバージョンが返されるはずです。 エラーが返された場合は、コマンド dotnet tool update --global PowerShell を実行します。

単純な .NET 8 コンソール チャット アプリケーションを作成することで、AI の利用を開始します。 アプリケーションはローカルで実行され、OpenAI dall-e-3 モデルを使用してポスト カード イメージを生成し、友人をハイキングに誘います。 次の手順に従って Azure OpenAI をプロビジョニングし、.NET Azure OpenAI SDK を使用する方法について理解を深めてください。

前提条件

サンプル プロジェクトを入手する

すべてのクイックスタートのサンプル アプリが含まれる GitHub リポジトリをクローンします。

git clone https://github.com/dotnet/ai-samples.git

Azure OpenAI サービスを作成する

サンプルの GitHub リポジトリは、Azure Developer CLI (azd) テンプレートとして構成されています。azd がこれを使用して、Azure OpenAI サービスとモデルをプロビジョニングできます。

  1. ターミナルまたはコマンド プロンプトで、サンプル リポジトリの src\quickstarts\azure-openai ディレクトリに移動します。

  2. azd up コマンドを実行して、Azure OpenAI リソースをプロビジョニングします。 Azure OpenAI サービスの作成とモデルのデプロイには数分かかる場合があります。

    azd up
    

    azd は、OpenAI アクセス キーなど、サンプル アプリに必要なユーザー シークレットも構成します。

    Note

    azd up のデプロイ中にエラーが発生した場合は、「トラブルシューティング」セクションを参照してください。

ハイキング イメージのサンプルを試す

  1. リポジトリをクローンします: dotnet/ai-samples

  2. 次のコマンドを実行して、OpenAI API キーをサンプル アプリのシークレットとして構成します。

    dotnet user-secrets init
    dotnet user-secrets set OpenAIKey <your-openai-key>
    
  3. dotnet run コマンドを使用してアプリを実行します。

    dotnet run
    
  1. ターミナルまたはコマンド プロンプトから、azure-openai\05-HikeImages ディレクトリに移動します。

  2. dotnet run コマンドを使用してアプリを実行します。

    dotnet run
    

    ヒント

    エラー メッセージが表示される場合は、Azure OpenAI リソースのデプロイが完了していない可能性があります。 しばらく待ってからもう一度お試しください。

コードを調べる

このアプリケーションでは、Microsoft.SemanticKernel パッケージを使用して、OpenAI サービスへの要求を送受信します。

Program.cs ファイルには、すべてのアプリ コードが含まれます。 コードの最初の数行によって、構成値が設定され、dotnet user-secrets コマンドを使用して以前に設定された OpenAI キーが取得されます。

var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string key = config["OpenAIKey"];

OpenAITextToImageService サービスは、要求と応答を支援します。

OpenAITextToImageService textToImageService = new(key, null);

このアプリケーションでは、Microsoft.SemanticKernel パッケージを使用して、Azure OpenAI サービスへの要求を送受信します。

Program.cs ファイルには、すべてのアプリ コードが含まれています。 最初の数行のコードでは、アプリケーションのプロビジョニング中に dotnet user-secrets で設定されたシークレットと構成値が読み込まれます。

// Retrieve the local secrets saved during the Azure deployment
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string endpoint = config["AZURE_OPENAI_ENDPOINT"];
string deployment = config["AZURE_OPENAI_GPT_NAME"];
string key = config["AZURE_OPENAI_KEY"];

AzureOpenAITextToImageService サービスは、要求と応答を支援します。

AzureOpenAITextToImageService textToImageService = new(deployment, endpoint, key, null);

システム プロンプトを追加して、モデルにコンテキストと指示を提供します。 適切なイメージ生成プロンプトでは、イメージの内容、使用する色、目的のスタイル、およびその他の要素を明確に説明する必要があります。

GenerateImageAsync 関数は、ユーザー プロンプトおよびイメージのサイズと品質に関する構成に基づいて、応答を生成するようにモデルに指示します。

// Generate the image
string imageUrl = await textToImageService.GenerateImageAsync("""
    A postal card with a happy hiker waving and a beautiful mountain in the background.
    There is a trail visible in the foreground.
    The postal card has text in red saying: 'You are invited for a hike!'
    """, 1024, 1024);

Console.WriteLine($"The generated image is ready at:\n{imageUrl}");

プロンプトをカスタマイズして、モデルによって生成されたイメージをカスタマイズします。

リソースをクリーンアップする

サンプル アプリケーションやリソースが不要になったら、対応するデプロイとすべてのリソースを削除します。

azd down

トラブルシューティング

Windows では、azd up の実行後に次のエラー メッセージが表示されることがあります。

postprovision.ps1 はデジタル署名されていません。 スクリプトはシステムで実行されません

postprovision.ps1 スクリプトは、アプリケーションで使用される .NET ユーザー シークレットを設定するために実行されます。 このエラーを回避するために、次の PowerShell コマンドを実行します。

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

azd up コマンドを再実行します。

もう 1 つの考えられるエラー:

'pwsh' が内部または外部コマンド、操作可能プログラムまたはバッチ ファイルとして認識されない。 警告: 'postprovision' フックは終了コード '1' で失敗しました、パス: '.\infra\post-script\postprovision.ps1'。 : 終了コード: 1 ContinueOnError が true に設定されているため、実行が継続されます。

postprovision.ps1 スクリプトは、アプリケーションで使用される .NET ユーザー シークレットを設定するために実行されます。 このエラーを回避するには、次の PowerShell コマンドを使用して手動でスクリプトを実行します。

.\infra\post-script\postprovision.ps1

.NET AI アプリにユーザー シークレットが構成され、テストできるようになりました。

次のステップ