Övning – Skapa inbyggda funktioner

Slutförd

I den här övningen skapar du en intern funktion som lägger till en låt i en användares lista "Nyligen spelad". Senare kan du använda listan över senast spelade låtar för att ge anpassade rekommendationer. Nu sätter vi igång!

Förbereda utvecklingsmiljön

För de här övningarna är ett startprojekt tillgängligt för dig att använda. Använd följande steg för att konfigurera startprojektet:

Viktigt!

Du måste ha Visual Studio Code och .NET Framework 8.0 installerat för att slutföra de här stegen. Du kan också behöva installera Tillägget Visual Studio Code C# Dev Kit.

  1. Öppna Visual Studio Code.

  2. Under avsnittet Start i Visual Studio Code väljer du Klona Git-lagringsplats.

  3. I URL-fältet anger du https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git

  4. I Utforskaren skapar du en ny mapp på en plats som är lätt att hitta och komma ihåg, till exempel en mapp i skrivbordet.

  5. Klicka på knappen Välj som lagringsplatsmål.

    Du måste vara inloggad på GitHub för att kunna klona projektet.

  6. Öppna projektet i Visual Studio Code.

  7. Högerklicka på mappen M03-give-your-ai-agent-skills/M03-Project i Utforskaren och klicka på Öppna i integrerad terminal.

  8. Expandera mappen M03-give-your-ai-agent-skills/M03-Project.

    Du bör se filen "Program.cs".

  9. Öppna filen Program.cs och uppdatera följande variabler med distributionsnamnet för Azure OpenAI Services, API-nyckeln och slutpunkten.

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

Nu är du redo att börja övningen. Lycka till!

Skapa ett plugin-program för musikbibliotek

  1. Skapa en ny mapp i katalogen Project och ge den namnet "Plugins".

  2. I mappen Plugins skapar du en ny fil MusicLibrary.cs

  3. Ange följande 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;
        }
    }
    

    I den här koden använder du dekoratören KernelFunction för att deklarera din interna funktion. Du använder också dekoratören Description för att lägga till en beskrivning av vad funktionen gör. För tillfället kan du anta att användarens lista över de senaste pjäserna lagras i en textfil med namnet "recentlyplayed.txt". Sedan kan du lägga till kod för att lägga till en låt i listan.

  4. Lägg till följande kod i klassen 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";
    }
    

    I den här koden skapar du en funktion som accepterar artisten, låten och genren som strängar. Förutom funktionen Description lägger du även till beskrivningar av indatavariablerna. Den här koden läser det befintliga innehållet från filen, parsar det och lägger till den nya låten i listan. Därefter skrivs den uppdaterade listan tillbaka till filen. Därefter skapar du filen "recentlyplayed.txt" med några exempeldata.

  5. Skapa en ny mapp "data" i mappen M03-Project.

  6. Skapa en ny fil "recentlyplayed.txt" i mappen "data" och klistra sedan in följande innehåll:

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

    Nu ska vi ändra listan genom att importera och anropa det nya plugin-programmet.

  7. Uppdatera filen "Program.cs" med följande kod:

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

    I den här koden importerar MusicLibraryPlugin du till kerneln med hjälp av ImportPluginFromType. Sedan anropar InvokeAsync du med namnet på plugin-programmet som du vill använda och den funktion som du vill anropa. Du skickar också in artisten, låten och genren som argument.

  8. Kör koden genom att ange dotnet run i terminalen.

    Du bör se följande utdata:

    Added 'Danse' to recently played
    

    Öppna "recentlyplayed.txt" så bör du se den nya låten som lagts till i listan. Bra jobbat!