.NET で AI チャット アプリを使用してテキストを要約する
テキストを要約する簡単な .NET 8.0 コンソール チャット アプリケーションを作成して、AI の利用を開始します。 アプリケーションはローカルで実行され、OpenAI gpt-3.5-turbo
モデルを使用します。 次の手順に従って、OpenAI にアクセスし、Semantic Kernel の使用方法を学習します。
前提条件
- .NET 8.0 SDK - .NET 8.0 SDK をインストールします。
- このサンプルを実行できるようにするための OpenAI の API キー。
- Windows では PowerShell
v7+
が必要です。 バージョンを検証するには、ターミナルでpwsh
を実行します。 現在のバージョンが返されるはずです。 エラーが返された場合は、コマンドdotnet tool update --global PowerShell
を実行します。
テキストを要約する簡単な .NET 8.0 コンソール チャット アプリケーションを作成して、AI の利用を開始します。 アプリはローカルで実行され、Azure OpenAI にデプロイされた OpenAI gpt-35-turbo
モデルに接続します。 次の手順に従って Azure OpenAI サービスをプロビジョニングし、Semantic Kernel の使用方法を学習します。
前提条件
- .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
のデプロイ中にエラーが発生した場合は、「トラブルシューティング」セクションを参照してください。
ハイキング特典のサンプルを試す
ターミナルまたはコマンド プロンプトから、
openai\01-HikeBenefitsSummary
ディレクトリに移動します。次のコマンドを実行して、OpenAI API キーをサンプル アプリのシークレットとして構成します。
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key>
dotnet run
コマンドを使用してアプリを実行します。dotnet run
ターミナルまたはコマンド プロンプトから、
azure-openai\01-HikeBenefitsSummary
ディレクトリに移動します。dotnet run
コマンドを使用してアプリを実行します。dotnet run
ヒント
エラー メッセージが表示される場合は、Azure OpenAI リソースのデプロイが完了していない可能性があります。 しばらく待ってからもう一度お試しください。
コードを調べる
アプリは Microsoft.SemanticKernel
パッケージを使用して OpenAI サービスへの要求を送受信します。
Program.cs ファイルには、すべてのアプリ コードが含まれています。 コードの最初の数行では構成値を設定し、dotnet user-secrets
コマンドを使用して以前に設定された OpenAI キーを取得します。
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string model = "gpt-3.5-turbo";
string key = config["OpenAIKey"];
Kernel
クラスを使用すると、要求と応答が容易になり、OpenAIChatCompletion
サービスが登録されます。
// Create a Kernel containing the OpenAI Chat Completion Service
Kernel kernel = Kernel.CreateBuilder()
.AddOpenAIChatCompletion(model, key)
.Build();
このアプリケーションでは、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"];
Kernel
クラスを使用すると、要求と応答が容易になり、OpenAIChatCompletion
サービスが登録されます。
// Create a Kernel containing the Azure OpenAI Chat Completion Service
Kernel kernel = Kernel.CreateBuilder()
.AddAzureOpenAIChatCompletion(deployment, endpoint, key)
.Build();
Kernel
が作成されると、アプリ コードは benefits.md
ファイルの内容を読み取り、それを使用してモデルの prompt
を作成します。 プロンプトは、ファイル テキストの内容を要約するようにモデルに指示します。
// Create and print out the prompt
string prompt = $"""
Please summarize the the following text in 20 words or less:
{File.ReadAllText("benefits.md")}
""";
Console.WriteLine($"user >>> {prompt}");
InvokePromptAsync
関数は、prompt
をモデルに送信して応答を生成します。
// Submit the prompt and print out the response
string response = await kernel.InvokePromptAsync<string>(
prompt,
new(new OpenAIPromptExecutionSettings()
{
MaxTokens = 400
})
);
Console.WriteLine($"assistant >>> {response}");
ファイルのテキスト内容または概要の長さをカスタマイズして、応答の違いを確認します。
リソースをクリーンアップする
サンプル アプリケーションやリソースが不要になったら、対応するデプロイとすべてのリソースを削除します。
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