.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 の使用方法を学習します。

前提条件

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

すべてのクイックスタートのサンプル アプリが含まれる 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. ターミナルまたはコマンド プロンプトから、openai\01-HikeBenefitsSummary ディレクトリに移動します。

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

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

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

  2. 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 アプリにユーザー シークレットが構成され、テストできるようになりました。

次のステップ