Semantic Kernel 知多少 | 開啟面向AI編程新篇章
引言
在ChatGPT 火熱的當(dāng)下, 即使沒有上手親自體驗(yàn),想必也對(duì)ChatGPT的強(qiáng)大略有耳聞。當(dāng)一些人在對(duì)ChatGPT猶猶豫豫之時(shí),一些敏銳的企業(yè)主和開發(fā)者們已經(jīng)急不可耐的開展基于ChatGPT模型AI應(yīng)用的落地探索。?
因此,可以明確預(yù)見的是,「AI 能力的集成將會(huì)是很多應(yīng)用都將面臨的第一事項(xiàng)」,而擁有相關(guān)性技能的人才屈指可數(shù)。而這,正是機(jī)會(huì)所在,而機(jī)會(huì)是留給有準(zhǔn)備之人,因此,有幸看到本文的開發(fā)者們,開始考慮「面向AI編程」吧。?
即使當(dāng)下的公司沒有相關(guān)的機(jī)會(huì),也可以著手一些相關(guān)的知識(shí)儲(chǔ)備,比如學(xué)習(xí)如何寫得一手好的Prompt,了解一下目前主流的面向AI編程的開發(fā)框架,比如Python技術(shù)棧的LangChain,.NET技術(shù)棧的Semantic Kernal。?
而本文就來(lái)簡(jiǎn)單梳理什么是Semantic Kernal,可以基于Semantic Kernal 做什么?
Semantic Kernal 簡(jiǎn)介

?「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.」
?
?Semantic Kernel (SK) 是一個(gè)輕量級(jí)的 SDK,它允許你輕松地將傳統(tǒng)編程語(yǔ)言與最新的大型語(yǔ)言模型 (LLM) AI "提示"相結(jié)合,其提供開箱即用的模板、鏈接和規(guī)劃功能。
?
簡(jiǎn)而言之,就是基于SK提供的能力,可以基于“傳統(tǒng)的編程語(yǔ)言”進(jìn)行面向LLM(大語(yǔ)言模型)AI編程。 這里的LLM目前就是OpenAI,這里的傳統(tǒng)編程語(yǔ)言,可以是C#,Python亦或TypeScript、Java等,但SK是微軟開源,因此目前C#在第一支持系列。換句話說(shuō),C# 開發(fā)者已可以基于SK 進(jìn)行面向OpenAI編程。
?大型語(yǔ)言模型 (LLM) AI 是一個(gè)術(shù)語(yǔ),指的是可以從大量數(shù)據(jù)生成自然語(yǔ)言文本的 AI 模型。大型語(yǔ)言模型使用深度神經(jīng)網(wǎng)絡(luò)(如轉(zhuǎn)換器)從數(shù)十億或數(shù)萬(wàn)億個(gè)單詞中學(xué)習(xí),并生成有關(guān)任何主題或領(lǐng)域的文本。大型語(yǔ)言模型還可以執(zhí)行各種自然語(yǔ)言任務(wù),例如分類、匯總、翻譯、生成和對(duì)話。大型語(yǔ)言模型的一些例子是GPT-3,BERT,XLNet和EleutherAI。
?
那SK提供了怎樣的能力呢?SK 旨在支持和封裝來(lái)自最新 AI 研究的多種能力,以便開發(fā)人員可以為他們的應(yīng)用程序注入復(fù)雜的AI技能,如提示鏈、遞歸推理、總結(jié)、zero/few-shot(零樣本和少量樣本)學(xué)習(xí)、上下文記憶、長(zhǎng)期記憶、嵌入、語(yǔ)義索引、 規(guī)劃,以及訪問外部知識(shí)庫(kù)和您自己的數(shù)據(jù)。
上手開發(fā)AI外教應(yīng)用
但很大多數(shù)開發(fā)者肯定有這樣一個(gè)疑問:我不懂算法,也能開發(fā)AI應(yīng)用?是的,可以。OpenAI的能力已經(jīng)通過高度抽象的接口開放,開箱即用。不再像之前一樣,要進(jìn)行復(fù)雜的訓(xùn)練、調(diào)參。「對(duì)于大多數(shù)的簡(jiǎn)單的業(yè)務(wù)場(chǎng)景,只要進(jìn)行簡(jiǎn)單的Prompt設(shè)計(jì),和少許樣本的支撐,即可達(dá)到不錯(cuò)的效果。」 當(dāng)然,對(duì)于復(fù)雜的場(chǎng)景,也可能需要通過大數(shù)據(jù)集進(jìn)行自定義模型訓(xùn)練。 空說(shuō)無(wú)憑,準(zhǔn)備了一個(gè)簡(jiǎn)單的AI應(yīng)用示例:使用SK開發(fā)專屬AI外教應(yīng)用。場(chǎng)景很簡(jiǎn)單:設(shè)計(jì)一個(gè)AI外教7*24陪我練習(xí)英語(yǔ)口語(yǔ)。
需求分析
作為一名啞巴英語(yǔ)保持者,目前開口的難點(diǎn)無(wú)外乎:
詞匯量不足
語(yǔ)法混淆
發(fā)音不準(zhǔn)
口語(yǔ)表達(dá)能力弱
針對(duì)這些頑疾,我希望我的AI外教有這樣的能力:
由于我的詞匯量不足,因此我的表達(dá)中會(huì)中英混合,當(dāng)出現(xiàn)這種情況時(shí),希望AI能告訴我正確的英文表達(dá)。
由于我的語(yǔ)法經(jīng)常會(huì)犯一些時(shí)態(tài)錯(cuò)誤,當(dāng)出現(xiàn)這種情況時(shí),希望AI能進(jìn)行語(yǔ)法糾正。
由于我的詞匯量不足,當(dāng)我要求解釋某些句子或單詞時(shí),希望AI能通過中文向我解釋。
由于有些單詞不會(huì)發(fā)音,當(dāng)我詢問時(shí),希望AI能以中文的形式告訴我發(fā)音技巧。
效果預(yù)覽
那這樣的AI應(yīng)用的開發(fā),看似復(fù)雜,但在SK的加持下,20行代碼就可以輕松搞定。先來(lái)給大家看看演示效果:

弱弱的問一句,這樣的AI外教,滿足你的需要嗎?如需體驗(yàn),評(píng)論留言。
上代碼
簡(jiǎn)單起見創(chuàng)建控制臺(tái)應(yīng)用程序:
dotnet new console -n MyAITeacher.Demo
添加
Microsoft.SemanticKernel
Nuget 包創(chuàng)建
Skills->Learning->LearningEnglishSkill
目錄在
LearningEnglishSkill
目錄下添加config.json
和skprompt.txt
文件config.json:用來(lái)配置模型參數(shù),可保持為空:
{}
,使用默認(rèn)參數(shù)即可skprompt.txt: 用來(lái)定義設(shè)計(jì)的prompt
在
skprompt.txt
中設(shè)計(jì)滿足需求的Prompt:
6. 修改Program.s
如下:
最后
通過簡(jiǎn)單的Prompt的設(shè)計(jì)即可開發(fā)不錯(cuò)的AI設(shè)計(jì),你心動(dòng)了嗎?心動(dòng)不如行動(dòng),以下的鏈接必對(duì)你有所幫助:
https://learningprompt.wiki/
https://learn.microsoft.com/en-us/semantic-kernel/whatissk