Exercício – fornecer indicações de contexto

Concluído

Neste exercício, você usa o histórico de conversa para fornecer contexto ao modelo de linguagem grande (LLM). Você também ajusta o código para que ele permita que o usuário continue a conversa, assim como um chatbot real. Vamos começar!

  1. Modifique o código para usar um loop do-while para aceitar a entrada do usuário:

    string input;
    
    do 
    {
        Console.WriteLine("What would you like to do?");
        input = Console.ReadLine();
    
        // ...
    }
    while (!string.IsNullOrWhiteSpace(input));
    

    Agora você pode manter a conversa em andamento até que o usuário insira uma linha em branco.

  2. Capture detalhes sobre a viagem do usuário modificando o caso SuggestDestinations:

    case "SuggestDestinations":
        chatHistory.AppendLine("User:" + input);
        var recommendations = await kernel.InvokePromptAsync(input!);
        Console.WriteLine(recommendations);
        break;
    
  3. Use os detalhes da viagem no caso SuggestActivities com o seguinte código:

     case "SuggestActivities":
        var chatSummary = await kernel.InvokeAsync(
            "ConversationSummaryPlugin", 
            "SummarizeConversation", 
            new() {{ "input", chatHistory.ToString() }});
        break;
    

    Neste código, você usa a função interna SummarizeConversation para resumir o chat com o usuário. Em seguida, vamos usar o resumo para sugerir atividades no destino.

  4. Estenda o caso SuggestActivitiescom o seguinte código:

    var activities = await kernel.InvokePromptAsync(
        input,
        new () {
            {"input", input},
            {"history", chatSummary},
            {"ToolCallBehavior", ToolCallBehavior.AutoInvokeKernelFunctions}
    });
    
    chatHistory.AppendLine("User:" + input);
    chatHistory.AppendLine("Assistant:" + activities.ToString());
    
    Console.WriteLine(activities);
    break;
    

    Neste código, você adiciona input e chatSummary como argumentos de kernel. Em seguida, o kernel invoca o prompt e o encaminha para o plug-in SuggestActivities. Você também acrescenta a entrada do usuário e a resposta do assistente ao histórico de chat e exibe os resultados. Em seguida, você precisa adicionar a variável chatSummary ao plug-in SuggestActivities.

  5. Navegue até Prompts/SuggestActivities/config.json e abra o arquivo no Visual Studio Code

  6. Em input_variables, adicione uma variável para o histórico de chat:

    "input_variables": [
      {
          "name": "history",
          "description": "Some background information about the user",
          "required": false
      },
      {
          "name": "destination",
          "description": "The destination a user wants to visit",
          "required": true
      }
      ]
    
  7. Navegue até Prompts/SuggestActivities/skprompt.txt e abra o arquivo

  8. Adicione um prompt para usar o histórico de chat:

    You are an experienced travel agent. 
    You are helpful, creative, and very friendly. 
    Consider the traveler's background: {{$history}}
    

Deixe o restante do prompt como está. Agora, o plug-in usa o histórico de chat para fornecer contexto ao LLM.

Verifique seu trabalho

Nesta tarefa, você executa seu aplicativo e verifica se o código está funcionando corretamente.

  1. Compare os casos de comutador atualizados com o seguinte código:

    case "SuggestDestinations":
            chatHistory.AppendLine("User:" + input);
            var recommendations = await kernel.InvokePromptAsync(input!);
            Console.WriteLine(recommendations);
            break;
    case "SuggestActivities":
    
        var chatSummary = await kernel.InvokeAsync(
            "ConversationSummaryPlugin", 
            "SummarizeConversation", 
            new() {{ "input", chatHistory.ToString() }});
    
        var activities = await kernel.InvokePromptAsync(
            input!,
            new () {
                {"input", input},
                {"history", chatSummary},
                {"ToolCallBehavior", ToolCallBehavior.AutoInvokeKernelFunctions}
        });
    
        chatHistory.AppendLine("User:" + input);
        chatHistory.AppendLine("Assistant:" + activities.ToString());
    
        Console.WriteLine(activities);
        break;
    
  2. Insira dotnet run no terminal. Quando solicitado, insira um texto semelhante ao seguinte:

    What would you like to do?
    How much is 60 USD in new zealand dollars?
    
  3. Você deve receber alguma saída semelhante à seguinte:

    $60 USD is approximately $97.88 in New Zealand Dollars (NZD)
    What would you like to do?
    
  4. Insira um prompt para sugestões de destino com algumas indicações de contexto, por exemplo:

    What would you like to do?
    I'm planning an anniversary trip with my spouse, but they are currently using a wheelchair and accessibility is a must. What are some destinations that would be romantic for us?
    
  5. Você deve receber alguma saída com recomendações de destinos acessíveis.

  6. Insira um prompt para sugestões de atividade, por exemplo:

    What would you like to do?
    What are some things to do in Barcelona?
    
  7. Você deve receber recomendações que se ajustem ao contexto anterior, por exemplo, atividades acessíveis em Barcelona semelhantes às seguintes:

    1. Visit the iconic Sagrada Família: This breathtaking basilica is an iconic symbol of Barcelona's architecture and is known for its unique design by Antoni Gaudí.
    
    2. Explore Park Güell: Another masterpiece by Gaudí, this park offers stunning panoramic views of the city, intricate mosaic work, and whimsical architectural elements.
    
    3. Visit the Picasso Museum: Explore the extensive collection of artworks by the iconic painter Pablo Picasso, showcasing his different periods and styles.
    

    Observação

    Se o código não produzir a saída esperada, você poderá examinar o código na pasta Solução.

Você pode continuar a testar o aplicativo com prompts e indicações de contexto diferentes. Ótimo trabalho! Você forneceu com êxito as indicações de contexto para o LLM e ajustou o código para permitir que o usuário continue a conversa.