Oefening: systeemeigen functies maken

Voltooid

In deze oefening maakt u een systeemeigen functie waarmee een nummer wordt toegevoegd aan de lijst Recent afgespeeld van een gebruiker. Later kunt u de lijst met onlangs afgespeelde nummers gebruiken om aangepaste aanbevelingen te bieden. Laten we beginnen.

Uw ontwikkelomgeving voorbereiden

Voor deze oefeningen is er een startersproject beschikbaar dat u kunt gebruiken. Gebruik de volgende stappen om het startersproject in te stellen:

Belangrijk

U moet Visual Studio Code en .NET Framework 8.0 hebben geïnstalleerd om deze stappen uit te voeren. Mogelijk moet u ook de Visual Studio Code C# Dev Kit-extensie installeren.

  1. Open Visual Studio Code.

  2. Selecteer Git-opslagplaats klonen in de sectie Start van Visual Studio Code.

  3. Voer in de URL-balk het volgende in https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git

  4. Maak in de Bestandenverkenner een nieuwe map op een locatie die gemakkelijk te vinden en te onthouden is, zoals een map in uw bureaublad.

  5. Klik op de knop Selecteren als opslagplaatsbestemming .

    U moet zijn aangemeld bij GitHub om het project te klonen.

  6. Open het project in Visual Studio Code.

  7. Klik in Explorer met de rechtermuisknop op de map M03-give-your-ai-agent-skills/M03-Project en klik op Openen in geïntegreerde terminal.

  8. Vouw de map M03-give-your-ai-agent-skills/M03-Project uit.

    Als het goed is, ziet u een bestand met de naam 'Program.cs'.

  9. Open het Program.cs-bestand en werk de volgende variabelen bij met de naam van uw Azure OpenAI Services-implementatie, API-sleutel, eindpunt.

    string yourDeploymentName = "";
    string yourEndpoint = "";
    string yourKey = "";
    

Nu bent u klaar om de oefening te starten. Succes!

Een invoegtoepassing voor een muziekbibliotheek maken

  1. Maak een nieuwe map in de map 'Project' en geef deze de naam 'Plugins'.

  2. Maak in de map Invoegtoepassingen een nieuw bestand MusicLibrary.cs

  3. Voer de volgende code in:

    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;
        }
    }
    

    In deze code gebruikt u de KernelFunction decorator om uw systeemeigen functie te declareren. U gebruikt ook de Description decorator om een beschrijving toe te voegen van wat de functie doet. Op dit moment kunt u ervan uitgaan dat de lijst met recente afspelen van de gebruiker is opgeslagen in een tekstbestand met de naam 'recentlyplayed.txt'. Vervolgens kunt u code toevoegen om een nummer aan de lijst toe te voegen.

  4. Voeg de volgende code toe aan uw MusicLibraryPlugin klasse:

    [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";
    }
    

    In deze code maakt u een functie die de artiest, het nummer en het genre accepteert als tekenreeksen. Naast de Description functie voegt u ook beschrijvingen van de invoervariabelen toe. Met deze code wordt de bestaande inhoud uit het bestand gelezen, geparseerd en wordt het nieuwe nummer toegevoegd aan de lijst. Daarna wordt de bijgewerkte lijst teruggeschreven naar het bestand. Vervolgens maakt u het bestand 'recentlyplayed.txt' met enkele voorbeeldgegevens.

  5. Maak een nieuwe map 'gegevens' in de map 'M03-Project'.

  6. Maak een nieuw bestand recentlyplayed.txt in de map 'gegevens' en plak de volgende inhoud:

    [
        {
            "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"
        }
    ]
    

    Vervolgens gaan we de lijst wijzigen door uw nieuwe invoegtoepassing te importeren en aan te roepen.

  7. Werk het bestand 'Program.cs' bij met de volgende code:

    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);
    

    In deze code importeert u de MusicLibraryPlugin naar de kernel met behulp van ImportPluginFromType. Vervolgens roept InvokeAsync u aan met de naam van de invoegtoepassing die u wilt gebruiken en de functie die u wilt aanroepen. Je geeft ook de artiest, het nummer en het genre door als argumenten.

  8. Voer de code uit door de terminal in te voeren dotnet run .

    U moet de volgende uitvoer zien:

    Added 'Danse' to recently played
    

    Open 'recentlyplayed.txt' en u ziet dat het nieuwe nummer wordt toegevoegd aan de lijst. Goed gedaan.