Ejercicio: Creación de funciones nativas

Completado

En este ejercicio, debe crear una función nativa que añada una canción a la lista de "Reproducciones recientes" de un usuario. Después, puede usar la lista de canciones reproducidas recientemente para proporcionar recomendaciones personalizadas. Comencemos.

Preparación del entorno de desarrollo

Para estos ejercicios, hay disponible un proyecto de inicio para su uso. Siga estos pasos para configurar el proyecto de inicio:

Importante

Debe tener Instalado Visual Studio Code y .NET Framework 8.0 para completar estos pasos. Es posible que también tenga que instalar la extensión Dev Kit de C# de Visual Studio Code.

  1. Abra Visual Studio Code.

  2. En la sección Iniciode Visual Studio Code, seleccione Clonar repositorio de Git.

  3. En la barra de direcciones URL, escriba https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git

  4. En el Explorador de archivos, cree una nueva carpeta en una ubicación que sea fácil de encontrar y recordar, como una carpeta en el escritorio.

  5. Haga clic en el botón Seleccionar como destino del repositorio.

    Debe iniciar sesión en GitHub para clonar correctamente el proyecto.

  6. Abra el proyecto en Visual Studio Code.

  7. En el Explorador, haga clic con el botón derecho del ratón en la carpeta M03-give-your-ai-agent-skills/M03-Project y haga clic en Abrir en terminal integrado.

  8. Expanda la carpeta M03-give-your-ai-agent-skills/M03-Project.

    Debería ver un archivo "Program.cs".

  9. Abra el archivo Program.cs y actualice las siguientes variables con el nombre de implementación de Azure OpenAI Services, la clave de API y el punto de conexión.

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

Ya está listo para comenzar el ejercicio. Buena suerte.

Creación de un complemento de biblioteca de música

  1. Cree una nueva carpeta en el directorio "Project" y asígnela el nombre "Plugins".

  2. En la carpeta "Plugins", cree un nuevo archivo "MusicLibrary.cs"

  3. Escriba el siguiente código:

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

    En este código, se usa el decorador para declarar la función nativa KernelFunction. También se usa el decorador Description para agregar una descripción de lo que hace la función. Por ahora, puede suponer que la lista de reproducciones recientes del usuario se almacena en un archivo de texto denominado "recentlyplayed.txt". A continuación, puede agregar código para agregar una canción a la lista.

  4. Agregue el siguiente código a la clase 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";
    }
    

    En este código, se crea una función que acepta el artista, la canción y el género como cadenas. Además de la Description de la función, también se agregan descripciones de las variables de entrada. Este código lee el contenido existente del archivo, lo analiza y agrega la nueva canción a la lista. Después, la lista actualizada se vuelve a escribir en el archivo. A continuación, creará el archivo "recentlyplayed.txt" con algunos datos de ejemplo.

  5. Cree una nueva carpeta "data" en la carpeta "M03-Project".

  6. Cree un nuevo archivo "recentlyplayed.txt" en la carpeta "data" y pegue el siguiente contenido:

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

    A continuación, vamos a modificar la lista mediante la importación e invocación del nuevo complemento.

  7. Actualice el archivo 'Program.cs' con el código siguiente:

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

    En este código, se importa el MusicLibraryPlugin al kernel usando ImportPluginFromType. Después, llama a InvokeAsync con el nombre del complemento que quiere usar y la función a la que quiere llamar. También se pasan el artista, la canción y el género como argumentos.

  8. Para ejecutar el código, escriba dotnet run en el terminal.

    Debería ver la salida siguiente:

    Added 'Danse' to recently played
    

    Abra "recentlyplayed.txt", debería ver la nueva canción que acaba de agregar a la lista. ¡Excelente trabajo!