Övning – Dirigera användar 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 sätter vi igång!

  1. Program.cs Uppdatera filen 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 uppmaningen GetIntent för att identifiera användarens avsikt. Sedan lagrar du avsikten i en variabel med namnet intent. Därefter dirigerar du avsikten till plugin-programmet CurrencyConverter .

  2. Lägg till följande kod i Program.cs filen:

    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: ConvertCurrency, SuggestDestinations, SuggestActivities, Translate, HelpfulPhrases, Unknown. 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 kommandotolken GetTargetCurrencies 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 funktionen för automatisk funktionsanrop i Semantic Kernel SDK för att dirigera avsikten till de tillgängliga plugin-program.

  3. Skapa inställningen för automatiska funktionsanrop genom att lägga till följande kod i Program.cs filen:

    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. Program.cs Uppdatera filen 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 CurrencyConverter utför 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 AutoInvokeKernelFunctions inställningen automatiskt de 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. Vi provar!

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!

    Kommentar

    Om koden inte ger utdata som du förväntade dig kan du granska koden i mappen Lösning .

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.