.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 を使用する方法について理解を深めてください。
前提条件
- .NET 8 SDK - .NET 8 SDK をインストールします。
- Azure サブスクリプション。無料で作成できます。
- Azure Developer CLI - Azure Developer CLI をインストールまたは更新します。
- Azure OpenAI サービスにアクセスします。
- Windows では PowerShell
v7+
が必要です。 バージョンを検証するには、ターミナルでpwsh
を実行します。 現在のバージョンが返されるはずです。 エラーが返された場合は、コマンドdotnet tool update --global PowerShell
を実行します。
サンプル プロジェクトを入手する
すべてのクイックスタートのサンプル アプリが含まれる GitHub リポジトリをクローンします。
git clone https://github.com/dotnet/ai-samples.git
Azure OpenAI サービスを作成する
- Azure Developer CLI
- Azure CLI
- Azure Portal
サンプルの GitHub リポジトリは、Azure Developer CLI (azd
) テンプレートとして構成されています。azd
がこれを使用して、Azure OpenAI サービスとモデルをプロビジョニングできます。
ターミナルまたはコマンド プロンプトで、サンプル リポジトリの src\quickstarts\azure-openai ディレクトリに移動します。
azd up
コマンドを実行して、Azure OpenAI リソースをプロビジョニングします。 Azure OpenAI サービスの作成とモデルのデプロイには数分かかる場合があります。azd up
azd
は、OpenAI アクセス キーなど、サンプル アプリに必要なユーザー シークレットも構成します。Note
azd up
のデプロイ中にエラーが発生した場合は、「トラブルシューティング」セクションを参照してください。
ハイキング イメージのサンプルを試す
リポジトリをクローンします: dotnet/ai-samples
次のコマンドを実行して、OpenAI API キーをサンプル アプリのシークレットとして構成します。
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key>
dotnet run
コマンドを使用してアプリを実行します。dotnet run
ターミナルまたはコマンド プロンプトから、
azure-openai\05-HikeImages
ディレクトリに移動します。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 アプリにユーザー シークレットが構成され、テストできるようになりました。
次のステップ
.NET