練習 - 自動叫用函式

已完成

語意核心 SDK 可讓您自動協調核心中所參考的函式和提示。 此工具不需要手動叫用函式和提示,即可協助您節省時間,並讓應用程式變得更聰明。 讓我們試試看!

準備您的開發環境

針對這些練習,您可以使用入門專案。 使用下列步驟來設定入門專案:

重要

您必須安裝 Visual Studio Code 和 .NET Framework 8.0,才能完成這些步驟。 您可能也需要安裝 Visual Studio Code C# 開發套件延伸模組。

  1. 打開 Visual Studio Code。

  2. 在 Visual Studio Code [開始] 區段之下,選取 [複製 Git 存放庫]

  3. 在 URL 列中,輸入 https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git

  4. 在 [檔案總管] 中,在容易尋找和記住的位置建立新的資料夾,例如桌面中的資料夾。

  5. 按一下 [選取作為存放庫目的地] 按鈕。

    您必須登入 GitHub 才能成功複製專案。

  6. 在 Visual Studio Code 中開啟專案

  7. 在 [總管] 中,以滑鼠右鍵按一下 M05-auto-invoke-functions/M05-Project 資料夾,然後按一下 [在整合式終端機中開啟]

  8. 展開 M05-auto-invoke-functions/M05-Project 資料夾

    您應該會看到「Program.cs」檔案。

  9. 開啟 Program.cs 檔案,並使用 Azure OpenAI 服務部署名稱、API 金鑰和端點更新下列變數。

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

現在您已準備好開始練習。 祝您好運!

向使用者推薦音樂會

  1. 在 [外掛程式] 資料夾中,建立名為 [MusicConcertPlugin.cs] 的新檔案

  2. 在 [MusicConcertPlugin] 檔案中,新增下列程式碼:

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

    GetTours 函式會讀取名為 'concertdates.txt' 的檔案,並傳回內容。 此函式將用來擷取即將推出的音樂會清單。

    接下來,建立提示,要求 LLM 根據使用者最近播放的音樂來建議音樂會。

  3. 在 [提示] 資料夾中,建立名為 [SuggestConcert] 的新資料夾

  4. 使用下列內容在 [SuggestConcert] 資料夾中建立 [config.json] 檔案:

    {
        "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. 使用下列內容在 [SuggestConcert] 資料夾中建立 [skprompt.txt] 檔案:

    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.
    

    此提示會要求 LLM 根據使用者最近播放的歌曲和位置來建議音樂會。 接下來,您將啟用自動函式呼叫設定。

  6. 開啟 Program.cs 檔案和下列 using 陳述式:

    using Microsoft.SemanticKernel.Connectors.OpenAI;
    

    此套件可讓您使用自動函式呼叫設定。

  7. 使用下列程式碼更新 Program.cs 檔案:

    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. 在終端機中輸入 dotnet run

    產生的建議應根據最近播放的歌曲和位置來推薦音樂會。 輸出可能類似下列回應:

    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.
    

    語意核心會自動偵測適當的外掛程式函式,以使用並傳入正確的參數。 您可以嘗試修改位置以查看推薦如何變更。 您也可以嘗試變更提示,告訴 LLM 從媒體庫中推薦一首歌曲。

AutoInvokeKernelFunctions 設定可讓語意核心自動呼叫已新增至核心的函式和提示。 此工具可讓您使用較少的程式碼來建立動態且健全的應用程式。