Cvičení – vytvoření nativních funkcí
V tomto cvičení vytvoříte nativní funkci, která přidá skladbu do seznamu Naposledy přehrával uživatele. Později můžete pomocí seznamu naposledy přehrávaných skladeb poskytnout přizpůsobená doporučení. Pusťme se do toho.
Příprava vývojového prostředí
Pro tato cvičení je k dispozici počáteční projekt, který můžete použít. Pomocí následujících kroků nastavte počáteční projekt:
Důležité
K provedení těchto kroků musíte mít nainstalovaný Visual Studio Code a rozhraní .NET Framework 8.0. Možná budete muset nainstalovat rozšíření Visual Studio Code C# Dev Kit.
Otevřete Visual Studio Code.
V části Start editoru Visual Studio Code vyberte Klonovat úložiště Git.
Na panelu URL zadejte
https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git
V Průzkumník souborů vytvořte novou složku v umístění, které je snadné najít a zapamatovat, například složku v Desktopu.
Klikněte na tlačítko Vybrat jako cíl úložiště.
Abyste mohli projekt úspěšně naklonovat, musíte být přihlášení k GitHubu.
Otevřete projekt v editoru Visual Studio Code.
V Průzkumníku klikněte pravým tlačítkem myši na složku M03-give-your-ai-agent-skills/M03-Project a klikněte na Otevřít v integrovaném terminálu.
Rozbalte složku M03-give-your-ai-agent-skills/M03-Project.
Měl by se zobrazit soubor "Program.cs".
Otevřete soubor Program.cs a aktualizujte následující proměnné názvem nasazení služby Azure OpenAI Services, klíčem rozhraní API a koncovým bodem.
string yourDeploymentName = ""; string yourEndpoint = ""; string yourKey = "";
Teď jste připraveni zahájit cvičení. Hodně zdaru!
Vytvoření modulu plug-in hudební knihovny
V adresáři Project vytvořte novou složku a pojmenujte ji Moduly plug-in.
Ve složce Plugins vytvořte nový soubor MusicLibrary.cs.
Zadejte následující kód:
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; } }
V tomto kódu pomocí dekorátoru
KernelFunction
deklarujete svou nativní funkci. Dekorátor také použijeteDescription
k přidání popisu toho, co funkce dělá. Prozatím můžete předpokládat, že seznam posledních přehrávání uživatele je uložený v textovém souboru s názvem "recentlyplayed.txt". Dále můžete přidat kód pro přidání skladby do seznamu.Do třídy přidejte následující kód
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"; }
V tomto kódu vytvoříte funkci, která přijímá interpreta, skladbu a žánr jako řetězce. Kromě
Description
funkce přidáte také popisy vstupních proměnných. Tento kód přečte existující obsah ze souboru, parsuje ho a přidá novou skladbu do seznamu. Potom se aktualizovaný seznam zapíše zpět do souboru. Dále vytvoříte soubor recentlyplayed.txt s ukázkovými daty.Ve složce M03-Project vytvořte novou složku Data.
Ve složce data vytvořte nový soubor recentlyplayed.txt a vložte následující obsah:
[ { "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" } ]
Teď seznam upravíme importem a vyvoláním nového modulu plug-in.
Aktualizujte soubor Program.cs následujícím kódem:
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);
V tomto kódu importujete
MusicLibraryPlugin
do jádra pomocíImportPluginFromType
. Potom zavoláteInvokeAsync
s názvem modulu plug-in, který chcete použít, a funkcí, kterou chcete volat. Také předáváte interpreta, skladbu a žánr jako argumenty.Spusťte kód zadáním
dotnet run
do terminálu.Měl by se zobrazit následující výstup:
Added 'Danse' to recently played
Otevřete recentlyplayed.txt a měli byste vidět novou skladbu přidanou do seznamu. Skvělá práce!