演習 - プロンプトをファイルに保存する
ユーザーに、旅行先を提案し、アクティビティを推奨するとします。 この演習では、プロンプトの作成と、それらのファイルへの保存を実践します。 それでは始めましょう。
前の演習で作成した Visual Studio Code プロジェクトを開きます。
Program.cs ファイルで、前の演習で作成した
prompt
とinput
変数を削除して、次のコードを残します。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();
プロジェクトに次のフォルダーが存在することを確認します。
- 'Prompts'
- 'Prompts/TravelPlugins'
- 'Prompts/TravelPlugins/SuggestDestinations'
- 'Prompts/TravelPlugins/GetDestination'
- 'Prompts/TravelPlugins/SuggestActivities'
これらのディレクトリは、プロンプトを整理するのに役立ちます。 まず、ユーザーが旅行先を特定するプロンプトを作成します。 そのプロンプトを作成するには、config.json ファイルと skprompt.txt ファイルを作成する必要があります。 それでは始めましょう。
GetDestination フォルダー内の config.json ファイルを開いて、次のコードを入力します。
{ "schema": 1, "type": "completion", "description": "Identify the destination of the user's travel plans", "execution_settings": { "default": { "max_tokens": 1200, "temperature": 0 } }, "input_variables": [ { "name": "input", "description": "Text from the user that contains their travel destination", "required": true } ] }
この構成は、プロンプトの内容と受け入れる入力変数をカーネルに示します。 次に、skprompt.txt ファイルでプロンプト テキストを提供します。
GetDestination フォルダー内の skprompt.txt ファイルを開いて、次のテキストを入力します。
<message role="system"> Instructions: Identify the destination the user wants to travel to. </message> <message role="user"> I am so excited to take time off work! My partner and I are thinking about going to Santorini in Greece! I absolutely LOVE Greek food, I can't wait to be some place warm. </message> <message role="assistant">Santorini, Greece</message> <message role="user">{{$input}}</message>
このプロンプトは、大規模言語モデル (LLM) がユーザーの入力をフィルター処理し、テキストから目的地のみを取得するのに役立ちます。
SuggestDestinations フォルダー内の config.json ファイルを開いて、次のテキストを入力します。
{ "schema": 1, "type": "completion", "description": "Recommend travel destinations to the user", "execution_settings": { "default": { "max_tokens": 1200, "temperature": 0.3 } }, "input_variables": [ { "name": "input", "description": "Details about the user's travel plans", "required": true } ] }
この config 内で temperature を少し上げると、出力をよりクリエイティブにすることができます。
SuggestDestinations フォルダー内の skprompt.txt ファイルを開いて、次のテキストを入力します。
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>
このプロンプトは、入力に基づいてユーザーに旅行先を提案します。 次に、目的地でのアクティビティをお勧めするプラグインを作成しましょう。
SuggestActivities フォルダー内の config.json ファイルを開いて、次のテキストを入力します。
{ "schema": 1, "type": "completion", "description": "Recommend activities at a travel destination to the user", "execution_settings": { "default": { "max_tokens": 4000, "temperature": 0.3 } }, "input_variables": [ { "name": "history", "description": "Background information about the user", "required": true }, { "name": "destination", "description": "The user's travel destination", "required": true } ] }
この config 内で
max_tokens
を増やすと、履歴および生成されるテキストを増やすことができます。SuggestActivities フォルダー内の skprompt.txt ファイルを開いて、次のテキストを入力します。
You are a travel assistant. You are helpful, creative, and very friendly. Consider your previous conversation with the traveler: {{$history}} The traveler would like some activity recommendations, things to do, and points of interest for their trip. They want to go to {{$destination}}. Please provide them with a list of things they might like to do at their chosen destination.
次に、この新しいプロンプトをインポートしてテストしてみましょう。
Program.cs ファイルを次のコードで更新します。
using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Plugins.Core; using Microsoft.SemanticKernel.ChatCompletion; var builder = Kernel.CreateBuilder(); builder.AddAzureOpenAIChatCompletion( "your-deployment-name", "your-endpoint", "your-api-key", "deployment-model"); var kernel = builder.Build(); kernel.ImportPluginFromType<ConversationSummaryPlugin>(); var prompts = kernel.ImportPluginFromPromptDirectory("Prompts/TravelPlugins"); ChatHistory history = []; string input = @"I'm planning an anniversary trip with my spouse. We like hiking, mountains, and beaches. Our travel budget is $15000"; var result = await kernel.InvokeAsync<string>(prompts["SuggestDestinations"], new() {{ "input", input }}); Console.WriteLine(result); history.AddUserMessage(input); history.AddAssistantMessage(result);
このコードでは、作成したプラグインをインポートします。
ChatHistory
オブジェクトも使用して、ユーザーの会話を保存します。 最後に、SuggestDestinations
プロンプトにいくつかの情報を渡し、その結果を記録します。 次に、ユーザーに行きたい場所を尋ねて、いくつかのアクティビティをお勧めすることができるようにします。Program.cs ファイルに次のコードを追加します。
Console.WriteLine("Where would you like to go?"); input = Console.ReadLine(); result = await kernel.InvokeAsync<string>(prompts["SuggestActivities"], new() { { "history", history }, { "destination", input }, } ); Console.WriteLine(result);
このコード内では、ユーザーから何らかの入力を受け取り、目的地を確認します。 次に、旅行先と会話履歴を使用して
SuggestActivities
プロンプトを呼び出します。このコードをテストするには、ターミナル内に「
dotnet run
」を入力します。最終的な出力は次のようになります。
Absolutely! Japan is a wonderful destination with so much to see and do. Here are some recommendations for activities and points of interest: 1. Visit Tokyo Tower: This iconic tower offers stunning views of the city and is a must-visit attraction. 2. Explore the temples of Kyoto: Kyoto is home to many beautiful temples, including the famous Kiyomizu-dera and Fushimi Inari-taisha. 3. Experience traditional Japanese culture: Attend a tea ceremony, try on a kimono, or take a calligraphy class to immerse yourself in Japanese culture.
これで、AI 旅行アシスタントの始まりを作成しました。 入力を変更して、LLM がどのように応答するかを確認してみてください。