演習 - プロンプトでペルソナを使用する
プロンプトにペルソナを割り当てると、大規模言語モデル (LLM) によって生成される応答の品質が向上します。 ペルソナは LLM にコンテキストを提供し、LLM がユーザーの意図に合わせてより適切な応答を一貫して生成できるようにします。 試してみましょう。
前の演習で作成した Visual Studio Code プロジェクトを開きます。
前の演習のプロンプトを次のテキストで更新します。
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);
ターミナルに「
dotnet run
」を入力してコードを実行します。コードを実行すると、前の結果よりも応答の一貫性が高いことがわかります。 LLM で割り当てたペルソナとタスクのコンテキストに一致する応答が生成される可能性が高くなります。
応答は次の出力のようになります。
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!
また、応答の生成時にロールを適用する指示を LLM に提供し、要求と応答の例を指定することもできます。 Semantic Kernel では、メッセージ ロールを定義するために特別な構文を使用します。 メッセージ ロールを定義するには、<message>
タグ内にロール名を属性としてメッセージをラップすることができます。 サポートされているロールは、"user"、"system"、"アシスタント"、"bot" です。 試してみましょう。
次のテキストでプロンプトを更新します。
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>";
次に、入力を更新して、旅行の詳細を AI に提供しましょう。
文字列
input
を次のテキストに更新します。string input = @"I'm planning an anniversary trip with my spouse. We like hiking, mountains, and beaches. Our travel budget is $15000";
次に、コードを実行し、LLM がどのように応答するかを確認します。
ターミナルで「
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!
LLM にペルソナを割り当てると、より自然でパーソナライズされた会話を作成できることがわかります。
また、プロンプトを調整して、詳細情報を減らし、特定の情報のみを出力することもできます。 たとえば、ユーザーが、ある目的地から別の目的地へのフライトの一覧を取得したいとします。 LLM に対して、入力を解析し、コードで使用できる形式で関連情報のみを返すように求めることができます。 試してみましょう。
プロンプトを次のテキストに更新します。
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>";
このプロンプトでは、
<message>
を使用し、例を LLM に提供します。 解析できるように出力を書式設定する必要があるため、この例ではその形式を提供します。 次に、AI に旅行の詳細を提供するようにinput
を更新しましょう。input
を次のテキストに変更します。string input = @"I have a vacation from June 1 to July 22. I want to go to Greece. I live in Chicago.";
ターミナルに「
dotnet run
」を入力してコードを実行します。Chicago|Greece|06/01/2024|07/22/2024
LLM がどのようにして入力を解析し、関連する情報のみを返すことができたかに注目してください。 プロンプトで LLM にデータの解析を求めることは、ユーザーから必要な情報をすばやく取得するための優れた方法です。
重要
これまでに記述したコードは削除しないでください。次の演習で必要になります。