Övning – Spara frågor till filer
Anta att du vill föreslå resmål och rekommendera aktiviteter för en användare. I den här övningen övar du på att skapa prompter och spara dem i filer. Nu sätter vi igång!
Öppna Visual Studio Code-projektet som du skapade i föregående övning.
I filen Program.cs tar du bort variablerna
prompt
ochinput
som du skapade i föregående övning så att du har kvar följande kod: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();
Kontrollera att följande mappar finns i projektet:
- "Frågor"
- "Prompts/TravelPlugins"
- "Prompts/TravelPlugins/SuggestDestinations"
- "Prompts/TravelPlugins/GetDestination"
- "Prompts/TravelPlugins/SuggestActivities"
Dessa kataloger hjälper dig att organisera dina frågor. Först skapar du en uppmaning som identifierar målet som en användare vill resa till. Om du vill skapa prompten måste du skapa config.json- och skprompt.txt-filerna. Nu sätter vi igång!
I mappen GetDestination öppnar du filen config.json och anger följande kod:
{ "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 } ] }
Den här konfigurationen talar om för kerneln vad din fråga gör och vilka indatavariabler som ska accepteras. Därefter anger du prompttexten i filen skprompt.txt.
I mappen GetDestination öppnar du filen skprompt.txt och anger följande text:
<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>
Den här uppmaningen hjälper den stora språkmodellen (LLM) att filtrera användarens indata och hämta bara målet från texten.
I mappen SuggestDestinations öppnar du filen config.json och anger följande text:
{ "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 } ] }
I den här konfigurationen kan du höja temperaturen lite för att göra utdata mer kreativa.
I mappen SuggestDestinations öppnar du filen skprompt.txt och anger följande text:
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>
Den här uppmaningen föreslår resmål till användaren baserat på deras indata. Nu ska vi skapa ett plugin-program för att rekommendera aktiviteter på deras mål.
I mappen SuggestActivities öppnar du filen config.json och anger följande text:
{ "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 } ] }
I den här konfigurationen
max_tokens
ökar du för att tillåta mer text för historiken och genererad text.I mappen SuggestActivities öppnar du filen skprompt.txt och anger följande text:
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.
Nu ska vi importera och testa dina nya frågor!
Uppdatera din Program.cs-fil med följande kod:
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);
I den här koden importerar du de plugin-program som du skapade. Du använder också ett
ChatHistory
objekt för att lagra användarens konversation. Slutligen skickar du viss information till promptenSuggestDestinations
och registrerar resultatet. Nu ska vi fråga användaren vart de vill gå så att vi kan rekommendera några aktiviteter till dem.Lägg till följande kod i din Program.cs-fil :
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);
I den här koden får du indata från användaren för att ta reda på vart de vill gå. Sedan anropar du prompten
SuggestActivities
med målet och konversationshistoriken.Om du vill testa koden anger du
dotnet run
i terminalen.De slutliga utdata kan se ut ungefär så här:
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.
Nu har du skapat början på en AI-reseassistent! Prova att ändra indata för att se hur LLM svarar.