演習 - 関数を自動的に呼び出す

完了

Semantic Kernel SDK を使うと、カーネル内で参照される関数とプロンプトを自動的に調整できます。 このツールは、関数やプロンプトを手動で呼び出すのではなく、時間を節約するのに役立ち、アプリケーションをよりスマートにすることができます。 試してみましょう。

開発環境を準備する

これらの演習では、スターター プロジェクトを使用できます。 スターター プロジェクトを設定するには、次の手順を使用します。

重要

これらの手順を完了するには、Visual Studio Code と .NET Framework 8.0 がインストールされている必要があります。 Visual Studio Code C# 開発キット拡張機能のインストールが必要になる場合もあります。

  1. Visual Studio Code を開きます。

  2. Visual Studio Code の[開始] セクションで、[Git リポジトリのクローン] を選択してください。

  3. URL バーに、「https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git」と入力してください

  4. エクスプローラーで、デスクトップ内のフォルダーなど、見つけやすく覚えやすい場所に新しいフォルダーを作成してください。

  5. [リポジトリの場所を選択] ボタンをクリックしてください。

    プロジェクトを正常にクローンするには、GitHub にサインインする必要があります。

  6. Visual Studio Code でプロジェクトを開く

  7. エクスプローラーで M05-auto-invoke-functions/M05-Project フォルダーを右クリックし、[統合ターミナルで開く] をクリックします

  8. M05-auto-invoke-functions/M05-Project フォルダーを展開します

    "Program.cs" ファイルが表示されます。

  9. Program.cs ファイルを開き、以下の変数をお使いの Azure OpenAI Services のデプロイ名、API キー、エンドポイントに更新します。

    string yourDeploymentName = "";
    string yourEndpoint = "";
    string yourAPIKey = "";
    

これで、演習を始める準備ができました。 がんばってください。

ユーザーにコンサートを提案する

  1. "Plugins" フォルダーに、"MusicConcertPlugin.cs" という名前の新しいファイルを作成します

  2. MusicConcertPlugin ファイルに、次のコードを追加します。

    using System.ComponentModel;
    using Microsoft.SemanticKernel;
    
    public class MusicConcertPlugin
    {
        [KernelFunction, Description("Get a list of upcoming concerts")]
        public static string GetTours()
        {
            string dir = Directory.GetCurrentDirectory();
            string content = File.ReadAllText($"{dir}/data/concertdates.txt");
            return content;
        }
    }
    

    GetTours 関数は「concertdates.txt」という名前のファイルを読み取り、その内容を返します。 この関数は、今後開催されるコンサートの一覧を取得するために使われます。

    次に、ユーザーが最近聴いた曲の情報を元に、LLM がおすすめのコンサートを提案するプロンプトを作成します。

  3. "プロンプト" フォルダーに、"SuggestConcert" という名前の新しいフォルダーを作成します

  4. 次の内容を含む "config.json" ファイルを "SuggestConcert" フォルダーに作成します。

    {
        "schema": 1,
        "type": "completion",
        "description": "Suggest a concert to the user",
        "execution_settings": {
            "default": {
                "max_tokens": 4000,
                "temperature": 0
            }
        },
        "input_variables": [
            {
                "name": "upcomingConcerts",
                "description": "A list of artist's upcoming concerts",
                "required": true
            },
            {
                "name": "recentlyPlayedSongs",
                "description": "A list of songs recently played by the user",
                "required": true
            },
            {
                "name": "location",
                "description": "The user's location",
                "required": true
            }
        ]
    }
    
  5. 次の内容を含む "skprompt.txt" ファイルを "SuggestConcert" フォルダーに作成します。

    Based on the user's recently played songs:
    {{$recentlyPlayedSongs}}
    
    And a list of upcoming concerts:
    {{$upcomingConcerts}}
    
    Suggest an upcoming concert. The user lives in {{$location}}, 
    please recommend a relevant concert that is close to their location.
    

    このプロンプトでは、ユーザーが最近聴いた曲と現在地の情報を元に、LLM がおすすめのコンサートを提案するように指示しています。 次に、自動関数呼び出し設定を有効にします。

  6. Program.cs ファイルを開き、次の using ステートメントを追加します。

    using Microsoft.SemanticKernel.Connectors.OpenAI;
    

    このパッケージにより、自動関数呼び出し設定を使用できるようになります。

  7. Program.cs ファイルを次のコードに更新します。

    kernel.ImportPluginFromType<MusicLibraryPlugin>();
    kernel.ImportPluginFromType<MusicConcertPlugin>();
    kernel.ImportPluginFromPromptDirectory("Prompts");
    
    OpenAIPromptExecutionSettings settings = new()
    {
        ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
    };
    
    string prompt = @"I live in Portland OR USA. Based on my recently 
        played songs and a list of upcoming concerts, which concert 
        do you recommend?";
    
    var result = await kernel.InvokePromptAsync(prompt, new(settings));
    
    Console.WriteLine(result);
    
  8. ターミナルに「dotnet run」と入力します

    生成された提案では、最近再生された曲と場所に基づいてコンサートをお勧めします。 出力は次の応答のようになります。

    Based on your recently played songs and your location in Portland, OR, I would recommend attending the upcoming concert of Lisa Taylor. She will be performing in Portland on April 16, 2024. This concert would be a great opportunity for you to enjoy live music and experience Lisa Taylor' beautiful songs.
    

    セマンティック カーネルにより、使用する適切なプラグイン関数を自動的に検出し、正しいパラメーターを渡すことができます。 位置情報を変更して、おすすめがどのように変わるかを確認してみてください。 また、プロンプトを変更して、ライブラリから曲を提案するように LLM に指示することもできます。

AutoInvokeKernelFunctions 設定を指定すると、セマンティック カーネルにより、カーネルに追加された関数とプロンプトを自動的に呼び出すことができます。 このツールを使うと、少ないコードを使って動的で堅牢なアプリケーションを作成できます。