Övning – Styra användarens avsikt

Slutförd

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!

  1. 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 namnet intent. Därefter dirigerar du intenten till ditt CurrencyConverter-plugin.

  2. 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 en switch-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-programmet CurrencyConverter 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.

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

  4. 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ör CurrencyConverter 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.

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

  1. 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?    
    
  2. Du bör se utdata som liknar följande svar:

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