Ćwiczenie — tworzenie funkcji natywnych

Ukończone

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.

  1. Otwórz Visual Studio Code.

  2. W sekcji Uruchamianie programu Visual Studio Code wybierz pozycję Klonuj repozytorium Git.

  3. Na pasku adresu URL wprowadź https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git

  4. 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.

  5. Kliknij przycisk Wybierz jako miejsce docelowe repozytorium.

    Aby pomyślnie sklonować projekt, musisz zalogować się do usługi GitHub.

  6. Otwórz projekt w programie Visual Studio Code.

  7. W Eksploratorze kliknij prawym przyciskiem myszy folder M03-give-your-ai-agent-skills/M03-Project i kliknij polecenie Otwórz w zintegrowanym terminalu.

  8. Rozwiń folder M03-give-your-ai-agent-skills/M03-Project.

    Powinien zostać wyświetlony plik "Program.cs".

  9. 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

  1. Utwórz nowy folder w katalogu "Project" i nadaj mu nazwę "Plugins".

  2. W folderze "Plugins" utwórz nowy plik "MusicLibrary.cs"

  3. 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ć dekoratora Description , 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.

  4. 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.

  5. Utwórz nowy folder "data" w folderze "M03-Project".

  6. 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ę.

  7. 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 polecenia ImportPluginFromType. 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.

  8. 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!