一如先前所提,本週迎來Semantic Kernel v1.0.0 Beta1,做為v1.0.0的暖身,當然從preview到v1.0.0不意外的有些破壞性的變化,在先前的文章內也提到了改變影響較大的會是一直以來稱為Skills轉換成Plugins,另外有些變化是關於套件的歸屬以及舊的或未使用設計的移除,這部份的影響不大。本篇來把幾個從preview到v1.0.0的改變寫法整理一下,做為後續範例的參考。
範例採用C#程式語言,並以主控台應用程式做為示範,使用的是.net 7.0。
此外GPT模型使用的是Azure OpenAI GPT-4,事實也可以依需求改用OpenAI服務,而模型也可以改用GPT-3.5。
本文以Semantic Kernel v1.0.0 Beta1版號做為教學說明
透過CreateSemanticFunction建立semantic function,requestSettings參數則為OpenAI/Azure OpenAI API調用模型參數值
//建立kernel
var kernel = new KernelBuilder()
.WithOpenAIChatCompletionService(
modelId: openAIModelId,
apiKey: openAIApiKey)
.Build();
const string FunctionDefinition = "xxxxx your prompt template";
//建立 semantic function
var excuseFunction = kernel.CreateSemanticFunction(FunctionDefinition, requestSettings: new OpenAIRequestSettings() { MaxTokens = 100, Temperature = 0.4, TopP = 1 });
//調用semantic function
var result = await kernel.RunAsync("什麼是LLM", excuseFunction);
Console.WriteLine(result.GetValue<string>());
ImportSemanticFunctionsFromDirectory由指定目錄引用semantic function(舊名ImportSemanticSkillFromDirectory),
var summarizeFunctions = kernel.ImportSemanticFunctionsFromDirectory(folder, "SummarizePlugin");
var result = await kernel.RunAsync(
ask,
summarizeFunctions["Summarize"]
);
Kernel使用ImportFunctions方法附掛native function(舊名ImportSkill),參數1:Plugin物件(functionsInstance),參數2:Plugin別名(pluginName)
var textFunctions = kernel.ImportFunctions(new StaticTextPlugin(), "text");
//調用Plugin裡的native function
KernelResult result = await kernel.RunAsync(textFunctions["AppendDay"]);
使用ImportFunctions方法附掛開箱即用Plugins(native function),kernel.Functions.GetFunction調用某個Plugin裡的native function
var bingConnector = new BingConnector(bingApiKey);
var bing = new WebSearchEnginePlugin(bingConnector);
//引用Plugins
kernel.ImportFunctions(bing, "bing");
//取得Plugins裡的某個native function
var function = kernel.Functions.GetFunction("bing", "search");
//調用Plugin裡的native function
var question = "What's the largest building in the world?";
var result = await kernel.RunAsync(question, function);
Semantic Kernel終於迎來了v1.0.0 Beta1,相信v1.0.0 正式版也會很快發行,從preview到v1.0.0破壞性的改變會比較多一點,不過在使用原理上仍維持大致相同的方向,適應上應該沒什麼太大問題,先前的範例待鐵人賽後再做修正,而後面的文章範例則會使用v1.0.0 Beta1撰寫。
嗨,我是Ian,我喜歡分享與討論,今年跟2位朋友合著了一本ChatGPT主題書,如果你是一位開發者,這本書或許會有些幫助,https://www.tenlong.com.tw/products/9786263335189
這次的鐵人賽文章也會同時發佈於個人blog,歡迎關注我的blog : https://medium.com/@ianchen_27500