Ejercicio: Creación de funciones nativas
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.
Abra Visual Studio Code.
En la sección Iniciode Visual Studio Code, seleccione Clonar repositorio de Git.
En la barra de direcciones URL, escriba
https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git
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.
Haga clic en el botón Seleccionar como destino del repositorio.
Debe iniciar sesión en GitHub para clonar correctamente el proyecto.
Abra el proyecto en Visual Studio Code.
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.
Expanda la carpeta M03-give-your-ai-agent-skills/M03-Project.
Debería ver un archivo "Program.cs".
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
Cree una nueva carpeta en el directorio "Project" y asígnela el nombre "Plugins".
En la carpeta "Plugins", cree un nuevo archivo "MusicLibrary.cs"
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 decoradorDescription
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.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.Cree una nueva carpeta "data" en la carpeta "M03-Project".
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.
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 usandoImportPluginFromType
. Después, llama aInvokeAsync
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.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!