本文将告诉大家如何在 SemanticKernel 里面调用原生本机技能,所谓原生本机技能就是使用 C# 代码编写的原生本地逻辑技能,这里的技能可讲的可不是游戏角色里面的技能哈,指的是实现某个功能的技能,这是构成 AI 强大能力的基础

本文属于 SemanticKernel 入门系列博客,更多博客内容请参阅我的 博客导航

众所周知 GPT 是一个大语言模型,能够参与的输入和输出是文本内容。而想要让 GPT 完成各项功能,则需要对接现有的编程世界。为了能够更好的复用这几十年的编程世界积累的知识和搭建的基础设施,微软推出 SemanticKernel 框架,通过 SemanticKernel 框架可以让传统的编程语言和 GPT 等 AI 更好的协作,赋予 AI 强大的能力

举个例子来说,当你和 GPT 说,请关灯的时候。此时你期望的也许不是 GPT 长篇大论的帮你关灯,而是更多的期望是 GPT 真的识别到你的意图,通过和你沟通的上下文,帮你将灯给关掉。然而只靠 GPT 本身,则是力不从心的,因为 GPT 本身没有关灯的能力。有关灯能力的是传统 IOT 能力。而通过 SemanticKernel 框架,则可以非常方便在打通 GPT 和关灯 IOT 编程之间的连接。只需要在 SemanticKernel 框架里面加入一个关灯技能,然后告诉 AI 有这个技能,这样 AI 就可以使用这个技能实现关灯的能力

在 SemanticKernel 框架里面定义的技能,都是一个基础的 C# 实现逻辑,比如说本文的例子就是 TextSkill 技能,这个 TextSkill 包含了基础的文本字符串处理功能,比如大小写转换,裁剪文本前后空白,获取字符串长度等等

熟悉 GPT 功能的伙伴大概也不陌生,对于 GPT 来说,所有的输出都是凭 "感觉" 的。而 Skill 技能则可以很好补足这个缺点,让一些确定性的基础逻辑交给传统编程语言编写,如此即可利用传统编程的输入输出稳定性保证输出的可靠性

本文将尝试创建一个项目,在这个项目里面使用 TextSkill 技能作为例子,只使用技能类而还不需要接触 SemanticKernel 框架

先新建一个 dotnet 7 的控制台项目,接着编辑 csproj 项目文件,修改为如下代码用来快速安装 Microsoft.SemanticKernel 库

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup> <ItemGroup>
<PackageReference Include="Microsoft.SemanticKernel" Version="0.20.230821.4-preview" />
</ItemGroup> </Project>

也可以通过右击项目,点击管理 NuGet 程序包,搜 Microsoft.SemanticKernel 然后进行安装

值得一提的是,当前的 Microsoft.SemanticKernel 还是一个预览版本,有可能在正式发布的时候变更了 API 导致本文的代码在正式版本跑不起来

先按照传统的 C# 编程方法,创建出 TextSkill 对象,如下面代码

using Microsoft.SemanticKernel.Skills.Core;

// 创建技能
var text = new TextSkill();

接着即可和之前的 C# 代码调用一样,调用 TextSkill 里面提供的方法,比如修改字符串大小写

// 直接调用技能里的方法
var result = text.Uppercase("ciao");

试试输出结果,自然是很符合预期的所有字符都大写

Console.WriteLine(result);

所有的代码如下

using Microsoft.SemanticKernel.Skills.Core;

// 创建技能
var text = new TextSkill(); // 直接调用技能里的方法
var result = text.Uppercase("ciao"); Console.WriteLine(result);

可以看到在没有使用到 SemanticKernel 框架的前提下,这是丝毫没有魔法的。这样的设计可以让咱非常方便进行技能的调试,因为这时候的技能类型就和其他的类型没有什么不相同的。在 下一篇 将告诉大家如何将技能导入框架

本文的代码放在githubgitee 欢迎访问

可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin eef729b3a5ff8017161fdae58a786812ad2a7df0

以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin eef729b3a5ff8017161fdae58a786812ad2a7df0

获取代码之后,进入 SemanticKernelSamples\Example01_NativeFunctions 文件夹

dotnet SemanticKernel 入门 调用原生本机技能的更多相关文章

  1. dotnet 从入门到放弃的 500 篇文章合集

    本文是记录我从入门到放弃写的博客 博客包括 C#.WPF.UWP.dotnet core .git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到 ...

  2. dotnet core 入门

    之前一至用的dotnet 做开发,项目没有用过.netcore,现在看微软对dotnetcore的重视度越来越高,所以dotnetcore也是每一个.dotnet开发人员的一项必备技能.一个偶然的机会 ...

  3. phonegap+cordova+ionic调用原生API

    上一篇博客讲了phonegap+cordova+ionic的环境搭建,今天再来分享一篇cordova调用原生API的文章.从技术角度上来讲,这并不是很难,只是有些细节要是没有注意,或者某些步骤不知道的 ...

  4. iOS开发--JS调用原生OC篇

    JS调用原生OC篇 方式一(反正我不用) 第一种方式是用JS发起一个假的URL请求,然后利用UIWebView的代理方法拦截这次请求,然后再做相应的处理. 我写了一个简单的HTML网页和一个btn点击 ...

  5. Dcloud HTML5 监听蓝牙设备 调用 原生安卓实现

    最近一直搞Dcloud ,这是HTML5版本的开发,打包时候,可以打包成 apk 和ipa 分别运行在安卓和ios 机器上面, 但是这里面的资料很少,遇到问题,之后只能自己钻研总结, 现在有这么一个需 ...

  6. ionic-native-transitions调用原生页面切换实现ionic路由切换

    废话不多说:ionic-native-transitions调用原生页面切换实现ionic路由切换,从而大大提升ionic应用的性能. ionic-native-transitions是一个ionic ...

  7. uni-app调用原生的文件系统管理器(可选取附件上传)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. Xamarin.Form怎么调用原生方法

    ---恢复内容开始--- Xamarin.Form怎么调用原生包 今天我想和大家分享的是有关Xamarin如何调用安卓的原生代码,下面的例子以大家可能会经常用到的微信WX方法的调用. 首先我们新建一个 ...

  9. ReactNative-JS 调用原生方法实例代码(转载)

    第一步首先创建ReactNative 模块类继承ReactContextBaseJavaModule package com.mixture;   import android.content.Con ...

  10. 使用JNA,让java调用原生代码

    JNA定义: JNA:java Native Access,是SUN公司开发的基于JNI的框架.JNI使得Java可以调用原生的c或者c++代码. JNA与JNI(Java Native Interf ...

随机推荐

  1. 记录--产品:请给我实现一个在web端截屏的功能!

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.故事的开始 最近产品又开始整活了,本来是毫无压力的一周,可以小摸一下鱼的,但是突然有一天跟我说要做一个在网页端截屏的功能. 作为一个工 ...

  2. 如何用LOTO示波器实测LC串联谐振?

    一个电感和一个电容串联,在某个特定的频率,就会发生谐振,这个频率就是谐振频率.串联谐振电路有如下特点: 谐振时整个电路阻抗呈电阻性,阻抗最小,电流达到最大: 谐振时电感和电容两端的电压达到最大. 上图 ...

  3. KingbaseES V8R6集群运维案例之---同一主机节点部署多个集群

    案例说明: 在同一主机环境,由于生产需要,需要部署两个集群:本案例详细描述了两个集群的部署过程. 注意:同一主机部署多个集群需要先部署securecmdd服务,节点之间通过securecmdd服务通讯 ...

  4. KingbaseES V8R6 等待事件之CLogControlLock

    前言 Kingbase数据库的tuple行头部来标识这条记录的事务结束状态(未知.已提交.已回滚),在事务提交时如果并发更新100万行记录,需要对多个page的tuple进行更改,这种繁重的操作会对数 ...

  5. wordpress自建博客站,在页脚添加网站总访问次数

    wordpress自建博客站,在页脚添加网站总访问次数 笔者使用的主题是 GeneratePress 版本:3.1.3 打开footer.php编辑 <div style="text- ...

  6. 【Java】这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";

    String s1 = "a"; String s2 = s1 + "b"; String s3 = "a" + "b" ...

  7. 微服务集成Spring Cloud Alibaba Seata(一)Seata服务搭建

    1.Seata介绍 Seata是阿里开源的一款分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.数据库事务我们都知道,事务都是遵循ACID原则.而通过使用Seata可以实现在两个服务模块 ...

  8. 如何在现实场景中随心放置AR虚拟对象?

    随着AR的发展和电子设备的普及,人们在生活中使用AR技术的门槛降低,比如对于不方便测量的物体使用AR测量,方便又准确:遇到陌生的路段使用AR导航,清楚又便捷:网购时拿不准的物品使用AR购物,体验更逼真 ...

  9. Copy 进阶用法

    Copy 进阶用法 本文出处:https://www.modb.pro/db/239809 copy 是最基础的导入导出命令,那么它有什么其他用法可以帮助我们更好地进行导入导出的工作呢? 关于导入方式 ...

  10. Linux之识别HBA的WWN

    一.概念 FC HBA,也即Fibre Channel Host Bus Adapter,光纤通道主机适配器,简称光纤适配器. 在FC网络环境中,主机需要和FC网络.FC存储设备(SAN磁盘阵列)连接 ...