Exercício - Forneça pistas de contexto

Concluído

Neste exercício, você usa o histórico de conversas 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 do-while loop 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 até que o usuário insira uma linha em branco.

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

    case "SuggestDestinations":
        chatHistory.AppendLine("User:" + input);
        var recommendations = await kernel.InvokePromptAsync(input!);
        Console.WriteLine(recommendations);
        break;
    
  3. Use os detalhes da viagem no caso com o SuggestActivities 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 para resumir o bate-papo SummarizeConversation com o usuário. Em seguida, vamos usar o resumo para sugerir atividades no destino.

  4. Estenda o SuggestActivities caso com 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 do kernel. Em seguida, o kernel invoca o prompt e o encaminha para o SuggestActivities plugin. Você também anexa a entrada do usuário e a resposta do assistente ao histórico de bate-papo e exibe os resultados. Em seguida, você precisa adicionar a chatSummary variável ao SuggestActivities plugin.

  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 bate-papo:

    "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 bate-papo:

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

Deixe o resto do prompt como está. Agora, o plugin usa o histórico de bate-papo para fornecer contexto ao LLM.

Verifique o seu trabalho

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

  1. Compare seus casos de switch 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. Introduza dotnet run no terminal. Quando solicitado, insira algum 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 dicas 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 atividades, por exemplo:

    What would you like to do?
    What are some things to do in Barcelona?
    
  7. Você deve receber recomendações que se encaixam no 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.
    

    Nota

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

Você pode continuar a testar o aplicativo com diferentes prompts e pistas de contexto. Ótimo trabalho! Você forneceu com sucesso dicas de contexto para o LLM e ajustou o código para permitir que o usuário continue a conversa.