前言
在上一章中,我們初探了 Semantic Kernel 的核心概念,並學習如何透過 Kernel 輕鬆地將 AI 服務整合到你的 C# 應用程式中。我們看到了 AI 基礎能力的強大,也理解到單靠 LLM 本身的知識庫仍有其限制。
這個限制,正是本章將要解決的核心問題。
想像一下,如果 AI 不僅能回答你提出的問題,還能執行更複雜的任務,例如:查詢即時的天氣、從資料庫中提取特定資訊,或是自動發送一封電子郵件。這將大大提升 AI 的應用潛力。
Semantic Kernel 提供了強大的 Plugins(插件) 機制,就像為你的 AI 助理裝備了一整個「工具箱」,讓它不再只是個知識淵博的大腦,更能動手執行任務,成為能解決現實問題的超能力者。
本章,我們將深入探索 Plugins 的世界,從最基礎的內建函數 (Native Functions) 開始,手把手帶你學習如何創建和使用自己的工具,並進一步了解如何透過檔案式提示 (File-based Prompts),將 AI 的能力提升到一個全新的層次。
Using a Function with a Complex Type Parameter and Return Type
以下我們就來建立一個包含地點及日期的參數,做為查詢天氣預報的參數,試看看 LLM 是否能順利地從使用者的問題中,取出合適的參數來呼叫天氣預報的 Function ,如下:
1 | using Microsoft.SemanticKernel; |
然後在 Kernel 中註冊這個 Plugin 後,詢問今2024/9/1 在台中的天氣如何?
,如下:
1 | using Microsoft.SemanticKernel; |
在 GetWeatherForecastForLocationAndDate
Method 設定中斷點,可以看到 LLM 從使用者的問題中取出地點及日期組成WeatherRequest
參數傳到 Method 之中,如下圖:

Built-in Plugins
Semantic kernel 核心的 Plugin 包含Time plugin
、HTTP plugin
、FileIO plugin
、ConversationSummary plugin
及Text plugin
等等,
想知道更多,可以查看 Semantic kernel Plugins
1.加入 Microsoft.SemanticKernel.Plugins.Core
Nuget 套件(preview)
2.使用ConversationSummary plugin
, 整理一下對話內容,如下,
1 | using Microsoft.SemanticKernel; |
輸出結果如下:

File-based Prompt Functions(prompt plugin)
prompt plugin 包含 skprompt.txt 及 config.json
skprompt.txt: prompt 的內容(可包含變數)
config.json: prompt 的描述、執行的設定及變數的說明
以下使用人民陳情公文生成的例子來測試,找到相似的公文來生成來依使用者的陳情內容來生成新的公文,如下: 1.建立Prompts\ComposeGovDoc
目錄
2.在目錄中新增skprompt.txt
1 | 你是台灣政府機關的公文撰擬專家,需根據人民陳情與過往相似公文,產出正式可用的「{{$doc_type}}」。 |
3.在目錄中新增config.json
1 | { |
4.設定skprompt.txt
及config.json
Copy 到 Output 目錄
接下來,就來看看程式如何使用prompt plugin, 如下:
1 | using Microsoft.SemanticKernel; |
輸出結果如下:

Filters
Semantic Kernel Filters提供三種類型:
Function Invocation Filter: 每次呼叫 KernelFunction 時,都會執行此過濾器。
Prompt Render Filter: 在將 prompt 給 AI 前,會執行此過濾器。
Auto Function Invocation Filter: 與Function Invocation Filter
類似,提供額外的上下文信息(包含聊天歷史記錄、所有待執行函數的列表以及迭代計數器)。它還允許終止自動函數呼叫過程(context.Terminate = true;
)
接下來使用Function Invocation Filter
的程式碼會模擬一個對話流程,當 AI 試圖呼叫 ChangePrice 函式時,我們的 ApprovalFilter 會被觸發,並詢問使用者是否同意執行。
修改價格的 Plugin 及 Filter 如下:
1 | using Microsoft.SemanticKernel; |
Console 程式如下:
1 | using Microsoft.SemanticKernel; |
執行過程如下:

Using OpenAPI Plugins
企業可能有寫好的 API,只要有 OpenAPI 規格檔,用於描述其 API 的功能、參數、驗證方式等細節。Semantic Kernel 可以直接讀取這些規格檔,自動生成對應的函數,省下額外開發 AI Plugin 的時間。
以下以預設天氣 API 來測試, 1.加入 Microsoft.SemanticKernel.Plugins.OpenApi
Nuget 套件 2.使用 kernel.ImportPluginFromOpenApiAsync
匯入 API 3.詢問 今天天氣的如何
就會呼叫 GetWeatherForecast
1 | using Microsoft.SemanticKernel; |
結果會輸出類似的結果 根據今天的天氣預報,今天的氣溫約為23°C,天氣較冷。請注意保暖。
結論
在本章中,我們深入探索了 Semantic Kernel 的核心能力之一:Plugins。
我們從實例中見證了 Plugins 如何突破大型語言模型 (LLM) 的資訊限制,讓 AI 不僅能回答問題,更能與外部世界互動。無論是處理內建的複雜型別參數、利用現成的內建 Plugins,或是透過 File-based Prompts 來定義客製化的行為,Semantic Kernel 都提供了一套簡潔而強大的框架。此外,我們也了解了如何使用 Filters 來為 AI 流程加入額外的邏輯控制,以及如何將既有的 OpenAPI 規格快速轉化為可用的 Plugins,大幅提升開發效率。
透過這些功能,Semantic Kernel 賦予了我們為 LLM 打造專屬工具的能力,使 AI 應用程式變得更加智慧、靈活且具備處理現實世界任務的能力。
在下一章中,我們將深入探討 Semantic Kernel 如何讓你輕鬆地在不同的 LLM 服務提供者(例如 OpenAI、Azure OpenAI 等)之間切換,而無需修改核心程式碼。