iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
AI & Data

OpenAI 從提示工程(Prompt Engineering)到語義核心(Semantic Kernel)的實踐系列 第 25

Semantic Kernel的實踐:Semantic Kernel - 串連多個semantic function共享上下文

  • 分享至 

  • xImage
  •  

前言

本篇要來介紹在Semantic Kernel裡,如果要依序執行多個semantic function並且共享上下文,該如何進行?這樣的需求會滿常見的,舉例來說,我需要ChatGPT先幫忙修飾文本內容,接著再把修飾後的文本進行翻譯處理,所以程序就會變成第2個步驟必須依賴第1個步驟生成的結果。

範例採用C#程式語言,並以主控台應用程式做為示範,使用的是.net 7.0。
此外GPT模型使用的是Azure OpenAI GPT-4,事實也可以依需求改用OpenAI服務,而模型也可以改用GPT-3.5。

至目前為止本系列文中的範例皆採用Microsoft.SemanticKernel套件,版號為0.24.230918.1-preview,然而下週Semantic Kernel預計會正式發行1.0版,因此後面文章若遇到1.0版發行,則會直接使用1.0版,而前面文章的範例,也會另行找時間更新,github上的程式碼也會同時更新。

特殊的input變數

semantic kernel內有個很特別的變數名為"input",這個變數允許我們將一個semantic function的輸出做為下一個semantic function的輸入,因此如果要依序執行多個semantic function並且共享上下文,就可以利用這個特殊變數來達成。

https://ithelp.ithome.com.tw/upload/images/20231009/20126569RFUOkiP84F.png

實際演練

  • 建立二個semantic function,在同一個Plugin裡
    第一個semantic function的skprompt
你是一位facebook小編,撰寫下列主題的貼文,內容200個字以內,#zh-tw

{{$input}}

第二個semantic function的skprompt

翻譯下列內容成為英文,並輸出原始中文資料及翻譯後的英文資料都要顯示出來,中英文內容分隔2行

{{$input}}

  • 接著建立kernel並掛上Plugin
var kernel = new KernelBuilder()
         .WithAzureChatCompletionService(
          deploy_model,   // Azure OpenAI Deployment Name
          aoai_Endpoint, // Azure OpenAI Endpoint
          api_Key  // Azure OpenAI Key
         ).Build();

// Import the Plugin from the plugins directory.
var pluginsDirectory = Path.Combine(System.IO.Directory.GetCurrentDirectory(), "Plugins");
var plugin = kernel.ImportSemanticSkillFromDirectory(pluginsDirectory, "WriterPlugin");
  • 使用kernel的RunAsync方法,依序調用semantic function,並且透過ContextVariables設置input參數值
//叫用GPT模型等得生成結果
var result = await kernel.RunAsync(new ContextVariables("ChatGPT對校園教育的衝擊")
    , plugin["FacebookPoster"]
    , plugin["Translate"]);
  • 生成結果
    https://ithelp.ithome.com.tw/upload/images/20231009/20126569RXnwwIlhNs.png

範例原始碼 : https://github.com/iangithub/sklearn/tree/main/ChainSemanticFunc

結語

本篇透過kernel.RunAsync方法搭配input變數,實現依序執行semantic function並且共享上下文的應用情境。而這也是semantic kernel帶給開發者的優勢,透過semantic kernel已架構的模式,便可以輕鬆實現實務開發上面對的通用需求。

嗨,我是Ian,我喜歡分享與討論,今年跟2位朋友合著了一本ChatGPT主題書,如果你是一位開發者,這本書或許會有些幫助,https://www.tenlong.com.tw/products/9786263335189
這次的鐵人賽文章也會同時發佈於個人blog,歡迎關注我的blog : https://medium.com/@ianchen_27500


上一篇
Semantic Kernel的實踐:Semantic Kernel - 整合embedding,以建立私有知識庫應用為例
下一篇
Semantic Kernel的實踐:Semantic Kernel v1.0.0 Beta1 變化
系列文
OpenAI 從提示工程(Prompt Engineering)到語義核心(Semantic Kernel)的實踐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言