练习 - 自动调用函数
通过语义内核 SDK,可自动协调内核中引用的函数和提示。 此工具帮助你节省时间并使应用程序更智能,而不是手动调用函数和提示。 让我们尝试一下吧!
准备开发环境
在这些练习中,你可以使用初学者项目。 使用以下步骤设置初学者项目:
重要
必须安装 Visual Studio Code 和 .NET Framework 8.0 才能完成这些步骤。 可能还需要安装 Visual Studio Code C# 开发工具包扩展。
打开 Visual Studio Code。
在 Visual Studio Code 的“开始”部分下,选择“克隆 Git 存储库”。
在 URL 栏中,输入
https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git
在文件资源管理器中,在易于查找和记住的位置(例如桌面中的文件夹)中创建新文件夹。
单击“选择为存储库目标”按钮。
需要登录到 GitHub 才能成功克隆项目。
在 Visual Studio Code 中打开项目
在资源管理器中,右键单击“M05-auto-invoke-functions/M05-Project”文件夹,然后单击“在集成终端中打开”
展开“M05-auto-invoke-functions/M05-Project”文件夹
此时应会看到“Program.cs”文件。
打开 Program.cs 文件,然后使用 Azure OpenAI 服务部署名称、API 密钥、终结点来更新以下变量。
string yourDeploymentName = ""; string yourEndpoint = ""; string yourAPIKey = "";
现在,你已准备好开始进行练习。 祝你好运!
向用户推荐音乐会
在“Plugins”文件夹中,创建一个名为“MusicConcertPlugin.cs”的新文件
在“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 根据用户最近播放的音乐推荐音乐会。
在“Prompts”文件夹中,创建一个名为“SuggestConcert”的新文件夹
在“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 } ] }
在“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 根据用户最近播放的歌曲和所在位置推荐音乐会。 接下来,启用自动函数调用设置。
打开
Program.cs
文件并使用以下语句:using Microsoft.SemanticKernel.Connectors.OpenAI;
此包将允许使用自动函数调用设置。
用以下代码更新
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);
在终端中输入
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
设置允许语义内核自动调用添加到内核中的函数和提示。 此工具可让你使用更少的代码创建动态、可靠的应用程序。