如何让Semantic Kernel查询特定网站信息(附食堂菜单示例)
问题:如何让Semantic Kernel查询特定网站信息?
我知道可以通过WebSearchEnginePlugin结合Bing或Google连接器(比如BingConnector)让Semantic Kernel查询通用信息,代码示例如下:
kernel.ImportPluginFromObject(new WebSearchEnginePlugin(new BingConnector("SECRET")));
但想知道怎么让Semantic Kernel查询特定网站的信息?比如我希望它访问食堂网站,获取明天的午餐菜品,是否需要创建KernelFunction来执行查询并返回指定日期的菜单?
已实现的解决方案
受相关思路启发,我已经完成了解决方案,该方案可以从HTML和JSON文件中获取数据,能够回答菜单内容、食堂营业时间及员工信息,后续会发布到GitHub。代码示例如下:
kernel.ImportPluginFromType<GetCanteenPlugin>(); var settings = new OpenAIPromptExecutionSettings() {ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions}; var chatService = kernel.GetRequiredService<IChatCompletionService>(); var chatHistory = new ChatHistory(); while (true) { Console.Write("Q: "); chatHistory.AddUserMessage(Console.ReadLine()); var answer = await chatService.GetChatMessageContentAsync(chatHistory, settings, kernel); Console.WriteLine($"A: {answer}"); chatHistory.Add(answer); } class GetCanteenPlugin { [KernelFunction] public string GetMenu() { var htmlDoc = new HtmlDocument(); htmlDoc.Load("CanteenWebsite/Menu.html"); return htmlDoc.Text; } [KernelFunction] public string GetOpeningHours() { var htmlDoc = new HtmlDocument(); htmlDoc.Load("CanteenWebsite/OpeningHours.html"); return htmlDoc.Text; } [KernelFunction] public string GetStaff() { var staff = File.ReadAllText("CanteenWebsite/Staff.json"); return staff; } }
内容的提问来源于stack exchange,提问作者Simon K
相关产品推荐
相关产品推荐

