Exercice : Enregistrement de prompts dans des fichiers

Effectué

Supposez que vous souhaitez suggérer des destinations de voyage et recommander des activités à un utilisateur. Dans cet exercice, vous allez vous entraîner à créer des prompts et à les enregistrer dans des fichiers. C’est parti !

  1. Ouvrez le projet Visual Studio Code que vous avez créé dans l’exercice précédent.

  2. Dans le fichier Program.cs, supprimez les variables prompt et input que vous avez créées dans l’exercice précédent, de façon à obtenir le code suivant :

    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();
    
  3. Vérifiez que les dossiers suivants existent dans votre projet :

    • « Prompts »
    • « Prompts/TravelPlugins »
    • « Prompts/TravelPlugins/SuggestDestinations »
    • « Prompts/TravelPlugins/GetDestination »
    • « Prompts/TravelPlugins/SuggestActivities »

    Ces répertoires vous aideront à organiser vos prompts. Tout d’abord, vous créez un prompt qui identifie la destination où un utilisateur souhaite se rendre. Pour créer le prompt, vous devez créer les fichiers config.json et skprompt.txt. C’est parti !

  4. Dans le dossier GetDestination, ouvrez le fichier config.json et entrez le code suivant :

    {
        "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
            }
        ]
    }
    

    Cette configuration indique au noyau ce que fait votre prompt et quelles variables d’entrée accepter. Ensuite, vous fournissez le texte du prompt dans le fichier skprompt.txt.

  5. Dans le dossier GetDestination, ouvrez le fichier skprompt.txt et entrez le texte suivant :

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

    Ce fichiers permet au modèle de langage volumineux (LLM) de filtrer l’entrée de l’utilisateur et de récupérer uniquement la destination à partir du texte.

  6. Dans le dossier SuggestDestinations, ouvrez le fichier config.json et entrez le texte suivant :

    {
        "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
            }
        ]
    }
    

    Dans cette configuration, vous pouvez augmenter un peu la température afin de rendre la sortie plus créative.

  7. Dans le dossier SuggestDestinations, ouvrez le fichier skprompt.txt et entrez le texte suivant :

    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>
    

    Ce prompt suggère des destinations de voyage à l’utilisateur en fonction de son entrée. Nous allons maintenant créer un plug-in pour recommander des activités à la destination choisie.

  8. Dans le dossier SuggestActivities, ouvrez le fichier config.json et entrez le texte suivant :

    {
        "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
            }
        ]
    }
    

    Dans cette configuration, vous augmentezmax_tokens afin d’autoriser davantage de texte pour l’historique et le texte généré.

  9. Dans le dossier SuggestActivities, ouvrez le fichier skprompt.txt et entrez le texte suivant :

    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.
    

    Maintenant, importons et testons vos nouveaux prompts.

  10. Mettez à jour votre fichier Program.cs avec le code suivant :

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

    Dans ce code, vous importez les plugins que vous avez créés. Vous utilisez également un objet ChatHistory pour stocker la conversation de l’utilisateur. Pour finir, vous transmettez des informations au prompt SuggestDestinations et vous enregistrez les résultats. À présent, nous allons demander à l’utilisateur où il souhaite aller, afin de pouvoir lui recommander certaines activités.

  11. Ajoutez le code suivant à votre fichier 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);
    

    Dans ce code, vous obtenez une entrée utilisateur pour savoir où il souhaite aller. Ensuite, vous appelez l’invite SuggestActivities avec la destination et l’historique de conversation.

  12. Pour tester le code, entrez dotnet run dans le terminal.

    La sortie finale peut ressembler à ce qui suit :

    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.
    

    Et voilà. Vous avez créé les prémices d’un assistant de voyage IA ! Essayez de modifier l’entrée pour voir comment le modèle LLM répond.