Oefening: gebruikersintentie router

Voltooid

In deze oefening detecteert u de intentie van de gebruiker en routet u het gesprek naar de gewenste invoegtoepassingen. U kunt een opgegeven invoegtoepassing gebruiken om de intentie van de gebruiker op te halen. Laten we aan de slag gaan.

  1. Werk uw Program.cs-bestand bij met de volgende code:

    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 }}
    );
    
    

    In deze code gebruikt u de GetIntent prompt om de intentie van de gebruiker te detecteren. Vervolgens slaat u de intentie op in een variabele met de naam intent. Vervolgens routeert u de intentie naar uw CurrencyConverter-invoegtoepassing.

  2. Voeg de volgende code toe aan uw Program.cs-bestand:

    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;
    }
    

    De GetIntent-invoegtoepassing retourneert de volgende waarden: ConvertCurrency, SuggestDestinations, SuggestActivities, Translate, HelpfulPhrases, Unknown. U gebruikt een switch-instructie om de intentie van de gebruiker naar de juiste invoegtoepassing te routeren.

    Als de intentie van de gebruiker is om valuta te converteren, gebruikt u de GetTargetCurrencies prompt om de valutagegevens op te halen. Vervolgens gebruikt u de CurrencyConverter-invoegtoepassing om het bedrag te converteren.

    Vervolgens voegt u enkele gevallen toe om de andere intenties af te handelen. Voorlopig gaan we de functie voor het aanroepen van automatische functies van de Semantische Kernel SDK gebruiken om de intentie naar de beschikbare invoegtoepassingen te routeren.

  3. Maak de instelling voor het automatisch aanroepen van functies door de volgende code toe te voegen aan uw Program.cs-bestand:

    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 }}
    );
    

    Vervolgens voegt u cases toe aan de switch-instructie voor de andere intenties.

  4. Werk uw Program.cs-bestand bij met de volgende code:

    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;
    }
    

    In deze code gebruikt u de instelling AutoInvokeKernelFunctions om automatisch functies en prompts aan te roepen waarnaar wordt verwezen in uw kernel. Als de intentie van de gebruiker is om valuta te converteren, voert de CurrencyConverter-invoegtoepassing de taak uit.

    Als de bedoeling van de gebruiker is om doel- of activiteitssuggesties op te halen, een woordgroep te vertalen of nuttige zinnen in een taal te krijgen, roept de instelling AutoInvokeKernelFunctions automatisch de bestaande invoegtoepassingen aan die zijn opgenomen in de projectcode.

    U kunt ook code toevoegen om de invoer van de gebruiker uit te voeren als een prompt voor het model voor grote talen (LLM) als deze niet onder een van deze intentiecases valt.

  5. Werk de standaardcase bij met de volgende code:

    default:
        Console.WriteLine("Sure, I can help with that.");
        var otherIntentResult = await kernel.InvokePromptAsync(input!, new(settings));
        Console.WriteLine(otherIntentResult);
        break;
    

    Als de gebruiker een andere intentie heeft, kan de LLM de aanvraag van de gebruiker afhandelen. Laten we het eens proberen.

Uw werk controleren

In deze taak voert u uw toepassing uit en controleert u of uw code correct werkt.

  1. Voer dotnet run in de terminal in. Wanneer u hierom wordt gevraagd, voert u tekst in die lijkt op de volgende prompt:

    What would you like to do?
    How many TTD is 50 Qatari Riyals?    
    
  2. U zou uitvoer moeten zien die lijkt op de volgende reactie:

    $50 QAR is approximately $93.10 in Trinidadian Dollars (TTD)
    
  3. Voer dotnet run in de terminal in. Wanneer u hierom wordt gevraagd, voert u tekst in die lijkt op de volgende prompt:

    What would you like to do?
    I want to go somewhere that has lots of warm sunny beaches and delicious, spicy food!
    
  4. U ziet een reactie die lijkt op de volgende reactie:

    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. Voer dotnet run in de terminal in. Wanneer u hierom wordt gevraagd, voert u tekst in die lijkt op de volgende prompt:

    What would you like to do?
    Can you give me a recipe for chicken satay?
    
    
  6. Als het goed is, ziet u een antwoord dat lijkt op het volgende antwoord:

    Sure, I can help with that.
    Certainly! Here's a recipe for chicken satay:
    
    ...
    

    De intentie moet worden doorgestuurd naar uw standaardcase en de LLM moet de aanvraag voor een kip satay recept afhandelen, hoe heerlijk!

    Notitie

    Als uw code niet de verwachte uitvoer produceert, kunt u de code controleren in de map Solution.

Vervolgens gaan we de routeringslogica aanpassen om gespreksgeschiedenis aan bepaalde plugins te bieden. Door de geschiedenis op te geven, kunnen de invoegtoepassingen contextafhankelijk relevantere antwoorden ophalen op de aanvragen van de gebruiker.