Semantic Kernel 规划器真实项目实例代码

张开发
2026/4/6 18:35:57 15 分钟阅读

分享文章

Semantic Kernel 规划器真实项目实例代码
Semantic Kernel 规划器真实项目实例代码下面为Semantic Kernel 每类规划器提供一个真实的项目实例代码涵盖电商、客服、数据分析等场景。代码基于 .NET 8 和 Semantic Kernel 1.0含预发布包。假设已配置好 Azure OpenAI 或 OpenAI 服务。1. ActionPlanner智能客服快速响应场景用户询问“我的订单什么时候发货”客服机器人需要调用订单查询插件快速返回结果。usingMicrosoft.SemanticKernel;usingMicrosoft.SemanticKernel.Planning;// 插件定义publicclassOrderPlugin{[KernelFunction(GetOrderStatus)][Description(根据订单号查询订单状态)]publicstringGetOrderStatus(stringorderNumber){// 模拟数据库查询return$订单{orderNumber}已于 2025-03-20 发货预计 3 天后到达。;}}// 主程序varbuilderKernel.CreateBuilder();builder.AddAzureOpenAIChatCompletion(gpt-4o,endpoint,apiKey);builder.Plugins.AddFromTypeOrderPlugin();varkernelbuilder.Build();varplannernewActionPlanner(kernel);stringuserInput查询订单号 ABC123 的发货状态;varplanawaitplanner.CreatePlanAsync(userInput);varresultawaitkernel.RunAsync(plan);Console.WriteLine(result);2. SequentialPlanner市场分析报告生成场景自动获取产品评论、分析情感、生成周报摘要。usingMicrosoft.SemanticKernel;usingMicrosoft.SemanticKernel.Planning;publicclassSentimentPlugin{[KernelFunction(AnalyzeSentiment)][Description(分析文本情感返回正面/负面/中性)]publicstringAnalyzeSentiment(stringtext)正面;}publicclassReportPlugin{[KernelFunction(GenerateSummary)][Description(生成报告摘要)]publicstringGenerateSummary(stringdata)本周用户反馈总体积极。;}varbuilderKernel.CreateBuilder();builder.AddAzureOpenAIChatCompletion(gpt-4o,endpoint,apiKey);builder.Plugins.AddFromTypeSentimentPlugin();builder.Plugins.AddFromTypeReportPlugin();varkernelbuilder.Build();varplannernewSequentialPlanner(kernel);stringgoal 获取最近一周的产品评论分析每条评论的情感然后根据分析结果生成一份周报摘要。 请使用 AnalyzeSentiment 和 GenerateSummary 函数。;varplanawaitplanner.CreatePlanAsync(goal);varresultawaitkernel.RunAsync(plan);Console.WriteLine(result);3. FunctionCallingStepwisePlanner复杂推理-数据分析场景用户要求“计算过去30天销售额最高的产品类别并预测下个月的销量”。需要多次调用不同函数。usingMicrosoft.SemanticKernel;usingMicrosoft.SemanticKernel.Planning;publicclassSalesPlugin{[KernelFunction(GetTopCategory)][Description(获取指定时间范围内销售额最高的产品类别)]publicstringGetTopCategory(intdays)电子产品;[KernelFunction(PredictSales)][Description(根据历史数据预测下月销量)]publicdoublePredictSales(stringcategory)12500.50;}varbuilderKernel.CreateBuilder();builder.AddAzureOpenAIChatCompletion(gpt-4o,endpoint,apiKey);builder.Plugins.AddFromTypeSalesPlugin();varkernelbuilder.Build();varplannernewFunctionCallingStepwisePlanner(newFunctionCallingStepwisePlannerOptions{MaxIterations5,ExecutionSettingsnewPromptExecutionSettings{Temperature0.0}});varresultawaitplanner.ExecuteAsync(kernel,计算过去30天销售额最高的产品类别并预测下个月的销量);Console.WriteLine(result.FinalAnswer);4. HandlebarsPlanner带分支逻辑的订单处理场景检查订单状态如果已付款且库存充足则发货否则发送补货通知。usingMicrosoft.SemanticKernel;usingMicrosoft.SemanticKernel.Planning.Handlebars;publicclassOrderHandler{[KernelFunction(GetOrderStatus)]publicstringGetOrderStatus(stringorderId)已付款;[KernelFunction(CheckInventory)]publicintCheckInventory(stringproductId)0;// 缺货[KernelFunction(ShipOrder)]publicstringShipOrder(stringorderId)已发货;[KernelFunction(NotifyRestock)]publicstringNotifyRestock(stringproductId)已通知补货;}varbuilderKernel.CreateBuilder();builder.AddAzureOpenAIChatCompletion(gpt-4o,endpoint,apiKey);builder.Plugins.AddFromTypeOrderHandler();varkernelbuilder.Build();varplannernewHandlebarsPlanner(newHandlebarsPlannerOptions{AllowLoopstrue});stringgoal 处理订单 ORD-7890如果订单状态是“已付款”且库存大于0则发货否则发送补货通知。;varplanawaitplanner.CreatePlanAsync(kernel,goal);varresultawaitplan.InvokeAsync(kernel);Console.WriteLine(result);生成的 Handlebars 计划示例由 LLM 自动生成{{setstatus(OrderHandler-GetOrderStatusorderIdORD-7890)}}{{#if(equalsstatus已付款)}}{{setstock(OrderHandler-CheckInventoryproductIdP123)}}{{#if(gtstock0)}}{{OrderHandler-ShipOrderorderIdORD-7890}}{{else}}{{OrderHandler-NotifyRestockproductIdP123}}{{/if}}{{/if}}5. Automatic Function Calling最简洁的智能工具调用场景用户问“北京今天天气如何需要带伞吗”。自动调用天气API和决策函数。usingMicrosoft.SemanticKernel;publicclassWeatherPlugin{[KernelFunction(GetCurrentWeather)][Description(获取指定城市的天气信息)]publicstringGetCurrentWeather(stringcity)晴天温度25℃;}publicclassAdvicePlugin{[KernelFunction(NeedUmbrella)][Description(根据天气决定是否需要带伞)]publicstringNeedUmbrella(stringweather)weather.Contains(雨)?需要带伞:不需要带伞;}varbuilderKernel.CreateBuilder();builder.AddAzureOpenAIChatCompletion(gpt-4o,endpoint,apiKey);builder.Plugins.AddFromTypeWeatherPlugin();builder.Plugins.AddFromTypeAdvicePlugin();varkernelbuilder.Build();varsettingsnewOpenAIPromptExecutionSettings{ToolCallBehaviorToolCallBehavior.AutoInvokeKernelFunctions};stringprompt北京今天天气如何需要带伞吗;varresultawaitkernel.InvokePromptAsync(prompt,new(settings));Console.WriteLine(result);以上实例均基于 Semantic Kernel 1.0 及以上版本使用时请根据实际环境替换endpoint、apiKey等配置。对于 HandlebarsPlanner需要安装Microsoft.SemanticKernel.Planners.Handlebars预发布包。

更多文章