Exercício - Invocar funções automaticamente

Concluído

Neste exercício, você pratica o uso de prompts para chamar automaticamente funções que podem recomendar músicas ao usuário ou adicionar uma música à lista de músicas reproduzidas recentemente. Vamos começar!

  1. Abra o projeto do Visual Studio Code usado no exercício anterior.

  2. Atualize seu arquivo "Program.cs" com o código a seguir:

    OpenAIPromptExecutionSettings settings = new()
    {
        ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
    };
    
    var songSuggesterFunction = kernel.CreateFunctionFromPrompt(
        promptTemplate: @"Based on the user's recently played music:
            {{$recentlyPlayedSongs}}
            recommend a song to the user from the music library:
            {{$musicLibrary}}",
        functionName: "SuggestSong",
        description: "Recommend a song from the library"
    );
    
    kernel.Plugins.AddFromFunctions("SuggestSong", [songSuggesterFunction]);
    
    string prompt = @"Can you recommend a song from the music library?";
    
    var result = await kernel.InvokePromptAsync(prompt, new(settings));
    
    Console.WriteLine(result);
    

    Nesse código, você cria uma função a partir de um prompt que informa à LLM como sugerir uma música. Posteriormente, você invoca um prompt com a configuração de chamada de função automática habilitada. O kernel é capaz de executar a função e fornecer os parâmetros corretos para concluir o prompt.

  3. No terminal, insira dotnet run para executar seu código.

    A saída gerada deve recomendar uma música para o usuário com base nas músicas reproduzidas recentemente. Sua resposta pode ser semelhante à seguinte saída:

    Based on your recently played music, I recommend you listen to the song "Luv(sic)". It falls under the genres of hiphop and rap, which aligns with some of your recently played songs. Enjoy!  
    

    Em seguida, vamos tentar um prompt para atualizar a lista de músicas reproduzidas recentemente.

  4. Atualize seu arquivo "Program.cs" com o código a seguir:

    string prompt = @"Add this song to the recently played songs list:  title: 'Touch', artist: 'Cat's Eye', genre: 'Pop'";
    
    var result = await kernel.InvokePromptAsync(prompt, new(settings));
    
    Console.WriteLine(result);
    
  5. Insira dotnet run no terminal

    A saída deve ser semelhante ao seguinte:

    I have added the song 'Touch' by Cat's Eye to the recently played songs list.
    

    Ao abrir o arquivo recentlyplayed.txt, você deverá ver a nova música adicionada à parte superior da lista.

Usar a configuração AutoInvokeKernelFunctions permite que você se concentre na criação de plug-ins para atender às necessidades do usuário.