练习 - 自动调用函数

已完成

通过语义内核 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. 在“Plugins”文件夹中,创建一个名为“MusicConcertPlugin.cs”的新文件

  2. 在“MusicConcertPlugin.cs”文件中,添加以下代码:

    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. 在“Prompts”文件夹中,创建一个名为“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 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 设置允许语义内核自动调用添加到内核中的函数和提示。 此工具可让你使用更少的代码创建动态、可靠的应用程序。