Semantic Kernel 知多少 | 开启面向 AI 编程新篇章

news2024/11/25 13:52:38

在 ChatGPT 火热的当下, 即使没有上手亲自体验,想必也对 ChatGPT 的强大略有耳闻。当一些人在对 ChatGPT 犹犹豫豫之时,一些敏锐的企业主和开发者们已经急不可耐地开展基于 ChatGPT 模型 AI 应用的落地探索。

因此,可以明确预见的是,「AI 能力的集成将会是很多应用都将面临的第一事项」,而拥有相关性技能的人才屈指可数。而这,正是机会所在,机会是留给有准备之人,因此,有幸看到本文的开发者们,开始考虑「面向 AI 编程」吧。

即使当下的公司没有相关的机会,也可以着手一些相关的知识储备,比如学习如何写得一手好的 Prompt,了解一下目前主流的面向 AI 编程的开发框架,比如 Python 技术栈的 LangChain,.NET 技术栈的 Semantic Kernel。

而本文就来简单梳理什么是 Semantic Kernel,可以基于 Semantic Kernel 做什么?

微软MVP实验室研究员

颜圣杰

微软 MVP,.NET 开发者,知名博主,热爱写作和分享,有持续输出知多少系列文章,运营公众号:微服务知多少。目前专注于.NET微服务的开发及应用。

Semantic Kernal 简介

Semantic Kernel (SK) 是一个轻量级的 SDK,它允许你轻松地将传统编程语言与最新的大型语言模型 (LLM) AI“提示”相结合,其提供开箱即用的模板、链接和规划功能。

Semantic Kernel (SK) is a lightweight SDK that lets you easily mix conventional programming languages with the latest in Large Language Model (LLM) AI "prompts" with templating, chaining, and planning capabilities out-of-the-box.

简而言之,就是基于 SK 提供的能力,可以基于“传统的编程语言”进行面向 LLM(大语言模型)AI 编程。这里的 LLM 目前就是 OpenAI,这里的传统编程语言,可以是 C#,Python 亦或 TypeScript、Java 等,但 SK 是微软开源,因此目前 C# 在第一支持系列。换句话说,C# 开发者已可以基于 SK 进行面向 OpenAI 编程。

大型语言模型 (LLM) AI 是一个术语,指的是可以从大量数据生成自然语言文本的 AI 模型。大型语言模型使用深度神经网络(如转换器)从数十亿或数万亿个单词中学习,并生成有关任何主题或领域的文本。大型语言模型还可以执行各种自然语言任务,例如分类、汇总、翻译、生成和对话。大型语言模型的一些例子是 GPT-3,BERT,XLNet 和 EleutherAI。

那 SK 提供了怎样的能力呢?SK 旨在支持和封装来自最新 AI 研究的多种能力,以便开发人员可以为他们的应用程序注入复杂的 AI 技能,如提示链、递归推理、总结、zero/few-shot(零样本和少量样本)学习、上下文记忆、长期记忆、嵌入、语义索引、 规划,以及访问外部知识库和您自己的数据。

上手开发 AI 外教应用

但大多数开发者肯定有这样一个疑问:我不懂算法,也能开发 AI 应用?是的,可以。OpenAI 的能力已经通过高度抽象的接口开放,开箱即用。不再像之前一样,要进行复杂的训练、调参。「对于大多数的简单的业务场景,只要进行简单的 Prompt 设计,和少许样本的支撑,即可达到不错的效果。」当然,对于复杂的场景,也可能需要通过大数据集进行自定义模型训练。空说无凭,准备了一个简单的 AI 应用示例:使用 SK 开发专属 AI 外教应用。场景很简单:设计一个 AI 外教7*24陪我练习英语口语。

▌需求分析

作为一名哑巴英语保持者,目前开口的难点无外乎:

  1. 词汇量不足

  2. 语法混淆

  3. 发音不准

  4. 口语表达能力弱

针对这些“顽疾”,我希望我的 AI 外教有这样的能力:

  • 由于我的词汇量不足,因此我的表达中会中英混合,当出现这种情况时,希望 AI 能告诉我正确的英文表达。

  • 由于我的语法经常会犯一些时态错误,当出现这种情况时,希望 AI 能进行语法纠正。

  • 由于我的词汇量不足,当我要求解释某些句子或单词时,希望 AI 能通过中文向我解释。

  • 由于有些单词不会发音,当我询问时,希望 AI 能以中文的形式告诉我发音技巧。

▌效果预览

那这样的 AI 应用的开发,看似复杂,但在 SK 的加持下,20行代码就可以轻松搞定。先来给大家看看演示效果:

弱弱的问一句,这样的 AI 外教,满足你的需要吗?以下是文字版对话内容:

Say anything to start practicing English.Hi Linda, How do you do?Hi Shengjie, I'm doing well. How about you?I'm very god.I noticed a typo in your sentence. "God" should be spelled "good". So the correct sentence would be "I'm very good".I'm very good. Do you knew about ChatGPT?Yes, I know about ChatGPT. It is a powerful artificial intelligence system that can do many tasks.Can you give some examples?            Sure! ChatGPT can be used for natural language processing, machine translation, text summarization, and many other tasks. For example, it can be used to generate text, answer questions, and provide recommendations.Wow, 听起来很赞Instead of saying "Wow, 听起来很赞", you could say "Wow, that sounds great!" or "Wow, that sounds amazing!". "听起来很赞" is a Chinese phrase that translates to "that sounds great" or "that sounds amazing" in English.amazing, how to pronounce?The correct pronunciation of "amazing" is "uh-mey-zing". In Chinese, it would be "啊-梅-辛".Can I build my own AI app 基于 ChatGPT?Yes, you can build your own AI app based on ChatGPT. ChatGPT provides an open source platform that allows developers to create their own AI applications. You can find more information about how to use ChatGPT to build AI applications on their website.You should correct meYes, I can help you correct your mistakes. Please feel free to ask me any questions you have about English grammar, typos, or pronunciation. I'm here to help you practice your English and improve your skills.I mean you should tell me how to say 基于 in EnglishThe correct way to say "基于" in English is "based on". So you can say "build my own AI app based on ChatGPT".But, where can I start?You can start by visiting the ChatGPT website. They have a lot of resources and tutorials to help you get started with building your own AI app. You can also find more information about how to use ChatGPT to create AI applications on their website. Good luck!Ok, I will see seeI noticed a typo in your sentence. "See see" should be spelled "see". So the correct sentence would be "Ok, I will see".I learn so much today.That's great! You can use the phrase "I learned a lot today" instead of "I learn so much today".Ok, I learned a lot today, thanks you.You're welcome! You can say either "Thank you" or "Thanks" to express your gratitude. The word "you" is not necessary after "Thanks". So, you can say "Thanks" or "Thank you" to express your appreciation.Ok, thank you Linda, bye.You're welcome! Goodbye Shengjie, have a great day!

▌上代码

1.简单起见,创建控制台应用程序:dotnet new console -n MyAITeacher.Demo

2.添加 Microsoft.SemanticKernelNuget 包

3.创建 Skills->Learning->LearningEnglishSkill 目录

4.在 LearningEnglishSkill 目录下添加 config.json 和 skprompt.txt 文件:

   a.config.json:用来配置模型参数,可保持为空:{},使用默认参数即可

   b.skprompt.txt:用来定义设计的 prompt

5.在 skprompt.txt 中设计满足需求的 Prompt:

You are my English teacher Linda, I want you to help me to practice my English. Because my English is not good, I want you to strictly correct my grammar mistakes and typos.When my expression has typos, please tell me and correct me.When my expression includes both Chinese and English, please tell me the correct expression.When my expression has grammar errors, please help me correct it.When I ask you explain words or sentences, please answer me in Chinese. When I ask you pronunciation, please tell me the pronunciation skills in Chinese.Below is some example conversations: 
Shengjie: Hi Linda. Linda:  Hi Shengjie. How is today? What topic would you like to discuss in today's English practice!Shengjie: ChatGPT is so 强大.Linda:  Instead of saying "Chatgpt is so 强大", you could say "ChatGPT is so powerful" or "ChatGPT is very impressive". "强大" is a Chinese word that translates to "powerful" in English</reply>Shengjie: How are todya?Linda:  I noticed a typo in your sentence. "Todya" should be spelled "today". So the correct sentence would be "How are you today?"Shengjie: Thanks you!Linda:  The correct way to say it would be either "Thank you" or "Thanks". The word "you" is not necessary after "Thanks". So, you can say "Thanks" or "Thank you" to express your gratitude.</reply>Shengjie: I hear that ChatGPT can do much things.Linda:  "do much things" is not correct. The correct phrase is "do many things".Shengjie: chatgpt is very strong.Linda:  Instead of saying "Chatgpt is very strong", you could say "ChatGPT is very powerful" or "ChatGPT is very impressive". "Strong" is not the best word to describe ChatGPT's capabilities.Shengjie: 目前来看,be a prompt  enginer is a good choice.Linda: "目前来看" can be translated to "As far as I can tell at the moment" or "From what I can see at present" in English. \nInstead of "be a prompt enginer", you could say "being a software engineer". "Prompt" means to be on time or to respond quickly, while "software engineer" refers to a person who designs, develops, and maintains software. So the corrected sentence would be: "As far as I can tell at the moment, being a software engineer is a good choice." Keep up the good work!Shengjie: What's the meaning of comprehend?Linda:  "Comprehend" means to understand or grasp the meaning of something. In Chinese, "comprehend" can be translated as "理解" or "领悟".Shengjie: ambulance, How to pronounce it?Linda:  The correct pronunciation of "ambulance" is "am-byu-luhns". In Chinese, it would be "安比卢恩斯".
[Done]{{$history}}[Done]++++
Shengjie:{{$input}}Linda:

6.修改 Program.s 如下:

using System.Text;using Microsoft.SemanticKernel;using Microsoft.SemanticKernel.KernelExtensions;using Microsoft.SemanticKernel.Orchestration;using MyOpenAI.Shared;
# 初始化Kernelvar myKernel = Kernel.Builder.Build();myKernel.Config.AddAzureOpenAITextCompletionService(    "davinci-azure",     "text-davinci-003",    "{your azure openai endpoint}",    "{your azure openai key}");# 导入技能    var mySkill = myKernel.ImportSemanticSkillFromDirectory("Skills", "Learning");var myContext = new ContextVariables();StringBuilder histories= new StringBuilder();Console.WriteLine("Say anything to start practicing English.");while (true){    Console.ForegroundColor= ConsoleColor.DarkRed;    var input = Console.ReadLine();    # 填充变量    myContext.Set("history", histories.ToString());     myContext.Set("input", input);    # 运行技能    var myResult = await myKernel.RunAsync(myContext,mySkill["LearningEnglishSkill"]);    histories.AppendLine(input);    histories.AppendLine(myResult.Result.ToString());    Console.WriteLine(myResult);}

通过简单的 Prompt 的设计即可开启 AI 能力,你心动了吗?心动不如行动,以下的链接或许会对你有所帮助:

  • https://learningprompt.wiki/

  • https://learn.microsoft.com/en-us/semantic-kernel/whatissk

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

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

相关文章

生信刷题之ROSALIND——Part 3

目录 1、Mortal Fibonacci RabbitsProblemSample DatasetSample OutputCodeOutput 2、Overlap GraphsProblemSample DatasetSample OutputCodeOutput 3、Calculating Expected OffspringProblemSample DatasetSample OutputCodeOutput 4、Finding a Shared MotifProblemSample …

TF卡目录显示文件夹变0字节的方法

关于电脑上的目录打不开是什么原因&#xff0c;电脑目录打不开是什么原因这个许多人还不清楚&#xff0c;今天小编来为大家解答目录打不开状况&#xff0c;此刻让好多人一起来瞧瞧吧&#xff01; TF卡目录显示文件夹变0字节的方法 工具/软件&#xff1a;sayRecy 步骤1&#xff…

ref的使用与数组中的最全的使用方法

目录 1.ref的使用 什么是 ref 引用&#xff1f; 使用ref引用组件实例 2. this.$nextTick(cd) 方法 数组中的方法 1.some方法 --- 查找到目标元素后就停止后面的查找 2.every----判断每一项是否都满足要求 3.reduce方法 4. filter()方法 5. map()方法 6. forEach()方法…

2023年第十二届数据技术嘉年华(DTC)资料分享

第十二届数据技术嘉年华&#xff08;DTC 2023&#xff09;已于4月8日在北京圆满落幕&#xff0c;大会围绕“开源融合数智化——引领数据技术发展&#xff0c;释放数据要素价值”这一主题&#xff0c;共设置有1场主论坛&#xff0c;12场专题论坛&#xff0c;68场主题演讲&#x…

低调且强大——JNPF低代码平台

前言 先说说很多人为什么要用低代码平台。大部分的反馈是“懒”&#xff0c;其次就是后台管理这东西吧&#xff0c;来来回回就那些东西&#xff0c;查询/表单/表格/弹窗之类的&#xff0c;加上一些增删改查的逻辑。很多人表示&#xff0c;呆过的公司好几家了&#xff0c;后管的…

《低代码PaaS驱动集团企业数字化创新白皮书》-未来展望

未来展望 低代码PaaS发展的机遇 低代码开发可以帮助企业灵活搭建数字化应用&#xff0c;满足企业各业务部门的个性化、碎片化需求。根据IDC调研结果显示&#xff0c;当前低代码开发主要应用于面向企业内部的应用&#xff0c;占该应用总量的比例达到 11.6%&#xff1b;其次是面…

debug的用法和方式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言debug三种方式 1.按照条件输出 2.进入方法 3.回退到上一个方法 一、debug是什么&#xff1f;二、使用步骤1.方法debug 在条件输出的时候按照条件输出进入方法内…

idea好用插件分享——Bito-ChatGPT

文章目录 安装步骤&#xff1a;第一步&#xff1a;打开Setting第二步&#xff1a;选择Plugins&#xff0c;输入Bito&#xff0c;就可以搜索出来了&#xff0c;再点击安装第三步&#xff1a;安装完成回到IDEA主界面&#xff0c;右边区域可以看到Bito图标&#xff0c;点击展开&am…

Java---异常概述

&#xff08;一&#xff09;认识Java的异常 1、什么是异常 在使用计算机语言进行项目开发的过程中&#xff0c;即使程序员把代码写得尽善尽美&#xff0c;在系统的运行过程中仍然会遇到一些问题&#xff0c;因为很多问题不是靠代码能够避免的&#xff0c;比如&#xff1a;客户…

【软件工程】UML序列图

一.概述 序列图&#xff08;时序图&#xff09;是一种软件工程行化建模方法&#xff0c;用于可视化系统或应用程序中多个对象之间 的交互。在序列图中&#xff0c;每个对象都表示为竖直线&#xff0c;对象之间的消息则表示为水平箭头 从一个对象指向另一个对象。 序列图可以…

Canvas实现动态绘制圆周效果|实现奥运五环

步骤实现&#xff1a; 首先&#xff0c;创建一个 HTML 画布和一个 JavaScript 动画函数。 在画布上绘制一个圆。 定义一个变量来表示圆心的坐标和半径。 进行动画循环以更新圆心坐标&#xff0c;使其沿外圆周运动。 使用三角函数&#xff08;如 sin 和 cos&#xff09;来计…

如何带领小微企业在软件开发行业生存

文章目录 前言一、企业急需的技术人才需要掌握的技能二、人工智能开发者技能三、领导者需要掌握的知识和技能四、具备敏锐的技术视野的方法和途径五、人工智能技术论坛及组织六、机器学习相关论坛和组织七、新技术如何应用和落地1、了解新技术2、确定应用场景3、进行实践验证4、…

Pinia与Vuex区别、Pinia安装与使用

目录 一、Pinia和Vuex区别 二、Pinia使用state、getters、actions 1、安装使用Pinia 2、State 3、actions 4、getters 三、Pinia划分模块 1、目录结构 2、store/user.js 3、某组件使用 四、Pinia持久化存储 1、安装插件 2、store/index.js 3、store/user.js 4、…

Linux 内核设计与实现

文章目录 一、前言二、进程管理1、task_struct2、thread_info 三、调度四、系统调用五、内核数据结构1、kfifo2、映射3、二叉树 六、中断1、软中断2、tasklet3、工作队列4、下半部机制的选择5、下半部禁止与使能 七、内核同步方法1、原子操作2、自旋锁&#xff08;1&#xff09…

辛弃疾最经典的10首词

他&#xff0c;文能挥笔填词&#xff0c;武能上马杀敌&#xff1b; 他&#xff0c;被称为“词中之龙”&#xff0c; 他&#xff0c;一生赤子&#xff0c;追求收复山河&#xff1b; 他&#xff0c;是与苏轼齐名的豪放派词人&#xff1b; 他是辛弃疾。 辛弃疾一生怀着赤子之…

Bito:一款 iead/webstorm 神级插件,由 ChatGPT 团队开发,堪称辅助神器

前言&#xff1a; idea(后端)&#xff0c;webstorm(前端)中可以用的一款辅助插件&#xff1a;Bito 个人尝试体验效果&#xff1a; 优点是&#xff1a;可以自动完成一些场景代码。 缺点&#xff1a;太慢了&#xff0c;大部分时间一直转圈 摘取文档&#xff1a; 什么是Bito&…

UE4 架构初识(一)

UE引擎学习 一、基础框架 UObject: ​ UE创世&#xff0c;万物皆UObject&#xff0c;接着有Actor。UObject提供的元数据、反射生成、GC垃圾回收、序列化、编辑器可见&#xff0c;Class Default Object等&#xff0c;UE可以构建一个Object运行的世界。 Actor: 脱胎自Object的…

问题解决 | Failed to initialize NVML: Driver/library version mismatch

问题描述&#xff1a; Ubuntu20.04服务器上&#xff0c;一个docker容器正在训练模型&#xff0c;打开另外一个docker容器时&#xff0c;出现以下错误 Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to st…

数字设计小思 - 谈谈Latch:组合与时序逻辑的桥梁

前言 本系列整理数字系统设计的相关知识体系架构&#xff0c;为了方便后续自己查阅与求职准备。对于FPGA和ASIC设计中&#xff0c;避免使用Latch&#xff08;锁存器&#xff09;一直是个绕不开的话题&#xff0c;本文结合网上的文章&#xff0c;并根据示例介绍如何在实际设计中…

学习如何通过构建一个简单的JavaScript颜色游戏来操作DOM

学习如何通过构建一个简单的JavaScript颜色游戏来操作DOM 题目要求 我们将构建一个简单的颜色猜谜游戏。每次游戏启动时&#xff0c;都会选择一个随机的RGB颜色代码。根据游戏模式&#xff0c;我们将在屏幕上提供三个&#xff08;简单&#xff09;或六个&#xff08;困难&…