Oefening: contexthints opgeven

Voltooid

In deze oefening gebruikt u de gespreksgeschiedenis om context te bieden aan het grote taalmodel (LLM). U past ook de code aan zodat de gebruiker het gesprek kan voortzetten, net als een echte chatbot. Laten we beginnen.

  1. Wijzig de code om een do-while lus te gebruiken om de invoer van de gebruiker te accepteren:

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

    U kunt het gesprek nu behouden totdat de gebruiker een lege regel invoert.

  2. Leg details vast over de reis van de gebruiker door de SuggestDestinations case te wijzigen:

    case "SuggestDestinations":
        chatHistory.AppendLine("User:" + input);
        var recommendations = await kernel.InvokePromptAsync(input!);
        Console.WriteLine(recommendations);
        break;
    
  3. Gebruik de reisdetails in het SuggestActivities geval met de volgende code:

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

    In deze code gebruikt u de ingebouwde SummarizeConversation functie om de chat samen te vatten met de gebruiker. Laten we vervolgens de samenvatting gebruiken om activiteiten op de bestemming voor te stellen.

  4. Breid de SuggestActivities case uit met de volgende code:

    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;
    

    In deze code voegt u kernelargumenten toe input en chatSummary als kernelargumenten. Vervolgens roept de kernel de prompt aan en stuurt deze naar de SuggestActivities invoegtoepassing. U voegt ook de invoer van de gebruiker en het antwoord van de assistent toe aan de chatgeschiedenis en geeft de resultaten weer. Vervolgens moet u de chatSummary variabele toevoegen aan de SuggestActivities invoegtoepassing.

  5. Navigeer naar Prompts/SuggestActivities/config.json en open het bestand in Visual Studio Code

  6. Voeg onder input_variablesEen variabele voor de chatgeschiedenis toe:

    "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. Ga naar Prompts/SuggestActivities/skprompt.txt en open het bestand

  8. Voeg een prompt toe om de chatgeschiedenis te gebruiken:

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

Laat de rest van de prompt staan. De invoegtoepassing gebruikt nu de chatgeschiedenis om context te bieden aan de LLM.

Controleer uw werk

In deze taak voert u uw toepassing uit en controleert u of de code correct werkt.

  1. Vergelijk de bijgewerkte switchcases met de volgende code:

    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. Voer dotnet run in de terminal in. Wanneer u hierom wordt gevraagd, voert u tekst in die lijkt op het volgende:

    What would you like to do?
    How much is 60 USD in new zealand dollars?
    
  3. Als het goed is, ontvangt u uitvoer die er ongeveer als volgt uitziet:

    $60 USD is approximately $97.88 in New Zealand Dollars (NZD)
    What would you like to do?
    
  4. Voer een prompt in voor doelsuggesties met enkele contexthints, bijvoorbeeld:

    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. U moet uitvoer ontvangen met aanbevelingen voor toegankelijke bestemmingen.

  6. Voer een prompt in voor suggesties voor activiteiten, bijvoorbeeld:

    What would you like to do?
    What are some things to do in Barcelona?
    
  7. U moet aanbevelingen ontvangen die binnen de vorige context passen, bijvoorbeeld toegankelijke activiteiten in Barcelona die vergelijkbaar zijn met de volgende:

    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.
    

    Notitie

    Als uw code niet de verwachte uitvoer produceert, kunt u de code controleren in de map Oplossing .

U kunt de toepassing blijven testen met verschillende prompts en contexthints. Geweldig werk! U hebt contextaanroepen aan de LLM verstrekt en de code zo aangepast dat de gebruiker het gesprek kan voortzetten.