前面的文章陸續介紹了Semantic Kernel的核心組成,kernel、plugins、connector、Memory,接下來本篇要來介紹最後一個組成:planner 規劃器。planner 規劃器,我個人覺得是Semantic Kernel裡很神奇的一個組成,也是最能展現智慧運行的一個能力。
範例採用C#程式語言,並以主控台應用程式做為示範,使用的是.net 7.0。
此外GPT模型使用的是Azure OpenAI GPT-4,事實也可以依需求改用OpenAI服務,而模型也可以改用GPT-3.5。
本文以Semantic Kernel v1.0.0 Beta1版號做為教學說明
首先我們回想一下先前的範例中,除了prompt template之外,其餘的部份其實程式碼撰寫起來與過去開發其它類型的應用差不多,在程式流程中程式開發人員預先規劃使用者的所有可能操作,再按部就班排定程式流程。而Semantic Kernel裡的planner 規劃器是自動依給定的"目標",視kernel物件所具有的能力(sk function/plugins)自動規劃調用哪些function,並且順序上也是自動安排。
而planner 規劃器本身即是一個function,由於是自動規劃,因此它有可能產生不符預期的作業順序或調用不適合的function,這有很大的因素取決於所給與的"目標"prompt以及sk function裡的語義描述,因為planner 規劃器本身會根據function裡語義描述來理解該function的用途。
( 資料來源: https://learn.microsoft.com/en-us/semantic-kernel/media/the-planner.png )
你是一位facebook小編,撰寫下列主題的貼文,內容200個字以內,#zh-tw
{{$input}}
{
"schema": 1,
"type": "completion",
"description": "產生facebook貼文",
"completion": {
"max_tokens": 2000,
"temperature": 0.2,
"top_p": 0.0,
"presence_penalty": 0.0,
"frequency_penalty": 0.0
},
"input": {
"parameters": [
{
"name": "input",
"description": "貼文主題",
"defaultValue": ""
}
]
}
}
翻譯下列內容成為英文,並輸出原始中文資料及翻譯後的英文資料都要顯示出來,中英文內容分隔2行
{{$input}}
{
"schema": 1,
"type": "completion",
"description": "翻譯",
"completion": {
"max_tokens": 2000,
"temperature": 0.2,
"top_p": 0.0,
"presence_penalty": 0.0,
"frequency_penalty": 0.0
},
"input": {
"parameters": [
{
"name": "input",
"description": "要翻譯的內容",
"defaultValue": ""
}
]
}
}
// Import the Plugin from the plugins directory.
var pluginsDirectory = Path.Combine(System.IO.Directory.GetCurrentDirectory(), "Plugins");
kernel.ImportSemanticFunctionsFromDirectory(pluginsDirectory,"WriterPlugin");
var planner = new SequentialPlanner(kernel);
var plan = await planner.CreatePlanAsync("寫一則關於chatgpt對教育場景影響的臉書貼文,然後翻譯該則貼文為英文.");
var result = await kernel.RunAsync(plan);
Console.WriteLine("Result:");
Console.WriteLine(result.GetValue<string>());
若想知道plan內容,可以由plan.Steps取得
Console.WriteLine("Original plan:");
foreach (var step in plan.Steps)
{
Console.WriteLine($"step : {step.Name}");
}
範例原始碼 : https://github.com/iangithub/sklearn/tree/main/SequentialPlannerSample
Planner用於自動化安排作業步驟,而其中的關鍵還是回歸到文字語義上,就像真實場景去早餐店點餐,而廚師會自動安排料理的過程及程序,做為消費者只需要等待最後拿到餐點即可。然而這個能力很吃重理解力,因此建議採用高階模型來搭配,例如GPT-4。此外若商業程序不容易順序出錯,則不宜使用Planner規劃器做自動化的安排,這有可能導致錯誤的結果。
嗨,我是Ian,我喜歡分享與討論,今年跟2位朋友合著了一本ChatGPT主題書,如果你是一位開發者,這本書或許會有些幫助,https://www.tenlong.com.tw/products/9786263335189
這次的鐵人賽文章也會同時發佈於個人blog,歡迎關注我的blog : https://medium.com/@ianchen_27500