Cvičení – poskytnutí kontextových upozornění

Dokončeno

V tomto cvičení použijete historii konverzací k poskytnutí kontextu rozsáhlého jazykového modelu (LLM). Kód také upravíte tak, aby umožňoval uživateli pokračovat v konverzaci, stejně jako skutečný chatovací robot. Pojďme začít!

  1. Upravte kód tak, aby používal smyčku do-while, aby přijímal vstup uživatele:

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

    Konverzaci teď můžete ponechat, dokud uživatel nezadá prázdný řádek.

  2. Zaznamenejte podrobnosti o cestě uživatele úpravou SuggestDestinations případu:

    case "SuggestDestinations":
        chatHistory.AppendLine("User:" + input);
        var recommendations = await kernel.InvokePromptAsync(input!);
        Console.WriteLine(recommendations);
        break;
    
  3. Použijte podrobnosti o jízdě v případu SuggestActivities s následujícím kódem:

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

    V tomto kódu použijete integrovanou funkci SummarizeConversation k shrnutí chatu s uživatelem. V dalším kroku použijeme souhrn k návrhu aktivit v cíli.

  4. Rozšíření případu SuggestActivities následujícím kódem:

    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;
    

    V tomto kódu přidáte input a chatSummary jako argumenty jádra. Pak jádro vyvolá výzvu a nasměruje ji do modulu plug-in SuggestActivities. Připojíte také vstup uživatele a odpověď asistenta do historie chatu a zobrazíte výsledky. Dále musíte do modulu plug-in SuggestActivities přidat proměnnou chatSummary.

  5. Přejděte na Prompts/SuggestActivities/config.json a otevřete soubor v editoru Visual Studio Code.

  6. V části input_variablespřidejte proměnnou pro historii chatu:

    "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. Přejděte na Prompts/SuggestActivities/skprompt.txt a otevřete soubor.

  8. Přidejte výzvu k používání historie chatu:

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

Zbytek výzvy ponechte tak, jak je. Teď modul plug-in používá historii chatu k poskytnutí kontextu LLM.

Zkontrolujte svou práci

V této úloze spustíte aplikaci a ověříte, že kód funguje správně.

  1. Porovnejte aktualizované případy přepnutí s následujícím kódem:

    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. Do terminálu zadejte dotnet run. Po zobrazení výzvy zadejte text podobný následujícímu:

    What would you like to do?
    How much is 60 USD in new zealand dollars?
    
  3. Měl by se zobrazit výstup podobný následujícímu:

    $60 USD is approximately $97.88 in New Zealand Dollars (NZD)
    What would you like to do?
    
  4. Zadejte výzvu k zadání návrhů cíle s určitými kontextovými upozorněními, například:

    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. Měl by se zobrazit výstup s doporučeními přístupných cílů.

  6. Zadejte výzvu k zadání návrhů aktivit, například:

    What would you like to do?
    What are some things to do in Barcelona?
    
  7. Měli byste dostávat doporučení, která odpovídají předchozímu kontextu, například přístupné aktivity v Barceloně podobné následujícímu:

    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.
    

    Poznámka

    Pokud váš kód nevygeneruje očekávaný výstup, můžete kód zkontrolovat ve složce Solution.

Aplikaci můžete dál testovat s různými výzvami a kontextovými upozorněními. Skvělá práce! Úspěšně jste do LLM zadali kontextová upozornění a upravili kód tak, aby uživatel mohl pokračovat v konverzaci.