Ćwiczenie — tworzenie funkcji natywnych
W tym ćwiczeniu utworzysz funkcję natywną, która dodaje piosenkę do listy "Ostatnio odtwarzane" użytkownika. Później możesz użyć listy ostatnio odtwarzanych piosenek, aby udostępnić dostosowane zalecenia. Zaczynamy!
przygotowywanie środowiska programistycznego
W tych ćwiczeniach jest dostępny projekt startowy, którego można użyć. Aby skonfigurować projekt startowy, wykonaj następujące kroki:
Ważne
Aby wykonać te kroki, musisz mieć zainstalowany program Visual Studio Code i program .NET Framework 8.0. Może być również konieczne zainstalowanie rozszerzenia Visual Studio Code C# Dev Kit.
Otwórz Visual Studio Code.
W sekcji Uruchamianie programu Visual Studio Code wybierz pozycję Klonuj repozytorium Git.
Na pasku adresu URL wprowadź
https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git
W Eksplorator plików utwórz nowy folder w lokalizacji, która jest łatwa do znalezienia i zapamiętania, na przykład folderu na pulpicie.
Kliknij przycisk Wybierz jako miejsce docelowe repozytorium.
Aby pomyślnie sklonować projekt, musisz zalogować się do usługi GitHub.
Otwórz projekt w programie Visual Studio Code.
W Eksploratorze kliknij prawym przyciskiem myszy folder M03-give-your-ai-agent-skills/M03-Project i kliknij polecenie Otwórz w zintegrowanym terminalu.
Rozwiń folder M03-give-your-ai-agent-skills/M03-Project.
Powinien zostać wyświetlony plik "Program.cs".
Otwórz plik Program.cs i zaktualizuj następujące zmienne przy użyciu nazwy wdrożenia usług Azure OpenAI Services, klucza interfejsu API, punktu końcowego.
string yourDeploymentName = ""; string yourEndpoint = ""; string yourKey = "";
Teraz możesz rozpocząć ćwiczenie. Powodzenia!
Tworzenie wtyczki biblioteki muzycznej
Utwórz nowy folder w katalogu "Project" i nadaj mu nazwę "Plugins".
W folderze "Plugins" utwórz nowy plik "MusicLibrary.cs"
Wprowadź następujące kod:
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; } }
W tym kodzie dekorator służy
KernelFunction
do deklarowania funkcji natywnej. Możesz również użyć dekoratoraDescription
, aby dodać opis działania funkcji. Na razie można założyć, że lista ostatnich odtworzeń użytkownika jest przechowywana w pliku tekstowym o nazwie "recentlyplayed.txt". Następnie możesz dodać kod, aby dodać piosenkę do listy.Dodaj następujący kod do
MusicLibraryPlugin
klasy:[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"; }
W tym kodzie utworzysz funkcję akceptującą artystę, piosenkę i gatunek jako ciągi. Oprócz
Description
funkcji dodajesz również opisy zmiennych wejściowych. Ten kod odczytuje istniejącą zawartość z pliku, analizuje ją i dodaje nową piosenkę do listy. Następnie zaktualizowana lista zostanie zapisana z powrotem do pliku. Następnie utworzysz plik "recentlyplayed.txt" z przykładowymi danymi.Utwórz nowy folder "data" w folderze "M03-Project".
Utwórz nowy plik "recentlyplayed.txt" w folderze "data", a następnie wklej następującą zawartość:
[ { "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" } ]
Następnie zmodyfikujmy listę, importując i wywołując nową wtyczkę.
Zaktualizuj plik "Program.cs" przy użyciu następującego kodu:
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);
W tym kodzie zaimportujesz element
MusicLibraryPlugin
do jądra przy użyciu poleceniaImportPluginFromType
. Następnie wywołaj metodęInvokeAsync
z nazwą wtyczki, której chcesz użyć, oraz funkcję, którą chcesz wywołać. Przekazujesz również artystę, piosenkę i gatunek jako argumenty.Uruchom kod, wprowadzając
dotnet run
polecenie w terminalu.Powinny zostać wyświetlone następujące dane wyjściowe:
Added 'Danse' to recently played
Otwórz plik "recentlyplayed.txt" i powinien zostać wyświetlony nowy utwór dodany do listy. Dobra robota!