Cvičení – automatické vyvolání funkcí

Dokončeno

Sada SDK sémantického jádra umožňuje automaticky koordinovat funkce a výzvy, na které se odkazuje ve vašem jádru. Místo ručního vyvolání funkcí a výzev vám tento nástroj pomůže ušetřit čas a chytřejší aplikace. Pojďme to vyzkoušet!

Příprava vývojového prostředí

Pro tato cvičení je k dispozici počáteční projekt, který můžete použít. Pomocí následujících kroků nastavte počáteční projekt:

Důležité

K provedení těchto kroků musíte mít nainstalovaný Visual Studio Code a rozhraní .NET Framework 8.0. Možná budete muset nainstalovat rozšíření Visual Studio Code C# Dev Kit.

  1. Otevřete Visual Studio Code.

  2. V části Start editoru Visual Studio Code vyberte Klonovat úložiště Git.

  3. Na panelu URL zadejte https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git

  4. V Průzkumník souborů vytvořte novou složku v umístění, které je snadné najít a zapamatovat, například složku v Desktopu.

  5. Klikněte na tlačítko Vybrat jako cíl úložiště.

    Abyste mohli projekt úspěšně naklonovat, musíte být přihlášení k GitHubu.

  6. Otevření projektu v editoru Visual Studio Code

  7. V Průzkumníku klikněte pravým tlačítkem myši na složku M05-auto-invoke-functions/M05-Project a klikněte na Otevřít v integrovaném terminálu.

  8. Rozbalte složku M05-auto-invoke-functions/M05-Project.

    Měl by se zobrazit soubor "Program.cs".

  9. Otevřete soubor Program.cs a aktualizujte následující proměnné názvem nasazení služby Azure OpenAI Services, klíčem rozhraní API a koncovým bodem.

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

Teď jste připraveni zahájit cvičení. Hodně zdaru!

Navrhnout koncerty uživateli

  1. Ve složce Plugins vytvořte nový soubor s názvem MusicConcertPlugin.cs.

  2. Do souboru MusicConcertPlugin přidejte následující kód:

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

    Funkce GetTours přečte soubor s názvem "concertdates.txt" a vrátí obsah. Tato funkce se použije k načtení seznamu nadcházejících koncertů.

    Dále vytvořte výzvu, abyste požádali LLM o navržení koncertu na základě nedávno přehráné hudby uživatele.

  3. Ve složce Prompts vytvořte novou složku s názvem SuggestConcert.

  4. Ve složce "SuggestConcert" vytvořte soubor config.json s následujícím obsahem:

    {
        "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. Ve složce SuggestConcert vytvořte soubor skprompt.txt s následujícím obsahem:

    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.
    

    Tato výzva vyzve LLM, aby navrhl koncert na základě nedávno přehrávané skladby a umístění uživatele. Dále povolíte nastavení automatického volání funkce.

  6. Program.cs Otevřete soubor a následující příkaz using:

    using Microsoft.SemanticKernel.Connectors.OpenAI;
    

    Tento balíček vám umožní použít nastavení automatického volání funkce.

  7. Program.cs Aktualizujte soubor následujícím kódem:

    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. Zadejte dotnet run do terminálu.

    Vygenerovaný návrh by měl doporučit koncert na základě nedávno přehrávaných skladeb a umístění. Výstup se může podobat následující odpovědi:

    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.
    

    Sémantické jádro automaticky rozpozná příslušnou funkci modulu plug-in, která se má použít, a předává správné parametry. Můžete zkusit změnit umístění a podívat se, jak se doporučení mění. Můžete také zkusit změnit výzvu, aby LLM navrhla skladbu z knihovny.

Toto AutoInvokeKernelFunctions nastavení umožňuje sémantickému jádru automaticky volat funkce a výzvy přidané do jádra. Tento nástroj vám umožní vytvářet dynamické a robustní aplikace s využitím méně kódu.