Semantic Kernel 入门系列: Planner 规划器

news2025/2/27 16:31:08

image

Semantic Kernel 的一个核心能力就是实现“目标导向”的AI应用。

目标导向

“目标导向”听起来是一个比较高大的词,但是却是实际生活中我们处理问题的基本方法和原则。

顾名思义,这种方法的核心就是先确定目标,然后再寻找实现目标的方法和步骤。这对于人来说的是很自然的事情,但是对于机器则不然。一大堆的指令和控制逻辑其实都是在完成另外一种产出导向的结果。所有的流程和过程都需要提前预定义好,然后期待一个结果的产出。

如今,借助 LLM AI 的力量,我们可以轻松的实现目标导向的过程。

在 Semantic Kernel中,Planner就用于这项工作。

我们可以提前准备好所需的Skill,根据设定好的最终目标,通过Planner,可以将目标分解为需要执行的任务列表,并且可以指定好对应的参数传递,然后逐个任务执行,从而实现最终目标。

做好技能准备

为了让LLM AI更好的理解我们所提供的技能,需要明确地配置好每个技能本身的描述和参数描述。

对于的Semantic Function来说,可以在config.json中配置。以下是一个Translate的配置。

需要注意的就是 description 和 input 参数,最终会成为的LLM是否选择使用的判断标准。而这一切都是基于语义化的理解。

 
{
"schema": 1,
"type": "completion",
"description": "Translate the input into the specified language",
"completion": {
"max_tokens": 1024,
"temperature": 0.0,
"top_p": 0.9,
"presence_penalty": 0.0,
"frequency_penalty": 0.0
},
"input": {
"parameters": [
{
"name": "input",
"description": "input text",
"defaultValue": ""
},
{
"name":"language",
"description":"the specified language",
"defaultValue":"English"
}
]
}
}

对于Native Function ,可以使用特性进行声明,其实 SKFunction 中用于添加Function的描述, SKFunctionContextParameter 用于添加参数的说明。

 
public class EmailSKill {
[SKFunction("Send email conten to receiver")]
[SKFunctionContextParameter(Name ="content", Description = "email content")]
[SKFunctionContextParameter(Name ="receiver", Description = "the email address of receiver")]
public void SendTo(SKContext context){
var email = context["content"];
var receiver = context["receiver"];
Console.WriteLine(
$"""
mail to: {receiver}
{email}
""");
}
}

准备好技能之后,就可以将这些技能导入到Kernel中,等待后续使用。

作为示例,这里导入了三个功能:

  1. MySkill.WriteText : 文案写作
  2. MySkill.Translate :文本翻译
  3. email.SendTo : 邮件发送

使用Planner

然后我们就可以开始使用 Planner了。

0.13之前版本

 

Planner作为一个核心组件,在0.13版本之后从Skill中提升了出来,目前(0.13版本)使用了独立的SequentialPlanner,直接创建即可使用。

 
var planner = new SequentialPlanner(kernel);

指定好任务目标。

 
var goal = "The PowerBlog is about to release a new product, please write a chinese press release about the new product and send it to mail@example.com";

0.13之前版本

 

 

然后就可以直接使用 SequentialPlanner 创建一个Plan了。

 
var plan = await planner.CreatePlanAsync(goal);

此时可以使用plan.ToJson(),查看任务编排的情况。

 
plan.ToJson().Dump("Create Plan");

0.13之前版本

 

 

0.13 版本之后,任务执行方法更加简单。
由于Plan本身就是一组 ISKFunction,所以可以直接使用 Kernel.RunAsync执行

 
var result = await kernel.RunAsync(plan);

和通常的Skill执行一样,查看result.Result即可得到结果。

 
result.Result.Dump("RESULT");

如果需要逐步执行查看结果,或者进行干预的话,也可以手动的调用执行过程。执行的状态都由Plan本身来维护,使用 HasNextStep可以查看当前所有任务是否执行完成,可以使用Plan 的 InvokeNextStepAsync 来执行下一步,也可以使用Kernel的StepAsync逐步执行。

 
async Task<Plan> ExecutePlanAsync(IKernel kernel, Plan plan,string input = "")
{
while(plan.HasNextStep){
if(string.IsNullOrWhiteSpace(input)){
await kernel.StepAsync(plan);
}else {
await kernel.StepAsync(input,plan);
}
plan.State.Dump();
if(!plan.HasNextStep){
break;
}
}
return plan;
}
await ExecutePlanAsync(kernel,plan);

Plan执行完成的结果,可以直接使用Plan.State.ToString() 获取。

 
plan.State.ToString().Dump("RESULT");
// output
/*
PowerBlog很高兴地宣布即将推出我们的最新产品,这将彻底改变人们生活的方式。我们一直在不懈努力地开发一款产品,它将对我们的客户生活产生重大影响,我们相信我们已经做到了这一点。
我们的新产品旨在成为一款改变游戏规则的产品,为用户提供独特的体验,增强他们的日常生活。我们相信,这款产品将成为任何想要提高生产力、效率和整体生活质量的人必备的产品。
我们知道人们总是在寻找简化生活的方法,而这正是我们的新产品的目的。它将帮助用户更好地管理时间,保持组织,更有效地实现他们的目标。
我们很高兴能够向我们的客户提供这款产品,我们迫不及待地想看到它对他们生活的积极影响。请继续关注我们最新产品的发布,准备体验一种新的生活方式。
*/

至此,我们就掌握了Semantic Kernel 当前所有的核心概念和基本使用方法。

TIPS: 由于模型的能力问题,目前推荐使用GPT4模型执行以上操作。


参考资料:

  1. Planner in Semantic Kernel | Microsoft Learn
  2. semantic-kernel/05-using-the-planner.ipynb at main · microsoft/semantic-kernel · GitHub
  3. What is Semantic Kernel? | Microsoft Learn
  4. kernel-syntax-examples/Example12_Planning

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/862397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于R做宏基因组结果的PCoA分析

写在前面 因为公司给的PCA结果效果不佳&#xff0c;决定从中重新挑选部分样本进行再分析 步骤 表格结果预处理 在属水平genus参考原本结果已有的PCA图&#xff0c;尽可能挑选距离较远且聚团的样本 选取不同样本属水平的丰度数据&#xff0c;整理成逗号分隔的csv文件 代码…

Android:自定义沿着曲线轨迹移动

前言 前几天&#xff0c;后台有老铁留言&#xff0c;说有个需求&#xff0c;画两条曲线&#xff0c;中间是一个小球&#xff0c;沿着两条线中间的轨迹从左往右移动&#xff0c;让提供个思路&#xff0c;做为一个极度宠粉的博主&#xff0c;思路不仅要提供&#xff0c;实现方案也…

视图簇 se54 sm34 se54

今天演练了一下 维护视图到视图簇的过程。 se11建表&#xff0c;建表之后 【使用程序】→【表维护生成器】 se54 新建视图簇 对象结构 选中其中一行 字段附属 PS:以上每一行都要设置过去 &#xff0c; 设置完成了 激活 sm34展示

Word转PDF工具哪家安全?推荐好用的文件格式转换工具

Word文档是我们最常见也是最常用的办公软件&#xff0c;想必大家都知道了Word操作起来十分的简单&#xff0c;而且功能也是比较齐全的。随着科技的不断进步&#xff0c;如今也是有越来越多类型的办公文档&#xff0c;PDF就是其中之一&#xff0c;那么word转pdf怎么转?Word转PD…

vue3多页面配置踩坑

vue3实现多页面打包容易&#xff0c;关键是如何实现本地的开发和调试&#xff1f;我们接下来解决如下几个问题&#xff1a; 1 多页面项目的项目结构是怎样的&#xff1f; --public--src---App.vue---main.js---page1. ---App.vue---main.js----home.vue----list.vue---page2.…

申请TikTok海外直播公会的具体流程

截止目前&#xff0c;TikTok的主用户群已经从除中国用户外的亚洲用户群&#xff0c;逐步转变成了以英美欧洲为主体的西方用户群体。TikTok先后在40多个国家的应用商店内排名前列&#xff0c;成为了全球增速最快的短视频APP。接下来的这篇文章就是关于抖音tiktok海外公会申请cmx…

谷器数据:以“数字化+标准化”推动中小企业高质量发展

近日&#xff0c;2023全国专精特新中小企业发展大会在浙江杭州举行。据悉&#xff0c;截至目前&#xff0c;我国已累计培育专精特新“小巨人”企业1.2万余家&#xff0c;专精特新中小企业超9.8万家&#xff0c;创新型中小企业达21.5万家。其中&#xff0c;1.2万家小巨人企业中&…

DETR模型计算量(FLOPs)参数量(Params)

前言 关于计算量(FLOPs)参数量(Params)的一个直观理解&#xff0c;便是计算量对应时间复杂度&#xff0c;参数量对应空间复杂度&#xff0c;即计算量要看网络执行时间的长短&#xff0c;参数量要看占用显存的量。 计算量&#xff1a; FLOPs&#xff0c;FLOP时指浮点运算次数&a…

云端剪切板,让你的数据同步无界

云端剪切板&#xff0c;让你的数据同步无界&#xff01; 每个人都应该保护自己的数据&#xff0c;同时使它易于访问和共享。这就是我们的云剪切板网站诞生的原因&#xff01;无论你在哪里&#xff0c;只要登录我们的网站&#xff0c;就可以随时随地使用你的剪切板数据。 你可…

从支付或退款之回调处理的设计,看一看抽象类的使用场景

一、背景 抽象类&#xff0c;包含抽象方法和实例方法&#xff0c;抽象方法待继承类去实例化&#xff0c;正是利用该特性&#xff0c;以满足不同支付渠道的差异化需求。 我们在做多渠道支付的时候&#xff0c;接收支付或退款的回调报文&#xff0c;然后去处理。这就意味着&…

对话音视频牛哥:如何设计功能齐全的跨平台低延迟RTMP播放器

开发背景 2015年&#xff0c;我们在做移动单兵应急指挥项目的时候&#xff0c;推送端采用了RTMP方案&#xff0c;这在当时算是介入RTMP比较早的了&#xff0c;RTMP推送模块做好以后&#xff0c;我们找了市面上VLC还有Vitamio&#xff0c;来测试整体延迟&#xff0c;实际效果真…

大数据传输的定义与大数据传输解决方案的选择

当我们需要处理大量的数据时&#xff0c;我们就要把数据从一个地方移动到另一个地方。这个过程就叫做大数据传输。它通常需要用到高速的网络连接、分散的存储系统和数据传输协议&#xff0c;以保证数据的快速、可靠和安全的移动。常用的大数据传输技术有Hadoop分布式文件系统&a…

servlet三大类HttpSevlet,HttpServletRequest,HttpServletResponse介绍

一、HttpServlet HttpServlet类是一个被继承的方法&#xff0c;可以看做一个专门用来响应http请求的类&#xff0c;这个类的所有方法都是为响应http请求服务的&#xff0c;要对一个某个路径谁知http响应时&#xff0c;需要写一个类来继承HttpServlet类&#xff0c;并重写里面的…

BGP基础建邻+宣告实验

实验要求及拓扑 一、实验思路 1.编写静态路由使R1、R2之间可通和使R4、R5之间可通。 2.使用OSPF使R2、R3、R4之间可通。 3.各自宣告AS区域&#xff0c;中间区域两两之间建邻。 4.注意建邻所使用的端口&#xff0c;外部BGP邻居关系和内部BGP邻居关系的区别。 二、上虚拟机操…

企业微信web登录(扫二维码登录)

记录一下企业微信web扫码登录的使用过程。 按惯例&#xff0c;先看登录流程&#xff1a; 步骤 首先&#xff0c; 企业微信后台开启“企业微信授权登陆功能”&#xff0c;“设置授权回调域名” ,授权回调域名必须与访问链接的域名完全一致。&#xff08;访问链接的域名就是扫码…

【Kubernetes】Kubernetes的调度

K8S调度 一、Kubernetes 调度1. Pod 调度介绍2. Pod 启动创建过程3. Kubernetes 的调度过程3.1 调度需要考虑的问题3.2 具体调度过程 二、影响kubernetes调度的因素1. nodeName2. nodeSelector3. 亲和性3.1 三种亲和性的区别3.2 键值运算关系3.3 节点亲和性3.4 Pod 亲和性3.5 P…

高忆管理:创业板股票涨跌幅?

创业板股票涨跌幅限制大于主板商场&#xff0c;为何呈现这样的现象&#xff1f;从多个角度剖析&#xff0c;其中包含方针因素、商场走势、职业危险等多个方面。 首要&#xff0c;方针因素是导致股票涨跌幅波动的一个重要因素。在新的方针环境下&#xff0c;相关部门关于创业板股…

ModaHub魔搭社区——Milvus Cloud向量数据库

向量数据库:在AI时代的快速发展与应用 摘要: 随着人工智能技术的不断进步,向量数据库在处理大规模数据方面发挥着越来越重要的作用。本文介绍了向量数据库的基本概念、应用场景和技术挑战,并详细阐述了Milvus Cloud作为典型的向量数据库产品的技术特点、性能优化和应用案例…

拼多多秋招 考试内容详解和备考技巧

拼多多秋招内容简介 作为线上销售行业的知名企业之一&#xff0c;拼多多的销售模式也得到了越来越多的人认可&#xff0c;而伴随着企业规模的不断扩大&#xff0c;拼多多也需要能力杰出、认可自己公司文化的新员工&#xff0c;从目前的招聘情况来看&#xff0c;拼多多的岗位需…

拿下美团校招:MySQL InnoDB非聚簇索引知识点解析!

大家好&#xff0c;我是你们的小米&#xff0c;在这里欢迎大家来到《小米的技术小屋》&#xff01;今天&#xff0c;我将和大家一起来揭开一个有趣且有深度的话题&#xff0c;那就是来自美团校招面试的一道问题&#xff1a;“MySQL中的InnoDB在什么情况下使用非聚簇索引&#x…