Ćwiczenie — podawanie wskazówek kontekstowych
W tym ćwiczeniu użyjesz historii konwersacji, aby zapewnić kontekst dla dużego modelu językowego (LLM). Dopasowujesz również kod, aby umożliwić użytkownikowi kontynuowanie konwersacji, podobnie jak prawdziwy czatbot. Zacznijmy!
Zmodyfikuj kod, aby użyć pętli
do
-while
, aby zaakceptować dane wejściowe użytkownika:string input; do { Console.WriteLine("What would you like to do?"); input = Console.ReadLine(); // ... } while (!string.IsNullOrWhiteSpace(input));
Teraz możesz kontynuować konwersację do momentu wprowadzenia pustego wiersza przez użytkownika.
Przechwyć szczegóły podróży użytkownika, modyfikując przypadek
SuggestDestinations
:case "SuggestDestinations": chatHistory.AppendLine("User:" + input); var recommendations = await kernel.InvokePromptAsync(input!); Console.WriteLine(recommendations); break;
Użyj szczegółów podróży w przypadku sprawy
SuggestActivities
z następującym kodem:case "SuggestActivities": var chatSummary = await kernel.InvokeAsync( "ConversationSummaryPlugin", "SummarizeConversation", new() {{ "input", chatHistory.ToString() }}); break;
W tym kodzie użyjesz wbudowanej funkcji
SummarizeConversation
, aby podsumować czat z użytkownikiem. Następnie użyjmy podsumowania, aby zasugerować działania w miejscu docelowym.Rozszerz przypadek
SuggestActivities
przy użyciu następującego kodu: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;
W tym kodzie dodasz
input
ichatSummary
jako argumenty jądra. Następnie jądro wywołuje monit i kieruje go do wtyczkiSuggestActivities
. Dołączasz również dane wejściowe użytkownika i odpowiedź asystenta do historii czatu i wyświetlasz wyniki. Następnie należy dodać zmiennąchatSummary
do wtyczkiSuggestActivities
.Przejdź do podpowiedzi/sugerowane działania/config.json i otwórz plik w programie Visual Studio Code
W obszarze
input_variables
dodaj zmienną dla historii czatów:"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 } ]
Przejdź do monitów/sugerowanych działań/skprompt.txt i otwórz plik
Dodaj monit o użycie historii czatu:
You are an experienced travel agent. You are helpful, creative, and very friendly. Consider the traveler's background: {{$history}}
Pozostaw pozostałą część monitu bez zmian. Teraz wtyczka używa historii czatu do dostarczania kontekstu LLM.
Sprawdź swoją pracę
W tym zadaniu uruchomisz aplikację i sprawdzisz, czy kod działa poprawnie.
Porównaj zaktualizowane przypadki przełączania do następującego kodu:
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;
Wprowadź
dotnet run
w terminalu. Po wyświetleniu monitu wprowadź tekst podobny do następującego:What would you like to do? How much is 60 USD in new zealand dollars?
Powinny zostać wyświetlone dane wyjściowe podobne do następujących:
$60 USD is approximately $97.88 in New Zealand Dollars (NZD) What would you like to do?
Wprowadź podpowiedź do propozycji miejsc docelowych z pewnymi sygnałami kontekstowymi, na przykład:
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?
Powinieneś otrzymać wynik z zaleceniami dotyczącymi dostępnych miejsc docelowych.
Wprowadź polecenie, aby uzyskać sugestie dotyczące działań, na przykład:
What would you like to do? What are some things to do in Barcelona?
Powinieneś otrzymać zalecenia, które mieszczą się w poprzednim kontekście, na przykład dostępne aktywności w Barcelonie podobne do następujących:
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.
Notatka
Jeśli kod nie generuje oczekiwanych danych wyjściowych, możesz przejrzeć kod w folderze rozwiązania.
Możesz kontynuować testowanie aplikacji przy użyciu różnych monitów i wskazówek kontekstowych. Świetna praca! Pomyślnie podano wskazówki kontekstowe do usługi LLM i dostosowano kod, aby umożliwić użytkownikowi kontynuowanie konwersacji.