Cvičení – směrování záměru uživatele
V tomto cvičení zjistíte záměr uživatele a přesměrujete konverzaci na požadované moduly plug-in. K načtení záměru uživatele můžete použít poskytnutý modul plug-in. Pusťme se do toho.
Aktualizujte
Program.cs
soubor následujícím kódem: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 }} );
V tomto kódu použijete
GetIntent
výzvu ke zjištění záměru uživatele. Záměr pak uložíte do proměnné s názvemintent
. Dále směrujete záměr na modulCurrencyConverter
plug-in.Do souboru přidejte následující kód
Program.cs
: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; }
Modul
GetIntent
plug-in vrátí následující hodnoty: ConvertCurrency, SuggestDestinations, SuggestActivities, Translate, HelpfulPhrases, Unknown. Pomocíswitch
příkazu směrujete záměr uživatele na příslušný modul plug-in.Pokud má uživatel záměr převést měnu, použijte
GetTargetCurrencies
výzvu k načtení informací o měně. Pak pomocí moduluCurrencyConverter
plug-in převedete částku.Dále přidáte některé případy pro zpracování ostatních záměrů. Prozatím použijeme funkci automatického volání sady SDK sémantického jádra ke směrování záměru na dostupné moduly plug-in.
Vytvořte nastavení automatického volání funkce přidáním následujícího kódu do
Program.cs
souboru: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 }} );
V dalším kroku přidáte případy do příkazu switch pro ostatní záměry.
Aktualizujte
Program.cs
soubor následujícím kódem: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; }
V tomto kódu použijete
AutoInvokeKernelFunctions
nastavení k automatickému volání funkcí a výzev, na které se odkazuje v jádru. Pokud má uživatel záměr převést měnu,CurrencyConverter
modul plug-in provede svoji úlohu.Pokud je záměrem uživatele získat návrhy cílů nebo aktivit, přeložit frázi nebo získat užitečné fráze v jazyce,
AutoInvokeKernelFunctions
nastavení automaticky zavolá existující moduly plug-in, které byly součástí kódu projektu.Můžete také přidat kód pro spuštění vstupu uživatele jako výzvu k rozsáhlému jazykovému modelu (LLM), pokud nespadne do žádného z těchto případů záměru.
Aktualizujte výchozí případ následujícím kódem:
default: Console.WriteLine("Sure, I can help with that."); var otherIntentResult = await kernel.InvokePromptAsync(input!, new(settings)); Console.WriteLine(otherIntentResult); break;
Pokud má uživatel jiný záměr, LLM může zpracovat žádost uživatele. Pojďme to vyzkoušet!
Kontrola práce
V této úloze spustíte aplikaci a ověříte, že kód funguje správně.
Zadejte
dotnet run
v terminálu. Po zobrazení výzvy zadejte text podobný následujícímu řádku:What would you like to do? How many TTD is 50 Qatari Riyals?
Měl by se zobrazit výstup podobný následující odpovědi:
$50 QAR is approximately $93.10 in Trinidadian Dollars (TTD)
Zadejte
dotnet run
v terminálu. Po zobrazení výzvy zadejte text podobný následujícímu řádku:What would you like to do? I want to go somewhere that has lots of warm sunny beaches and delicious, spicy food!
Měl by se zobrazit výstup podobný následující odpovědi:
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!
Zadejte
dotnet run
v terminálu. Po zobrazení výzvy zadejte text podobný následujícímu řádku:What would you like to do? Can you give me a recipe for chicken satay?
Měla by se zobrazit odpověď podobná následující odpovědi:
Sure, I can help with that. Certainly! Here's a recipe for chicken satay: ...
Záměr by měl být směrován do vašeho výchozího případu a LLM by měl zpracovat požadavek na kuřecí satay recept, jak lahodný!
Poznámka:
Pokud váš kód nevygeneruje očekávaný výstup, můžete kód zkontrolovat ve složce Řešení .
V dalším kroku upravíme logiku směrování tak, aby určitým modulům plug-in poskytovala historii konverzací. Poskytování historie umožňuje modulům plug-in načíst kontextově relevantní odpovědi na požadavky uživatele.