Exercício – Usar personas em solicitações

Concluído

Atribuir personas às suas solicitações pode melhorar a qualidade das respostas geradas pelo LLM (modelo de linguagem grande). As personas fornecem contexto para o LLM, permitindo que ele gere respostas consistentemente mais alinhadas com a intenção do usuário. Vamos experimentar!

  1. Abra o projeto do Visual Studio Code criado no exercício anterior.

  2. Atualize sua solicitação do exercício anterior com o seguinte texto:

    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. Execute o código inserindo dotnet run no terminal.

    Se você executar o código, poderá observar que as respostas são mais consistentes do que os resultados anteriores. É mais provável que o LLM gere uma resposta que corresponda à persona atribuída e ao contexto da tarefa.

    Sua resposta pode ser semelhante à seguinte saída:

    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!
    

Você também pode fornecer instruções ao LLM para assumir uma função ao gerar uma resposta e fornecer solicitações e respostas de exemplo. No Kernel Semântico, uma sintaxe especial é usada para definir funções de mensagem. Para definir uma função de mensagem, você pode encapsular a mensagem na marca <message> com o nome da função como um atributo. As funções com suporte são “usuário”, “sistema”, “assistente'”e “bot”. Vamos experimentar!

  1. Atualize sua solicitação com o seguinte texto:

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

    Em seguida, vamos atualizar a entrada para fornecer à IA alguns detalhes para a viagem.

  2. Atualize a cadeia de caracteres input para o seguinte texto:

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

    Em seguida, execute o código e observe como o LLM responde.

  3. Insira dotnet run no terminal.

    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!
    

    Observe que atribuir uma persona ao LLM permite que você crie uma conversa mais natural e personalizada.

Você também pode ajustar as solicitações para ficarem menos detalhadas e gerar apenas informações específicas. Por exemplo, suponha que o usuário queira obter uma lista de voos de um destino para outro. Você pode pedir ao LLM para analisar sua entrada e retornar apenas as informações relevantes em um formato que você pode usar em seu código. Vamos experimentar!

  1. Atualize sua atualização para o seguinte texto:

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

    Nesta solicitação, usamos o <message> e também fornecemos um exemplo para o LLM. Queremos formatar a saída de uma maneira que possamos analisar, por isso fornecemos esse formato no exemplo. Em seguida, vamos atualizar o input para fornecer à IA alguns detalhes sobre a viagem.

  2. Modifique o input para o texto a seguir:

    string input = @"I have a vacation from June 1 to July 22. I want to go to Greece. 
        I live in Chicago.";
    
  3. Execute o código inserindo dotnet run no terminal.

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

    Observe como o LLM foi capaz de analisar a entrada e retornar apenas as informações relevantes. Solicitar ao LLM para analisar dados é uma ótima maneira de obter rapidamente as informações que você precida do usuário.

Importante

Certifique-se de não excluir nenhum código que você escreveu até agora, pois ele será necessário para o próximo exercício.