Übung: Speicherung von Prompts in Dateien

Abgeschlossen

Angenommen, Sie möchten Reiseziele und empfohlene Aktivitäten für Benutzer oder Benutzerinnen vorschlagen. In dieser Übung üben Sie, wie Prompts erstellt und in Dateien gespeichert werden. Legen wir los.

  1. Öffnen Sie das Visual Studio Code-Projekt, das Sie in der vorigen Übung erstellt haben.

  2. Entfernen Sie in der Datei Program.cs die Variablen prompt und input, die Sie in der vorherigen Übung erstellt haben, sodass der folgende Code verbleibt:

    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. Überprüfen Sie, ob die folgenden Ordner in Ihrem Projekt vorhanden sind:

    • „Prompts“
    • „Prompts/TravelPlugins“
    • „Prompts/TravelPlugins/SuggestDestinations“
    • „Prompts/TravelPlugins/GetDestination“
    • „Prompts/TravelPlugins/SuggestActivities“

    Diese Verzeichnisse helfen beim Organisieren Ihrer Prompts. Zuerst erstellen Sie einen Prompt, der das Ziel identifiziert, zu dem jemand reisen möchte. Zum Erstellen des Prompts müssen Sie die Dateien config.json und skprompt.txt erstellen. Legen wir los.

  4. Öffnen Sie im Ordner GetDestination die config.json-Datei, und geben Sie den folgenden Code ein:

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

    Diese Konfiguration teilt dem Kernel mit, was Ihr Prompt tut und welche Eingabevariablen akzeptiert werden sollen. Als Nächstes geben Sie den Prompttext in der Datei „skprompt.txt“ an.

  5. Öffnen Sie im Ordner GetDestination die Datei skprompt.txt, und geben Sie den folgenden Text ein:

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

    Mit diesem Prompt kann das große Sprachmodell (LLM) die Benutzereingabe filtern und nur das Reiseziel aus dem Text abrufen.

  6. Öffnen Sie im Ordner SuggestDestinations die config.json-Datei, und geben Sie den folgenden Text ein:

    {
        "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 dieser Konfiguration können Sie anspruchsvoller werden, um die Ausgabe kreativer zu gestalten.

  7. Öffnen Sie im Ordner SuggestDestinations die Datei skprompt.txt, und geben Sie den folgenden Text ein:

    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>
    

    Dieser Prompt schlägt dem Benutzer oder der Benutzerin basierend auf der Benutzereingabe Reiseziele vor. Jetzt erstellen wir ein Plug-In, um Aktivitäten am Reiseziel zu empfehlen.

  8. Öffnen Sie im Ordner SuggestActivities die config.json-Datei, und geben Sie den folgenden Text ein:

    {
        "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 dieser Konfiguration erhöhen Sie max_tokens, um mehr Text für den Verlauf und den generierten Text zuzulassen.

  9. Öffnen Sie im Ordner SuggestActivities die Datei skprompt.txt, und geben Sie den folgenden Text ein:

    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.
    

    Jetzt importieren und testen wir Ihre neuen Prompts!

  10. Aktualisieren Sie die Datei Program.cs mit dem folgenden 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 diesem Code importieren Sie die von Ihnen erstellten Plug-Ins. Sie verwenden auch ein ChatHistory-Objekt, um die Unterhaltung des Benutzers bzw. der Benutzerin zu speichern. Schließlich übergeben Sie einige Informationen an den SuggestDestinations-Prompt und zeichnen die Ergebnisse auf. Als Nächstes fragen wir die Benutzer bzw. Benutzerinnen, wo sie hingehen möchten, damit wir ihnen einige Aktivitäten empfehlen können.

  11. Fügen Sie den folgenden Code in Ihre Datei Program.cs ein:

    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 diesem Code rufen Sie eine Eingabe des Benutzers oder der Benutzerin ab, um herauszufinden, wo er oder sie hingehen möchte. Anschließend rufen Sie die SuggestActivities Eingabeaufforderung mit dem Ziel und dem Unterhaltungsverlauf auf.

  12. Um den Code zu testen, geben Sie dotnet run in das Terminal ein.

    Die endgültige Ausgabe könnte etwa wie folgt aussehen:

    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.
    

    Jetzt haben Sie die Anfänge eines KI-Reiseassistenten erstellt! Versuchen Sie, die Eingabe zu ändern, um herauszufinden, wie die LLM reagiert.