Ejercicio: Proporcionar indicaciones de contexto

Completado

En este ejercicio, usará el historial de conversaciones para proporcionar contexto al modelo de lenguaje de gran tamaño (LLM). También ajustará el código para que permita al usuario continuar la conversación, al igual que un bot de chat real. Comencemos.

  1. Modifique el código para que use un bucle do-while para aceptar la entrada del usuario:

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

    Ahora puede mantener la conversación en marcha hasta que el usuario escriba una línea en blanco.

  2. Capture detalles sobre el viaje del usuario modificando el caso SuggestDestinations:

    case "SuggestDestinations":
        chatHistory.AppendLine("User:" + input);
        var recommendations = await kernel.InvokePromptAsync(input!);
        Console.WriteLine(recommendations);
        break;
    
  3. Use los detalles del viaje en el caso SuggestActivities con el código siguiente:

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

    En este código, usará la función integrada SummarizeConversation para resumir el chat con el usuario. A continuación, vamos a usar el resumen para sugerir actividades en el destino.

  4. Extienda el caso SuggestActivities con el código siguiente:

    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;
    

    En este código, agregará input y chatSummary como argumentos de kernel. Después, el kernel invoca la solicitud y la enruta al complemento SuggestActivities. Además, anexará la entrada del usuario y la respuesta del asistente al historial de chat, y se mostrarán los resultados. Después, debe agregar la variable chatSummary al complemento SuggestActivities.

  5. Vaya a Prompts/SuggestActivities/config.json y abra el archivo en Visual Studio Code

  6. En input_variables, agregue una variable para el historial 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. Vaya a Prompts/SuggestActivities/skprompt.txt y abra el archivo

  8. Agregue un mensaje para usar el historial de chats:

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

Deje el resto del mensaje tal como está. Ahora el complemento usa el historial de chat para proporcionar contexto al LLM.

Comprobar el trabajo

En esta tarea, ejecutará la aplicación y comprobará que el código funciona correctamente.

  1. Compare los casos de modificador actualizados con el código siguiente:

    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. Escriba dotnet run en el terminal. Cuando se le solicite, escriba texto similar al siguiente:

    What would you like to do?
    How much is 60 USD in new zealand dollars?
    
  3. Debe recibir un resultado similar al siguiente:

    $60 USD is approximately $97.88 in New Zealand Dollars (NZD)
    What would you like to do?
    
  4. Escriba una solicitud para obtener sugerencias de destinos con algunas indicaciones de contexto, por ejemplo:

    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. Debe recibir algunos resultados con recomendaciones de destinos accesibles.

  6. Escriba una solicitud para sugerencias de actividades, por ejemplo:

    What would you like to do?
    What are some things to do in Barcelona?
    
  7. Debe recibir recomendaciones que se ajusten al contexto anterior, por ejemplo, actividades accesibles en Barcelona similares a las siguientes:

    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:

    Si el código no genera la salida esperada, puede revisar el código en la carpeta Solución.

Puede seguir probando la aplicación con diferentes indicaciones e indicaciones de contexto. Excelente trabajo. Ha proporcionado correctamente indicaciones de contexto al LLM y ha ajustado el código para permitir que el usuario continúe la conversación.