Esercizio - Fornire segnali di contesto
In questo esercizio si usa la cronologia delle conversazioni per fornire contesto al modello di linguaggio di grandi dimensioni (LLM). È anche possibile modificare il codice in modo che consenta all'utente di continuare la conversazione, proprio come un chatbot reale. Iniziamo!
Modificare il codice per usare un ciclo
do
-while
per accettare l'input dell'utente:string input; do { Console.WriteLine("What would you like to do?"); input = Console.ReadLine(); // ... } while (!string.IsNullOrWhiteSpace(input));
Ora è possibile mantenere la conversazione fino a quando l'utente non immette una riga vuota.
Acquisire informazioni dettagliate sul viaggio dell'utente modificando il caso
SuggestDestinations
:case "SuggestDestinations": chatHistory.AppendLine("User:" + input); var recommendations = await kernel.InvokePromptAsync(input!); Console.WriteLine(recommendations); break;
Usare i dettagli del viaggio nel caso
SuggestActivities
utilizzando il seguente codice:case "SuggestActivities": var chatSummary = await kernel.InvokeAsync( "ConversationSummaryPlugin", "SummarizeConversation", new() {{ "input", chatHistory.ToString() }}); break;
In questo codice si usa la funzione
SummarizeConversation
predefinita per riepilogare la chat con l'utente. Si userà quindi il riepilogo per suggerire attività nella destinazione.Estendere il caso
SuggestActivities
con il codice seguente: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 questo codice si aggiungono
input
echatSummary
come argomenti del kernel. Il kernel richiama quindi il prompt e lo instrada al plug-inSuggestActivities
. Aggiungere anche l'input dell'utente e la risposta dell'assistente alla cronologia delle chat e visualizzare i risultati. Successivamente, è necessario aggiungere la variabilechatSummary
al plug-inSuggestActivities
.Passare a prompt/SuggestActivities/config.json e aprire il file in Visual Studio Code
In
input_variables
aggiungere una variabile per la cronologia delle 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 } ]
Passare a prompt/SuggestActivities/skprompt.txt e aprire il file
Aggiungere un prompt per usare la cronologia delle chat:
You are an experienced travel agent. You are helpful, creative, and very friendly. Consider the traveler's background: {{$history}}
Lasciare invariato il resto del prompt. Ora il plug-in usa la cronologia delle chat per fornire il contesto all'LLM.
Controlla il tuo lavoro
In questa attività si esegue l'applicazione e si verifica che il codice funzioni correttamente.
Confrontare i casi di cambio aggiornati con il codice seguente:
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;
Immettere
dotnet run
nel terminale. Quando richiesto, immettere un testo simile al seguente:What would you like to do? How much is 60 USD in new zealand dollars?
Dovrebbe essere visualizzato un output simile al seguente:
$60 USD is approximately $97.88 in New Zealand Dollars (NZD) What would you like to do?
Immettere una richiesta di suggerimenti di destinazione con alcuni segnali di contesto, ad esempio:
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?
Dovrebbe essere visualizzato un output con raccomandazioni relative alle destinazioni accessibili.
Inserire un suggerimento per attività, ad esempio:
What would you like to do? What are some things to do in Barcelona?
Dovresti ricevere raccomandazioni che rientrano nel contesto precedente, ad esempio attività accessibili a Barcellona simili alle seguenti:
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 il codice non produce l'output previsto, è possibile esaminare il codice nella cartella soluzione.
È possibile continuare a testare l'applicazione con prompt e segnali di contesto diversi. Ottimo lavoro! Hai fornito con successo segnali di contesto all'LLM e hai modificato il codice per permettere all'utente di continuare la conversazione.