Esercizio - Usare gli utenti tipo nei prompt

Completato

L'assegnazione di utenti tipo ai prompt consente di migliorare la qualità delle risposte generate dal modello linguistico di grandi dimensioni (LLM). Le persone forniscono contesto al modello LLM consentendo di generare in m odo coerente risposte maggiormente allineate all’intento dell’utente. A questo punto è possibile provare.

  1. Aprire il progetto di Visual Studio Code creato nell'esercizio precedente.

  2. Aggiornare il prompt dall'esercizio precedente con il testo seguente:

    using Microsoft.SemanticKernel;
    using Microsoft.SemanticKernel.Plugins.Core;
    
    var builder = Kernel.CreateBuilder();
    builder.AddAzureOpenAIChatCompletion(
        "your-deployment-name",
        "your-endpoint",
        "your-api-key",
        "deployment-model");
    
    var kernel = builder.Build();
    
    string language = "French";
    string history = @"I'm traveling with my kids and one of them has a peanut allergy.";
    
    // Assign a persona to the prompt
    string prompt = @$"
        You are a travel assistant. You are helpful, creative, and very friendly. 
        Consider the traveler's background:
        ${history}
    
        Create a list of helpful phrases and words in ${language} a traveler would find useful.
    
        Group phrases by category. Include common direction words. 
        Display the phrases in the following format: 
        Hello - Ciao [chow]
    
        Begin with: 'Here are some phrases in ${language} you may find helpful:' 
        and end with: 'I hope this helps you on your trip!'";
    
    var result = await kernel.InvokePromptAsync(prompt);
    Console.WriteLine(result);
    
  3. Eseguire il codice immettendo dotnet run nel terminale.

    Se si esegue il codice, è possibile notare che le risposte sono più coerenti rispetto ai risultati precedenti. È più probabile che l'LLM generi una risposta che corrisponda all’utente tipo assegnato e al contesto dell'attività.

    La risposta potrebbe essere simile all'output seguente:

    Here are some phrases in French you may find helpful:
    
    Greetings:
    - Hello - Bonjour [bon-zhur]
    - Goodbye - Au revoir [oh ruh-vwar]
    - Thank you - Merci [mehr-see]
    
    Directions:
    - Go straight ahead - Allez tout droit [ah-lay too dwa]
    - Turn left/right - Tournez à gauche/droite [toor-nay ah gohsh/dwaht]
    - It's on the left/right - C'est à gauche/droite [say ah gohsh/dwaht]
    
    Food:
    - Does this contain peanuts? - Est-ce que cela contient des cacahuètes? [ess-kuh suh suh-la kohn-tee-eh day kah-kah-weht?]
    - My child has a peanut allergy - Mon enfant est allergique aux cacahuètes [mohn ahn-fahn ay ah-lair-gee-k oh kah-kah-weht]
    
    ...
    
    I hope this helps you on your trip!
    

È anche possibile fornire istruzioni all'LLM affinché assuma un ruolo quando genera una risposta, e fornire esempi di richieste e risposte. Nel kernel semantico viene usata una sintassi speciale per definire i ruoli del messaggio. Per definire un ruolo del messaggio, è possibile eseguire il wrapping del messaggio nel tag <message> con il nome del ruolo come attributo. I ruoli supportati sono 'utente', 'sistema', 'assistente' e 'bot'. A questo punto è possibile provare.

  1. Aggiornare il prompt con il testo seguente:

    string prompt = @$"
        The following is a conversation with an AI travel assistant. 
        The assistant is helpful, creative, and very friendly.
    
        <message role=""user"">Can you give me some travel destination suggestions?</message>
    
        <message role=""assistant"">Of course! Do you have a budget or any specific 
        activities in mind?</message>
    
        <message role=""user"">${input}</message>";
    

    Aggiornare quindi l'input per fornire all'intelligenza artificiale alcuni dettagli per il viaggio.

  2. Aggiornare la stringa inputal testo seguente:

    string input = @"I'm planning an anniversary trip with my spouse. We like hiking, mountains, 
        and beaches. Our travel budget is $15000";
    

    Eseguire quindi il codice e osservare come risponde l’LLM.

  3. Immettere dotnet run nel terminale.

    That sounds like a great trip ahead! Here are a few suggestions:
    
    1. New Zealand - With stunning mountain ranges, iconic hiking trails, and beautiful beaches, New Zealand is a popular destination for outdoor enthusiasts. Some must-visit spots include the Milford Track, Fox Glacier, and Abel Tasman National Park.
    
    2. Hawaii - Known for its picturesque beaches, Hawaii is also home to several stunning hiking trails. The Kalalau Trail on Kauai is a popular trail that offers breathtaking views of the Na Pali Coast.
    
    3. Costa Rica - Costa Rica boasts beautiful beaches and breathtaking mountains. Hike through the Monteverde Cloud Forest Reserve and catch a glimpse of exotic wildlife like the resplendent quetzal, or take a dip in the turquoise waters of Playa Manuel Antonio.
    
    4. Banff National Park, Canada - Located in the Canadian Rockies, Banff National Park offers some of the most stunning mountain scenery in the world. Explore the park's many hiking trails, relax in hot springs, and take in the beauty of the Canadian wilderness.
    
    5. Amalfi Coast, Italy - The Amalfi Coast is a picturesque stretch of coastline in Southern Italy that offers stunning views of the Mediterranean Sea. Take a hike along the famous Path of the Gods or enjoy a romantic stroll through one of the Amalfi Coast's charming towns like Positano or Ravello.
    
    These are just a few of many options, but with a budget of $15000, you should be able to have a fantastic trip to any of these destinations!
    

    Si noti come l'assegnazione di un utente tipo all'LLM consenta di creare una conversazione più naturale e personalizzata.

È inoltre possibile ottimizzare i prompt in modo che siano meno dettagliati e restituiscano solo informazioni specifiche. Si supponga, ad esempio, che l'utente voglia ottenere un elenco di voli da una destinazione a un'altra. È possibile chiedere all'LLM di analizzare l'input e restituire solo le informazioni pertinenti in un formato che si può usare nel codice. A questo punto è possibile provare.

  1. Aggiornare il prompt al testo seguente:

    string prompt = @$"
    <message role=""system"">Instructions: Identify the from and to destinations 
    and dates from the user's request</message>
    
    <message role=""user"">Can you give me a list of flights from Seattle to Tokyo? 
    I want to travel from March 11 to March 18.</message>
    
    <message role=""assistant"">Seattle|Tokyo|03/11/2024|03/18/2024</message>
    
    <message role=""user"">${input}</message>";
    

    In questo prompt viene usato il <message> e viene fornito anche un esempio per l’LLM. Si vuole formattare l'output in un modo che possa essere analizzato, pertanto nell'esempio viene fornito questo formato. Viene quindi aggiornata la input per fornire all'intelligenza artificiale alcuni dettagli relativi al viaggio.

  2. Modificare il input nel testo seguente:

    string input = @"I have a vacation from June 1 to July 22. I want to go to Greece. 
        I live in Chicago.";
    
  3. Eseguire il codice immettendo dotnet run nel terminale.

    Chicago|Greece|06/01/2024|07/22/2024
    

    Si noti che l'LLM è stato in grado di analizzare l'input e restituire solo le informazioni pertinenti. Chiedere all'LLM di analizzare i dati è un ottimo modo per ottenere rapidamente le informazioni necessarie dall'utente.

Importante

Assicurarsi di non eliminare il codice scritto finora, perché sarà necessario per l'esercizio successivo.