Cvičení – vytvoření nativních funkcí

Dokončeno

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.

  1. Otevřete Visual Studio Code.

  2. V části Start editoru Visual Studio Code vyberte Klonovat úložiště Git.

  3. Na panelu URL zadejte https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git

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

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

  6. Otevřete projekt v editoru Visual Studio Code.

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

  8. Rozbalte složku M03-give-your-ai-agent-skills/M03-Project.

    Měl by se zobrazit soubor "Program.cs".

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

  1. V adresáři Project vytvořte novou složku a pojmenujte ji Moduly plug-in.

  2. Ve složce Plugins vytvořte nový soubor MusicLibrary.cs.

  3. 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žijete Description 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.

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

  5. Ve složce M03-Project vytvořte novou složku Data.

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

  7. 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áte InvokeAsync 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.

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