SemanticKernel:添加插件
SemanticKernel介绍
Semantic Kernel是一个SDK,它将OpenAI、Azure OpenAI和Hugging Face等大型语言模型(LLMs)与C#、Python和Java等传统编程语言集成在一起。Semantic Kernel通过允许您定义插件来实现这一点,这些插件可以通过几行代码链接在一起。

为什么需要添加插件?
大语言模型虽然具有强大的自然语言理解和生成能力,但它们通常是基于预训练的模型,其功能受限于训练时所接触的数据和任务。为大语言模型添加插件是为了扩展其功能、提高其灵活性和实用性。比如你问一个大语言模型今天是几号?它无法提供实时信息甚至会出现幻觉,这时候插件就派上用场了。

实践
插件分为提示词插件与本地函数插件,本次示例用的是本地函数。创建一个TimeInformation类:
public class TimeInformation
{
[KernelFunction]
[Description("Retrieves the current time in UTC.")]
public string GetCurrentUtcTime() => DateTime.UtcNow.ToString("R");
}
[KernelFunction]是SemanticKernel中的一个特性,表示指定导入为插件的类中的方法应作为 Microsoft.SemanticKernel.KernelFunction 包含在生成的 Microsoft.SemanticKernel.KernelPlugin 中。 [Description]特性用于为类、方法、属性等添加描述信息。
在kernel中加入这个插件:
builder.Plugins.AddFromType<TimeInformation>();
var kernel = builder.Build();
现在来试试效果:
// Example 1. Invoke the kernel with a prompt that asks the AI for information it cannot provide and may hallucinate
Text += "问:还有多少天到7月1号?\r\n";
Text += "答:" + await kernel.InvokePromptAsync("还有多少天到7月1号?") + "\r\n";
// Example 2. Invoke the kernel with a templated prompt that invokes a plugin and display the result
Text += "问:还有多少天到7月1号?\r\n";
Text += "答:" + await kernel.InvokePromptAsync("现在时间是 {{TimeInformation.GetCurrentUtcTime}},还有多少天到7月1号?") + "\r\n";
// Example 3. Invoke the kernel with a prompt and allow the AI to automatically invoke functions
OpenAIPromptExecutionSettings settings = new() { ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions };
Text += "问:还有多少天到7月1号?\r\n";
Text += "答:" + await kernel.InvokePromptAsync("还有多少天到7月1号,请解释一下你的思考?", new(settings)) + "\r\n";
效果如下所示:

第一个回答没有使用插件,大语言模型出现幻觉了。
第二个回答通过使用模板化的提示来调用插件,回答正确。
第三个回答通过自动调用插件,回答正确。
参考
2、Understanding AI plugins in Semantic Kernel and beyond | Microsoft Learn
SemanticKernel:添加插件的更多相关文章
- cordova for ios(android一样)添加插件
1.进入当前工程文件夹 终端:cd ~/Desktop/ cd piao 2.添加插件 :cordova plugin add Basic device information (Device API ...
- Android Studio 三种添加插件的方式,androidstudio
前几篇blog我们介绍了如何安装和配置Android Studio,这篇Blog我们来聊聊如何给Android Studio添加插件,添加插件的路径有三种,我把他们分类如下: 点击设置小按钮 点击[P ...
- Jvisualvm 添加插件
1.访问地址:https://visualvm.github.io/pluginscenters.html,找到自己JDK版本对应的插件下载地址(我的JDK版本为1.7.0_67): 2.点击该链接进 ...
- flutter 添加插件
打開pubspec.yaml ---> cupertino_icons 下添加插件
- Myeclipse 添加插件
配置方式添加插件,添加一个反编译插件示例 1.官网下载(http://java-decompiler.github.io/) 2.下载到本地之后,删除多余的文件(其他的插件也是如此,例如SVN) 3. ...
- [html]Sublime Text添加插件
今天想在Sublime Text(简称ST)内编写HTML后直接使用浏览器看效果,想添加View in Browser插件,然后遇到奇怪的问题添加插件直接报"找不到有用的插件" 一 ...
- ckeditor 添加插件
官方插件包列表:https://ckeditor.com/cke4/addons/plugins/all 添加插件方法: 1)下载插件包(如果插件包有依赖其他插件,则依赖包也需要下载) 2)解压插件包 ...
- 第三步 Cordova 3.0(及以上版本) 添加插件
1.使用命令生成项目 例:cordova create jy110 com.example.jy110 jy110 2.使用命令添加插件(如果报错,可能是网络问题,可以多试几次,直到成功) 例:cor ...
- cordova创建工程添加插件
创建工程 phonegap创建工程 代码 用以创建自己需要的 工程名 ; 报名 ;类名 ; 应用名 cordova create hello com.example.hello HelloWo ...
- eclipse添加插件、删除插件 示例: eclipse marketplace
在有些版本的eclips上并没有eclipse marketplace ,这让eclipse添加插件变得比较玛法,传统的办法都是通过自行下载插件或者用 help->install new sof ...
随机推荐
- stmp 501 5.1.3 Invalid Address 无效的邮件地址
stmp 501 5.1.3 Invalid Address 无效的邮件地址 一般来说就是要确认邮箱地址是不是对的 还有一种可能的情况是使用的邮件服务器仅支持对内邮件,没有对外邮件的发送权限
- 力扣183(MySQL)-从不订购的客户(简单)
题目: 某网站包含两个表,Customers 表和 Orders 表.编写一个 SQL 查询,找出所有从不订购任何东西的客户. Customers 表: Orders 表: 解题思路: 需要查询出没 ...
- 力扣442(java)-数组中重复的数据(中等)
题目: 给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 .请你找出所有出现 两次 的整数,并以数组形式返回. 你必须设 ...
- 阿里巴巴在开源压测工具 JMeter 上的实践和优化
简介:Apache JMeter 是 Apach 旗下的开源压测工具,创建于 1999 年初,迄今已有超过 20 年历史.JMeter 功能丰富,社区(用户群体)庞大,是主流开源压测工具之一. 作者: ...
- Go语言入门分享
简介: Go语言出自Ken Thompson.Rob Pike和Robert Griesemer之手,起源于2007年,并在2009年正式对外发布.Go的主要目标是"兼具Python等动态 ...
- TSDB时序数据库时序数据压缩解压技术浅析
简介: 目前,物联网.工业互联网.车联网等智能互联技术在各个行业场景下快速普及应用,导致联网传感器.智能设备数量急剧增加,随之而来的海量时序监控数据存储.处理问题,也为时序数据库高效压缩.存储数据能 ...
- [GPT] Unable to negotiate with xx.xx.xx.xx port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
这个错误通常发生在 SSH 客户端无法找到与 SSH服务器 匹配的主机密钥类型时. 这可能是因为SSH服务器配置为使用SSH客户端不支持的主机密钥类型. 要解决此问题,您需要将缺少的主机密钥类型添 ...
- WPF dotnet core 的 Blend SDK Behaviors 库
之前版本是通过安装 Blend SDK 支持 Behaviors 库的,但是这个方法都是通过引用 dll 的方式,不够优雅.在升级到 dotnet core 3.0 的时候就需要使用 WPF 官方团队 ...
- rails 之下载
控制器 def index #传给前端展示层当前的id @id = 6 end # http://127.0.0.1:3000/admin/category_statistics/export_tab ...
- Threading Programming Guide:One
苹果支持的产生线程的方式 Operation Object 使用OperationQueue,具体可以参考:Concurrency Programming Guide GCD 使用诸如dispatch ...