演習 - ネイティブ関数を作成する
この演習では、ユーザーの "最近再生された" リストに曲を追加するネイティブ関数を作成します。 後で、最近再生した曲のリストを使用して、カスタマイズされたレコメンデーションを提供できます。 それでは始めましょう。
開発環境を準備する
これらの演習では、スターター プロジェクトを使用できます。 スターター プロジェクトを設定するには、次の手順を使用します。
重要
これらの手順を完了するには、Visual Studio Code と .NET Framework 8.0 がインストールされている必要があります。 Visual Studio Code C# 開発キット拡張機能のインストールが必要になる場合もあります。
Visual Studio Code を開きます。
Visual Studio Code の[開始] セクションで、[Git リポジトリのクローン] を選択してください。
URL バーに、「
https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git
」と入力してくださいエクスプローラーで、デスクトップ内のフォルダーなど、見つけやすく覚えやすい場所に新しいフォルダーを作成してください。
[リポジトリの場所を選択] ボタンをクリックしてください。
プロジェクトを正常にクローンするには、GitHub にサインインする必要があります。
Visual Studio Code でプロジェクトを開きます。
エクスプローラーで、M03-give-your-ai-agent-skills/M03-Project フォルダーを右クリック し、[統合ターミナル で開く] をクリックします。
M03-give-your-ai-agent-skills/M03-Project フォルダーを展開します。
"Program.cs" ファイルが表示されます。
Program.cs ファイルを開き、以下の変数をお使いの Azure OpenAI Services のデプロイ名、API キー、エンドポイントに更新します。
string yourDeploymentName = ""; string yourEndpoint = ""; string yourKey = "";
これで、演習を始める準備ができました。 がんばってください。
音楽ライブラリ プラグインを作成する
"Project" ディレクトリに新しいフォルダーを作成し、"Plugins" という名前を付けます。
"Plugins" フォルダーに、新しいファイル "MusicLibrary.cs" を作成します
次のコードを入力します。
using System.ComponentModel; using System.Text.Json; using System.Text.Json.Nodes; using Microsoft.SemanticKernel; public class MusicLibraryPlugin { [KernelFunction, Description("Get a list of music recently played by the user")] public static string GetRecentPlays() { string dir = Directory.GetCurrentDirectory(); string content = File.ReadAllText($"{dir}/data/recentlyplayed.txt"); return content; } }
このコードでは、
KernelFunction
デコレーターを使用してネイティブ関数を宣言します。Description
デコレーターも使用して、関数の動作の説明を追加します。 現時点では、ユーザーの最近再生したものリストが "recentlyplayed.txt" というテキスト ファイルに保存されていると仮定できます。 次に、リストに曲を加えるコードを追加できます。MusicLibraryPlugin
クラスに次のコードを追加します。[KernelFunction, Description("Add a song to the recently played list")] public static string AddToRecentlyPlayed( [Description("The name of the artist")] string artist, [Description("The title of the song")] string song, [Description("The song genre")] string genre) { // Read the existing content from the file string filePath = "data/recentlyplayed.txt"; string jsonContent = File.ReadAllText(filePath); var recentlyPlayed = (JsonArray) JsonNode.Parse(jsonContent); var newSong = new JsonObject { ["title"] = song, ["artist"] = artist, ["genre"] = genre }; recentlyPlayed.Insert(0, newSong); File.WriteAllText(filePath, JsonSerializer.Serialize(recentlyPlayed, new JsonSerializerOptions { WriteIndented = true })); return $"Added '{song}' to recently played"; }
このコードで、アーティスト、曲、ジャンルを文字列として受け入れる関数を作成します。 関数の
Description
に加えて、入力変数の説明を追加することもできます。 このコードは、ファイルから既存のコンテンツを読み取り、解析して、新しい曲をリストに追加します。 その後、更新されたリストがファイルに書き戻されます。 次に、いくつかのサンプル データを含む "recentlyplayed.txt" ファイルを作成します。"M03-Project" フォルダーに新しいフォルダー "data" を作成します。
"data" フォルダーに新しいファイル "recentlyplayed.txt" を作成し、次の内容を貼り付けます。
[ { "title": "Loanh Quanh", "artist": "Ly Hoa", "genre": "indie, folk" }, { "title": "Kalam Eineh", "artist": "Yasemin", "genre": "pop, Egyptian pop" }, { "title": "I Miss You", "artist": "Chishin", "genre": "hiphop, rap" }, { "title": "4EVER", "artist": "Gaby", "genre": "alternative, indie" } ]
次に、新しいプラグインをインポートして呼び出し、リストを変更しましょう。
次のコードで "Program.cs" ファイルを更新します。
var kernel = builder.Build(); kernel.ImportPluginFromType<MusicLibraryPlugin>(); var result = await kernel.InvokeAsync( "MusicLibraryPlugin", "AddToRecentlyPlayed", new() { ["artist"] = "Tiara", ["song"] = "Danse", ["genre"] = "French pop, electropop, pop" } ); Console.WriteLine(result);
このコードでは、
ImportPluginFromType
を使用してMusicLibraryPlugin
をカーネルにインポートします。 次に、使用するプラグインの名前と呼び出す関数を使用してInvokeAsync
を呼び出します。 また、アーティスト、曲、ジャンルを引数として渡します。ターミナルに「
dotnet run
」を入力してコードを実行します。次の出力が表示されます。
Added 'Danse' to recently played
"recentlyplayed.txt" を開くと、リストに追加した新しい曲が表示されます。 上出来