Oefening: prompts opslaan in bestanden
Stel dat u reisbestemmingen wilt voorstellen en activiteiten voor een gebruiker wilt aanbevelen. In deze oefening oefent u met het maken van prompts en het opslaan ervan in bestanden. Laten we beginnen.
Open het Visual Studio Code-project dat u in de vorige oefening hebt gemaakt.
Verwijder in het Program.cs bestand de
prompt
variabelen dieinput
u in de vorige oefening hebt gemaakt, zodat u de volgende code hebt: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();
Controleer of de volgende mappen aanwezig zijn in uw project:
- 'Prompts'
- 'Prompts/TravelPlugins'
- 'Prompts/TravelPlugins/SuggestDestinations'
- 'Prompts/TravelPlugins/GetDestination'
- 'Prompts/TravelPlugins/SuggestActivities'
Met deze mappen kunt u uw prompts ordenen. Eerst maakt u een prompt waarmee de bestemming wordt geïdentificeerd waarnaar een gebruiker wil reizen. Als u de prompt wilt maken, moet u de config.json en de skprompt.txt-bestanden maken. Laten we beginnen.
Open in de map GetDestination het bestand config.json en voer de volgende code in:
{ "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 } ] }
Deze configuratie vertelt de kernel wat uw prompt doet en welke invoervariabelen moeten worden geaccepteerd. Vervolgens geeft u de prompttekst op in het bestand skprompt.txt.
Open in de map GetDestination het bestand skprompt.txt en voer de volgende tekst in:
<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>
Deze prompt helpt het LLM (Large Language Model) de invoer van de gebruiker te filteren en alleen de bestemming op te halen uit de tekst.
Open het config.json bestand in de map SuggestDestinations en voer de volgende tekst in:
{ "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 } ] }
In deze configuratie kunt u de temperatuur een beetje verhogen om de uitvoer creatiever te maken.
Open in de map SuggestDestinations het bestand skprompt.txt en voer de volgende tekst in:
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>
Met deze prompt worden reisbestemmingen naar de gebruiker voorgesteld op basis van hun invoer. We gaan nu een invoegtoepassing maken om activiteiten op hun bestemming aan te bevelen.
Open in de map SuggestActivities het bestand config.json en voer de volgende tekst in:
{ "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 } ] }
In deze configuratie verhoogt u de
max_tokens
mogelijkheid om meer tekst toe te staan voor de geschiedenis en gegenereerde tekst.Open in de map SuggestActivities het bestand skprompt.txt en voer de volgende tekst in:
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 gaan we uw nieuwe prompts importeren en testen.
Werk uw Program.cs-bestand bij met de volgende code:
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);
In deze code importeert u de invoegtoepassingen die u hebt gemaakt. U gebruikt ook een
ChatHistory
object om het gesprek van de gebruiker op te slaan. Ten slotte geeft u enkele gegevens door aan deSuggestDestinations
prompt en registreert u de resultaten. Vervolgens gaan we de gebruiker vragen waar ze naartoe willen, zodat we bepaalde activiteiten voor hen kunnen aanbevelen.Voeg de volgende code toe aan uw Program.cs-bestand :
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);
In deze code krijgt u invoer van de gebruiker om erachter te komen waar ze naartoe willen. Vervolgens belt u de
SuggestActivities
prompt met de bestemming en de gespreksgeschiedenis.Als u de code wilt testen, voert u
dotnet run
de terminal in.De uiteindelijke uitvoer kan er ongeveer als volgt uitzien:
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.
U hebt nu het begin van een AI-reisassistent gemaakt. Wijzig de invoer om te zien hoe de LLM reageert.