前一篇從概觀的角度理解 Semantic Kernel,並且概述了Semantic Kernel核心的5個元素,本篇以一個簡單的Sample來體會一下如何使用Semantic Kernel。
範例採用C#程式語言,並以主控台應用程式做為示範,使用的是.net 7.0。
此外GPT模型使用的是Azure OpenAI GPT-4,事實上也可以依需求改用OpenAI服務,而模型也可以改用GPT-3.5。
這個範例會示範如何串接Azure OpenAI GPT-4模型,並以建立具有童話創造能力的LLM應用。
首先安裝 Microsoft.SemanticKernel 套件,本範例使用的是 0.24.230918.1-preview 版本
建立Plugins/WriterPlugin/FairyTales目錄
這個程序是待會我們會使用一種稱為"範本語義函數(Templatizing semantic functions)"的技巧,它是屬於 Semantic Kernel Plugins 的一種做法,具體的部份,我們後面章節再來說明。
接著在FairyTales目錄建立二個檔案,分別是config.json以及skprompt.txt
{
"schema": 1,
"type": "completion",
"description": "根據主題及角色創造童話故事給小朋友聽",
"completion": {
"max_tokens": 2000,
"temperature": 0.8,
"top_p": 0.0,
"presence_penalty": 0.0,
"frequency_penalty": 0.0
}
}
現在你是一位童話故事創作高手,請根據下列主題
"""
{{$story_subject}}
"""
以及以下角色,創造故事給3到7歲小朋友聽,使用繁體中文
"""
{{$story_role}}
"""
Console.WriteLine("bot: 你想聽什麼主題的故事呢? \n");
Console.Write("you: ");
string storySubject = Console.ReadLine();
Console.Write("\n");
Console.WriteLine("bot: 故事的角色是什麼呢? \n");
Console.Write("you: ");
string storyRole = Console.ReadLine();
Console.Write("\n");
var kernel = new KernelBuilder()
.WithAzureChatCompletionService(
deploy_model, // Azure OpenAI Deployment Name
aoai_Endpoint, // Azure OpenAI Endpoint
api_Key // Azure OpenAI Key
).Build();
var kernel = new KernelBuilder()
.WithOpenAIChatCompletionService(
OpenAIModelId, // The name of your deployment (e.g., "gpt-3.5-turbo")
OpenAIApiKey, // The API key of your Azure OpenAI service
OpenAIOrgId // The endpoint of your Azure OpenAI service
)
.Build();
var pluginsDirectory = Path.Combine(System.IO.Directory.GetCurrentDirectory(), "Plugins");
var writerPlugin = kernel.ImportSemanticSkillFromDirectory(pluginsDirectory, "WriterPlugin");
var variables = new ContextVariables
{
["story_subject"] = storySubject,
["story_role"] = storySubject
};
var result = (await kernel.RunAsync(variables, writerPlugin["FairyTales"])).Result;
Console.WriteLine(result);
本範例完整原始碼:https://github.com/iangithub/sklearn/tree/main/IntroSample
本篇內容主要以一個較簡單的範例,走一遍怎麼開始使用Semantic Kernel,整個範例從如何建立Kernel物件,連結GPT模型服務,再加上Plugins,剛好就是前篇文章中我們提及的這張圖,相信走過這個相對簡單的範例後,就能對使用Semantic Kernel有一個初步的認識,當然技術細節的部份在本篇並未深入說明,這部份會在接下來的系列文中做更深入的教學。
嗨,我是Ian,我喜歡分享與討論,今年跟2位朋友合著了一本ChatGPT主題書,如果你是一位開發者,這本書或許會有些幫助,https://www.tenlong.com.tw/products/9786263335189
這次的鐵人賽文章也會同時發佈於個人blog,歡迎關注我的blog : https://medium.com/@ianchen_27500