Übung: automatisches Aufrufen von Funktionen

Abgeschlossen

Mit dem Semantic Kernel SDK können Sie Funktionen und Prompts, auf die in Ihrem Kernel verwiesen wird, automatisch koordinieren. Anstatt Funktionen und Prompts manuell aufzurufen, hilft Ihnen dieses Tool, Zeit zu sparen und Ihre Anwendungen intelligenter zu gestalten. Probieren Sie es aus!

Vorbereiten Ihrer Entwicklungsumgebung

Für diese Übungen steht Ihnen ein Einstiegsprojekt zur Verfügung, das Sie verwenden können. Führen Sie die folgenden Schritte aus, um das Einstiegsprojekt einzurichten:

Wichtig

Visual Studio Code und .NET Framework 8.0 müssen installiert sein, um diese Schritte auszuführen. Möglicherweise müssen Sie auch die Visual Studio Code-Erweiterung mit dem C#-Dev Kit installieren.

  1. Öffnen Sie Visual Studio Code.

  2. Wählen Sie im Visual Studio Code-Abschnitt Start die Option Git-Repository klonen aus.

  3. Geben Sie auf der URL-Leiste https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git ein.

  4. Erstellen Sie im Datei-Explorer einen neuen Ordner an einem Speicherort, der einfach zu finden und zu merken ist, z. B. einen Ordner auf Ihrem Desktop.

  5. Wählen Sie die Schaltfläche Als Repositoryziel auswählen aus.

    Sie müssen bei GitHub angemeldet sein, um das Projekt erfolgreich zu klonen.

  6. Öffnen des Projekts in Visual Studio Code

  7. Klicken Sie im Explorer mit der rechten Maustaste auf den Ordner M05-auto-invoke-functions/M05-Project, und wählen Sie dann Im integrierten Terminal öffnen aus.

  8. Erweitern Sie den Ordner M05-auto-invoke-functions/M05-Project.

    Es sollte eine Datei „Program.cs“ angezeigt werden.

  9. Öffnen Sie die Datei Program.cs und aktualisieren Sie die folgenden Variablen mit ihrem Azure OpenAI Services-Bereitstellungsnamen, API-Schlüssel, Endpunkt.

    string yourDeploymentName = "";
    string yourEndpoint = "";
    string yourAPIKey = "";
    

Jetzt können Sie mit der Übung beginnen. Viel Glück!

Vorschlagen von Konzerten für den Benutzer

  1. Erstellen Sie im Ordner „Plug-Ins“ eine neue Datei mit dem Namen „MusicConcertPlugin.cs“.

  2. Fügen Sie in der Datei „MusicConcertPlugin“ den folgenden Code hinzu:

    using System.ComponentModel;
    using Microsoft.SemanticKernel;
    
    public class MusicConcertPlugin
    {
        [KernelFunction, Description("Get a list of upcoming concerts")]
        public static string GetTours()
        {
            string dir = Directory.GetCurrentDirectory();
            string content = File.ReadAllText($"{dir}/data/concertdates.txt");
            return content;
        }
    }
    

    Die GetTours-Funktion liest eine Datei mit dem Namen „concertdates.txt“ und gibt den Inhalt zurück. Mit dieser Funktion wird eine Liste der anstehenden Konzerte abgerufen.

    Erstellen Sie als Nächstes einen Prompt, um das LLM zu fragen, ein Konzert basierend auf der zuletzt wiedergegebenen Musik des Benutzers oder der Benutzerin vorzuschlagen.

  3. Erstellen Sie im Ordner „Prompts“ einen neuen Ordner mit dem Namen „SuggestConcert“.

  4. Erstellen Sie im Ordner „SuggestConcert“ eine Datei namens „config.json“ mit dem folgenden Inhalt:

    {
        "schema": 1,
        "type": "completion",
        "description": "Suggest a concert to the user",
        "execution_settings": {
            "default": {
                "max_tokens": 4000,
                "temperature": 0
            }
        },
        "input_variables": [
            {
                "name": "upcomingConcerts",
                "description": "A list of artist's upcoming concerts",
                "required": true
            },
            {
                "name": "recentlyPlayedSongs",
                "description": "A list of songs recently played by the user",
                "required": true
            },
            {
                "name": "location",
                "description": "The user's location",
                "required": true
            }
        ]
    }
    
  5. Erstellen Sie im Ordner „SuggestConcert“ eine Datei namens „skprompt.txt“ mit dem folgenden Inhalt:

    Based on the user's recently played songs:
    {{$recentlyPlayedSongs}}
    
    And a list of upcoming concerts:
    {{$upcomingConcerts}}
    
    Suggest an upcoming concert. The user lives in {{$location}}, 
    please recommend a relevant concert that is close to their location.
    

    Der Prompt weist das LLM an, ein Konzert basierend auf den zuletzt wiedergegebenen Songs und dem Standort des Benutzers oder der Benutzerin vorzuschlagen. Als Nächstes aktivieren Sie die Einstellung für automatische Funktionsaufrufe.

  6. Öffnen Sie die Program.cs-Datei, und verwenden Sie die folgende using-Anweisung:

    using Microsoft.SemanticKernel.Connectors.OpenAI;
    

    Mit diesem Paket können Sie die Einstellung für automatische Funktionsaufrufe verwenden.

  7. Aktualisieren Sie die Program.cs-Datei mit dem folgenden Code:

    kernel.ImportPluginFromType<MusicLibraryPlugin>();
    kernel.ImportPluginFromType<MusicConcertPlugin>();
    kernel.ImportPluginFromPromptDirectory("Prompts");
    
    OpenAIPromptExecutionSettings settings = new()
    {
        ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
    };
    
    string prompt = @"I live in Portland OR USA. Based on my recently 
        played songs and a list of upcoming concerts, which concert 
        do you recommend?";
    
    var result = await kernel.InvokePromptAsync(prompt, new(settings));
    
    Console.WriteLine(result);
    
  8. Geben Sie im Terminal dotnet run ein.

    Der generierte Vorschlag sollte auf Basis der zuletzt wiedergegebenen Songs und des Orts ein Konzert empfehlen. Die Ausgabe sieht möglicherweise ähnlich wie die folgende Antwort aus:

    Based on your recently played songs and your location in Portland, OR, I would recommend attending the upcoming concert of Lisa Taylor. She will be performing in Portland on April 16, 2024. This concert would be a great opportunity for you to enjoy live music and experience Lisa Taylor' beautiful songs.
    

    Der semantische Kernel erkennt automatisch die entsprechende zu verwendende Plug-In-Funktion und übergibt die richtigen Parameter. Sie können versuchen, den Speicherort zu ändern, um zu sehen, wie sich die Empfehlung ändert. Sie können auch versuchen, die Prompts so zu ändern, dass das LLM einen Song aus der Bibliothek vorschlagen soll.

Die AutoInvokeKernelFunctions-Einstellung ermöglicht es dem semantischen Kernel, Funktionen und Prompts, die Ihrem Kernel hinzugefügt werden, automatisch aufzurufen. Mit diesem Tool können Sie dynamische, stabile Anwendungen mit weniger Code erstellen.