Övning – Styra användarens avsikt
I den här övningen identifierar du användarens avsikt och dirigerar konversationen till önskade plugin-program. Du kan använda ett angivet plugin-program för att hämta användarens avsikt. Nu ska vi komma igång!
Uppdatera din
Program.cs
-fil med följande kod:kernel.ImportPluginFromType<CurrencyConverter>(); var prompts = kernel.ImportPluginFromPromptDirectory("Prompts"); Console.WriteLine("What would you like to do?"); var input = Console.ReadLine(); var intent = await kernel.InvokeAsync<string>( prompts["GetIntent"], new() {{ "input", input }} );
I den här koden använder du
GetIntent
uppmaning för att identifiera användarens avsikt. Sedan lagrar du avsikten i en variabel med namnetintent
. Därefter dirigerar du intenten till dittCurrencyConverter
-plugin.Lägg till följande kod i din
Program.cs
-fil:switch (intent) { case "ConvertCurrency": var currencyText = await kernel.InvokeAsync<string>( prompts["GetTargetCurrencies"], new() {{ "input", input }} ); var currencyInfo = currencyText!.Split("|"); var result = await kernel.InvokeAsync("CurrencyConverter", "ConvertAmount", new() { {"targetCurrencyCode", currencyInfo[0]}, {"baseCurrencyCode", currencyInfo[1]}, {"amount", currencyInfo[2]}, } ); Console.WriteLine(result); break; default: Console.WriteLine("Other intent detected"); break; }
Plugin-programmet
GetIntent
returnerar följande värden: KonverteraValuta, FöreslåDestinationer, FöreslåAktiviteter, Översätt, HjälpsammaFraser, Okänd. Du använder enswitch
-instruktion för att dirigera användarens avsikt till rätt plugin-program.Om användarens avsikt är att konvertera valuta använder du
GetTargetCurrencies
fråga för att hämta valutainformationen. Sedan använder du plugin-programmetCurrencyConverter
för att konvertera beloppet.Sedan lägger du till några fall för att hantera de andra avsikterna. Nu ska vi använda den automatiska funktionsanropskapaciteten i Semantic Kernel SDK för att dirigera avsikten till de tillgängliga plugins.
Skapa inställningen för automatiska funktionsanrop genom att lägga till följande kod i filen
Program.cs
:kernel.ImportPluginFromType<CurrencyConverter>(); var prompts = kernel.ImportPluginFromPromptDirectory("Prompts"); OpenAIPromptExecutionSettings settings = new() { ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions }; Console.WriteLine("What would you like to do?"); var input = Console.ReadLine(); var intent = await kernel.InvokeAsync<string>( prompts["GetIntent"], new() {{ "input", input }} );
Därefter lägger du till ärenden i switch-instruktionen för de andra avsikterna.
Uppdatera din
Program.cs
-fil med följande kod:switch (intent) { case "ConvertCurrency": // ...Code you entered previously... break; case "SuggestDestinations": case "SuggestActivities": case "HelpfulPhrases": case "Translate": var autoInvokeResult = await kernel.InvokePromptAsync(input!, new(settings)); Console.WriteLine(autoInvokeResult); break; default: Console.WriteLine("Other intent detected"); break; }
I den här koden använder du inställningen
AutoInvokeKernelFunctions
för att automatiskt anropa funktioner och uppmaningar som refereras till i kerneln. Om användarens avsikt är att konvertera valuta utförCurrencyConverter
plugin-programmet sin uppgift.Om användarens avsikt är att hämta mål- eller aktivitetsförslag, översätta en fras eller få användbara fraser på ett språk anropar inställningen
AutoInvokeKernelFunctions
automatiskt befintliga plugin-program som ingick i projektkoden.Du kan också lägga till kod för att köra användarens indata som en uppmaning till den stora språkmodellen (LLM) om den inte omfattas av något av dessa avsiktsfall.
Uppdatera standardfallet med följande kod:
default: Console.WriteLine("Sure, I can help with that."); var otherIntentResult = await kernel.InvokePromptAsync(input!, new(settings)); Console.WriteLine(otherIntentResult); break;
Om användaren nu har en annan avsikt kan LLM hantera användarens begäran. Låt oss prova det!
Kontrollera ditt arbete
I den här uppgiften kör du programmet och kontrollerar att koden fungerar korrekt.
Ange
dotnet run
i terminalen. När du uppmanas till det anger du text som liknar följande fråga:What would you like to do? How many TTD is 50 Qatari Riyals?
Du bör se utdata som liknar följande svar:
$50 QAR is approximately $93.10 in Trinidadian Dollars (TTD)
Ange
dotnet run
i terminalen. När du uppmanas till det anger du text som liknar följande fråga:What would you like to do? I want to go somewhere that has lots of warm sunny beaches and delicious, spicy food!
Du bör se utdata som liknar följande svar:
Based on your preferences for warm sunny beaches and delicious, spicy food, I have a few destination recommendations for you: 1. Thailand: Known for its stunning beaches, Thailand offers a perfect combination of relaxation and adventure. You can visit popular beach destinations like Phuket, Krabi, or Koh Samui, where you'll find crystal-clear waters and white sandy shores. Thai cuisine is famous for its spiciness, so you'll have plenty of mouthwatering options to try, such as Tom Yum soup, Pad Thai, and Green Curry. 2. Mexico: Mexico is renowned for its beautiful coastal regions and vibrant culture. You can explore destinations like Cancun, Playa del Carmen, or Tulum, which boast stunning beaches along the Caribbean Sea. Mexican cuisine is rich in flavors and spices, offering a wide variety of dishes like tacos, enchiladas, and mole sauces that will satisfy your craving for spicy food. ... These destinations offer a perfect blend of warm sunny beaches and delicious, spicy food, ensuring a memorable trip for you. Let me know if you need any further assistance or if you have any specific preferences for your trip!
Ange
dotnet run
i terminalen. När du uppmanas till det anger du text som liknar följande fråga:What would you like to do? Can you give me a recipe for chicken satay?
Du bör se ett svar som liknar följande svar:
Sure, I can help with that. Certainly! Here's a recipe for chicken satay: ...
Avsikten bör dirigeras till ditt standardfall och LLM ska hantera begäran om ett kycklingsatayrecept, hur utsökt!
Anteckning
Om koden inte ger utdata som du förväntade dig kan du granska koden i mappen Solution.
Nu ska vi ändra routningslogik för att tillhandahålla lite konversationshistorik till vissa plugin-program. Med historik kan plugin-program hämta mer sammanhangsberoende relevanta svar på användarens begäranden.