Ćwiczenie — używanie personas w monitach

Ukończone

Przypisywanie osób do monitów może poprawić jakość odpowiedzi generowanych przez duży model językowy (LLM). Osoby zapewniają kontekst do usługi LLM, co pozwala na spójne generowanie odpowiedzi, które są lepiej dopasowane do intencji użytkownika. Wypróbujmy to!

  1. Otwórz projekt programu Visual Studio Code utworzony w poprzednim ćwiczeniu.

  2. Zaktualizuj monit z poprzedniego ćwiczenia przy użyciu następującego tekstu:

    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. Uruchom kod, wprowadzając dotnet run polecenie w terminalu.

    Jeśli uruchomisz kod, możesz zauważyć, że odpowiedzi są bardziej spójne niż poprzednie wyniki. Funkcja LLM najprawdopodobniej wygeneruje odpowiedź zgodną z przypisaną osobą i kontekstem zadania.

    Odpowiedź może wyglądać podobnie do następujących danych wyjściowych:

    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!
    

Możesz również podać instrukcje dla usługi LLM, aby przyjąć rolę podczas generowania odpowiedzi, i podać przykładowe żądania i odpowiedzi. W jądrze semantycznym specjalna składnia służy do definiowania ról komunikatów. Aby zdefiniować rolę komunikatu, możesz opakować komunikat w <message> tagu przy użyciu nazwy roli jako atrybutu. Obsługiwane role to "użytkownik", "system", "asystent" i "bot". Wypróbujmy to!

  1. Zaktualizuj monit przy użyciu następującego tekstu:

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

    Następnie zaktualizujemy dane wejściowe, aby udostępnić sztuczną inteligencję z pewnymi szczegółami podróży.

  2. input Zaktualizuj ciąg do następującego tekstu:

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

    Następnie uruchom kod i sprawdź, jak działa usługa LLM.

  3. Wprowadź w terminalu polecenie dotnet run.

    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!
    

    Zwróć uwagę, że przypisywanie osoby do usługi LLM umożliwia utworzenie bardziej naturalnej i spersonalizowanej konwersacji.

Można również dostroić monity o mniej pełne i tylko dane wyjściowe. Załóżmy na przykład, że użytkownik chce uzyskać listę lotów z jednego miejsca docelowego do drugiego. Możesz poprosić LLM o przeanalizowanie ich danych wejściowych i zwrócenie tylko odpowiednich informacji w formacie, którego można użyć w kodzie. Wypróbujmy to!

  1. Zaktualizuj monit o następujący tekst:

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

    W tym wierszu polecenia użyjemy <message> elementu , a także podajemy przykład dla usługi LLM. Chcemy sformatować dane wyjściowe w sposób, który możemy przeanalizować, więc udostępniamy ten format w przykładzie. Następnie zaktualizujmy element input , aby udostępnić sztuczną inteligencję z pewnymi szczegółami podróży.

  2. Zmodyfikuj element na input następujący tekst:

    string input = @"I have a vacation from June 1 to July 22. I want to go to Greece. 
        I live in Chicago.";
    
  3. Uruchom kod, wprowadzając dotnet run polecenie w terminalu.

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

    Zwróć uwagę, że funkcja LLM mogła przeanalizować dane wejściowe i zwrócić tylko odpowiednie informacje. Monitowanie usługi LLM o analizowanie danych to doskonały sposób na szybkie uzyskanie potrzebnych informacji od użytkownika.

Ważne

Pamiętaj, aby nie usunąć żadnego z napisanych do tej pory kodu, który został napisany do tej pory, potrzebny do następnego ćwiczenia.