Cvičení – směrování záměru uživatele

Dokončeno

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.

  1. 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ázvem intent. Dále směrujete záměr na modul CurrencyConverter plug-in.

  2. 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í modulu CurrencyConverter 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.

  3. 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.

  4. 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.

  5. 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ě.

  1. 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?    
    
  2. Měl by se zobrazit výstup podobný následující odpovědi:

    $50 QAR is approximately $93.10 in Trinidadian Dollars (TTD)
    
  3. 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!
    
  4. 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!
    
  5. 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?
    
    
  6. 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.