準備
Blazor アプリケーションが唯一のプロジェクトである既存の .NET ソリューションを更新しようとしています。 このプロジェクトには、プレースホルダーを使用して実装されるデータ ストレージと会話のサービス クラスが含まれています。 ここでは、プロジェクトの全体的なゴールと、データ ストアと会話機能を実装する方法について説明します。 さらに、必要な Azure リソースを設定する方法について説明します。
プロジェクトの概要
このプロジェクトのゴールは、データ ストレージと入力候補用の 2 つのサービス クラスを実装することです。 データ ストレージ サービス クラスの場合は、Azure Cosmos DB for NoSQL .NET SDK を使用して、既存のコンテナー内の複数の項目を作成、更新、クエリ、削除します。 チャットの入力候補の場合は、Azure OpenAI .NET SDK を使用してリクエストを送信し、応答を解析します。
実行する必要がある主なタスクは次のとおりです。
- Azure Cosmos DB for NoSQL と Azure OpenAI リソースを Azure にデプロイします。
- デプロイした Azure Cosmos DB for NoSQL と Azure OpenAI リソースの資格情報を取得します。
- Visual Studio Code でスターター ソリューションを開きます。
- .NET SDK を使用して、Azure Cosmos DB for NoSQL をデータ ストレージ サービスとして実装します。
- .NET SDK を使用して、会話形式のインターフェイスとして Azure OpenAI を実装します。
- アプリケーションの動作を確認します。
段取り
このプロジェクトを完了するには、Azure Cosmos DB for NoSQL アカウントと Azure OpenAI アカウントが必要です。 このプロセスを効率化するには、これらのアカウントの両方を使用して Bicep テンプレートを Azure にデプロイします。
開発環境を構成する
開発コンテナー環境は、このプロジェクトのすべての演習を完了するために必要なすべての依存関係で使用できます。 GitHub Codespaces は、Visual Studio Code for the Web をユーザー インターフェイスとして使用して、GitHub によって管理される開発コンテナーを実行します。 正しい開発者ツールと、このトレーニング モジュールを完了するために事前インストールされた依存関係を持つ最も簡単な開発環境として、GitHub Codespaces を使用します。
重要
すべての GitHub アカウントでは、2 つのコア インスタンスで毎月最大 60 時間無料で Codespaces を使用できます。 詳細については、「GitHub Codespaces に月単位で含まれるストレージとコア時間」を参照してください。
このユニットの冒頭にある [アクティブな Codespaces] オプションを選び、新しい GitHub Codespace を作成するプロセスを開始します。
[codespace の作成] ページ上で、codespace の構成設定を確認し、それから [新しい Codespace の作成] を選択します。
Codespace が起動するまで待ちます。 この起動プロセスには数分かかることがあります。
codespace で新しいターミナルを開きます。
Azure CLI が環境にインストールされていることを確認します。
az --version
.NET 8 が環境にインストールされていることを確認します。
dotnet --list-sdks
プロジェクト ファイルがある
src
ディレクトリに移動します。cd src
.NET プロジェクトをビルドします。
dotnet build
ターミナルを閉じます。
このプロジェクトの残りの演習は、この開発コンテナーのコンテキストで行われます。
重要
このトレーニング モジュールの残りの部分では、GitHub Codespace を実行したままにしておきます。
テンプレートからインフラストラクチャをデプロイする
このプロジェクトでは、Azure Resource Manager のテンプレート化されたデプロイとアプリケーション コードの両方に azure-samples/cosmosdb-chatgpt GitHub リポジトリを使用します。 この手順では、Bicep テンプレートを使用して新しいデプロイを作成し、"コードとしてのインフラストラクチャ" を使用してリソースをデプロイします。
ヒント
この "ゼロタッチ" の Bicep テンプレートには、Azure App Service で実行される最終的なアプリケーションも含まれています。 完全に機能するソリューションを表示する場合は、いつでもこれを確認することができます。
Azure CLI にサインインします。
az login --use-device-code
作成する Azure リソース グループの名前 (
mslearn-cosmos-openai
) を使って、resourceGroupName という名前の新しいシェル変数を作成します。resourceGroupName="mslearn-cosmos-openai"
リソース グループは、
az group create
を使用して作成します。az group create \ --name $resourceGroupName \ --location "eastus"
az deployment group create
を使用して azuredeploy.json テンプレート ファイルをリソース グループにデプロイします。az deployment group create \ --resource-group $resourceGroupName \ --name zero-touch-deployment \ --template-uri https://raw.githubusercontent.com/Azure-Samples/cosmosdb-chatgpt/start/azuredeploy.json
デプロイが完了するまで待ってから、このプロジェクトを進めてください。
Note
平均して、このデプロイには 5 分から 10 分かかる場合があります。
Azure Cosmos DB for NoSQL と Azure OpenAI アカウントの資格情報を取得する
テンプレートを使用して Azure Cosmos DB for NoSQL アカウントと Azure OpenAI アカウントをデプロイし、その資格情報を Azure App Service Web アプリの構成に格納しました。 これで、Azure portal または Azure CLI を使用して各サービスの資格情報を取得することができます。 Azure CLI から az webapp config
使用して、ローカル開発環境で使用する Azure OpenAI と Azure Cosmos DB の資格情報を取得します。 このセクションでは、さまざまなコマンドの出力をフィルター処理して、Azure OpenAI と Azure Cosmos DB for NoSQL の両方の .NET ライブラリで使うエンドポイントと接続文字列を返します。
まず、
az webapp list
を使用して、リソース グループ内で実行中のすべての Web アプリケーションの一覧を取得します。az webapp list \ --resource-group $resourceGroupName \ --query "[?state=='Running'].name"
ここで、同じクエリをもう一度実行しますが、タブ区切り値 (
tsv
) 形式の配列から最初の結果のみが返されます。webAppName=$( \ az webapp list \ --resource-group $resourceGroupName \ --query "[?state=='Running'].name | [0]" \ --output tsv \ )
ヒント
変数の値が正しいかどうかわからない場合は、ターミナルで単純に
echo $webAppName
を実行して値を確認します。az webapp config appsettings list
を使用して、Web アプリのアプリケーション設定の一覧を取得します。az webapp config appsettings list \ --name $webAppName \ --resource-group $resourceGroupName
Azure Cosmos DB for NoSQL アカウントの名前が nybncrsna76fo-cosmos-nosql で、Azure OpenAI アカウントの名前が nybncrsna76fo-openai である場合の出力例 (一部省略) を次に示します。 この例のキーは架空のものです。
[ { "setting": "COSMOSDB__ENDPOINT", "value": "https://nybncrsna76fo-cosmos-nosql.documents.azure.com:443/" }, { "setting": "COSMOSDB__KEY", "value": "Aj2OSQqWhXfFzkITIi4MIbocWAAoBCUWnSPzHlQbDYA3TiyZCJlk8A6R1l6WqD45BxAG5vrsyQ4SCXEkPS1pLh==" }, ... { "setting": "OPENAI__ENDPOINT", "value": "https://nybncrsna76fo-openai.openai.azure.com/" }, { "setting": "OPENAI__KEY", "value": "4bf98cb194cdf0f9001eae3259a76ed8" }, ... ]
Azure Cosmos DB for NoSQL アカウントと Azure OpenAI アカウントの両方のエンドポイントとキーの値を記録します。 これらの資格情報は、このプロジェクトの後半で各アカウントに接続するために使用します。