前一篇以一個簡單的Sample體會如何使用Semantic Kernel,接著就要來細說Semantic Kernel的細節,本篇先從 Kernel開始。
範例採用C#程式語言,並以主控台應用程式做為示範,使用的是.net 7.0。
此外GPT模型使用的是Azure OpenAI GPT-4,事實也可以依需求改用OpenAI服務,而模型也可以改用GPT-3.5。
Semantic Kernel 是以開源方式發行,並以套件方式融入應用中,以C#來說就是以Nuget套件發行,只是在目前尚未正式發佈1.0版本前,必須勾選包含搶鮮版,這樣才能找到Semantic Kernel 套件 — Microsoft.SemanticKernel。
Semantic Kernel 的整個機制都是建立在 Kernel 物件身上,因此不管是連結模型或是Plugins都是以Kernel 物件為中心。
這個範例,要注意的是這個範例 Kernel 物件本身並沒有接上任何模型,然後它卻掛入的了一個內建開箱即用的Plugins(TimeSkill),然後kernel.RunAsync就可以執行輸出時間,可以看到它並沒有Chat的功能。
var kernel = Kernel.Builder.Build();
var time = kernel.ImportSkill(new TimeSkill());
var result = await kernel.RunAsync(time["Today"]);
Console.WriteLine(result);
var kernel = new KernelBuilder()
.WithAzureChatCompletionService(
deploy_model, // Azure OpenAI Deployment Name
aoai_Endpoint, // Azure OpenAI Endpoint
api_Key // Azure OpenAI Key
).Build();
想使用 OpenAI,就換用WithOpenAIChatCompletionService,同樣內建開箱即用
現階段版本,Semantic Kernel提供了不只上述二種的開箱即用的服務,還有像是
當然你也可以自行擴展,使用WithAIService將自定義的AI Service置入到Kernel物件中
除此之外,也可以配置
而當你的LLM應用需要使用多個模型服務時,Kernel物件也支援配置多個模型服務
這個範例是Kernel物件配置了Embedding、MemoryStorage、Azure OpenAI 服務
var kernel = new KernelBuilder()
.WithAzureTextEmbeddingGenerationService(embedding_Model, aoai_Endpoint, api_Key)
.WithMemoryStorage(new VolatileMemoryStore())
.WithAzureChatCompletionService(
deploy_Model, // Azure OpenAI Deployment Name
aoai_Endpoint, // Azure OpenAI Endpoint
api_Key // Azure OpenAI Key
).Build();
而Plugins的部份,也是必須依需求事先置入Kernel物件中
//接上Plugins
var pluginsDirectory = Path.Combine(System.IO.Directory.GetCurrentDirectory(), "Plugins");
var writerPlugin = kernel.ImportSemanticSkillFromDirectory(pluginsDirectory, "WriterPlugin");
本篇內容說明了如何建立Semantic Kernel最核心的Kernel物件的方式,可以看到Semantic Kernel已經包裝好許多常用的服務,這些都是可以直接開箱即用的,例如WithOpenAIChatCompletionService也不用自行撰寫API的呼叫,對開發上來說相當的方便,接下來連續幾篇系例文,我們將進入Plugins的說明。
嗨,我是Ian,我喜歡分享與討論,今年跟2位朋友合著了一本ChatGPT主題書,如果你是一位開發者,這本書或許會有些幫助,https://www.tenlong.com.tw/products/9786263335189
這次的鐵人賽文章也會同時發佈於個人blog,歡迎關注我的blog : https://medium.com/@ianchen_27500