前言
隨著大型語言模型 (LLM) 的崛起,人工智慧已不再是遙不可及的技術,而是正在深刻地影響著每個企業與工作流程。若想在 AI 浪潮中保持領先,最有效的方式就是將其應用於日常業務,實現流程自動化。
想像一下,過去需要耗費大量人力進行的客戶資料分類工作,比如綜合比對客戶的產業別、上市櫃資訊、營運項目,甚至是網路搜尋結果,現在都能藉由 AI 輕鬆完成。你只需上傳一份 Excel 文件,AI 便能自動處理大部分分類工作,員工只需專注於處理少數 AI 無法判斷的例外情況,大幅提升效率。
要將 AI 整合到現有應用程式 (AP) 中,我們可以透過多種方式,例如呼叫 AI 工具的 API,但當需求更複雜、需要更精確地控制整個過程時,直接呼叫 LLM 的 API 成了更好的選擇。
不過,這也帶來了新的挑戰:不同的 LLM 提供者 (如 OpenAI、Azure OpenAI) 有各自的 API 規範,開發者需要處理各種不同的參數設定、端點 (Endpoint) 和模型名稱 (Model Name)。
這種差異性不僅增加開發的複雜度,也讓未來切換或擴充 LLM 服務變得困難。
這正是 Semantic Kernel 派上用場的時候。作為一個由微軟開源的 SDK,Semantic Kernel 提供了一套統一且強大的框架,能夠協助開發者輕鬆、靈活地管理與 LLM 的互動。
它不僅簡化了與不同 LLM 服務的整合過程,更讓開發者能專注於打造具備「語義」理解能力的應用程式,而不用被底層技術細節所困擾。
在這個系列文章中,我們將深入探索如何使用 C# 和 Semantic Kernel,一步步構建具備 AI 智慧的應用。
我們將從基礎概念開始,逐步實作各種功能,帶你親身體驗 Semantic Kernel 如何幫助你輕鬆將 AI 能力整合至你的應用程式中。
Semantic Kernel
Semantic Kernel 是一個可擴充的輕量級的 .NET AI SDK,目標是讓 AP 可以輕易地與 AI 整合。
提供一個統一的介面,讓開發者可以用相同的方式去使用不同的 AI 服務(text generation, image geration, chat…),而不用在意每個服務的細節差異。
要快速掌握 Semantic Kernel 的核心,可以從它的六個主要元件開始理解:Kernel、AI Service Connectors、Functions and Plugins、Prompts and Prompt Templates、Memory 和 Filters。
以下我們建立 Console 程式來看看如何使用這些元件,
1.建立 Console App
2.加入 Microsoft.SemanticKernel
Nuget 套件
3.準備好 OpenAI(或 AOAI, …) 的 API key
Kernel & AI Service Connectors
在 Semantic Kernel 的世界裡,Kernel 扮演著核心中樞的角色。它不只負責串接應用程式和 AI 模型,更是所有 AI 服務與插件的協調者。想像它是一個大型工具箱,裡面裝滿了各式各樣的 AI 功能;Kernel 的任務就是確保這些工具隨時可用,讓開發者能隨心所欲地取用。
以下透過 IKernelBuilder
來建立 Kernel
後,讓使用者輸入訊息來與 LLM 對話,如下:
1 | using Microsoft.SemanticKernel; |

接下來,讓使用者輸入訊息來產生圖片,如下:
1 | using Microsoft.SemanticKernel; |

Functions and Plugins
大型語言模型 (LLM) 雖然強大,但它們的知識庫僅限於訓練時所使用的資料。
這意味著,LLM 無法存取即時資訊,也無法執行外部系統中的特定操作,例如查詢資料庫、發送電子郵件或進行外部 API 呼叫。
這使得單純使用 LLM 的應用程式難以處理需要最新資訊或與外部世界互動的任務。
就像當我在上面圖片中,輸入今天日期是?
LLM 回答是 今天的日期是2023年6月13日。
Semantic Kernel 提供了一套函數 (Functions) 和插件 (Plugins),專門用來解決這個問題。
你可以將這些函數視為 LLM 的「工具」或「外掛」,讓 LLM 能夠:
- 存取即時或私有資料:例如,查詢你的內部產品庫存、客戶資料,或是最新的天氣資訊。
- 執行特定操作:如自動發送通知郵件、在客戶關係管理 (CRM) 系統中創建新記錄,或在網路上搜尋特定內容。
這些函數讓 LLM 不再受限於其訓練資料,而是能像一個聰明的代理人,在需要時調用適當的工具來完成任務。
以下我們就來建立一個Plugin,Function 設定[KernelFunction]
屬性,並透過Description
來說Function的用途,如下:
1 | using Microsoft.SemanticKernel; |
然後將它 Import 到 Kernel 中,並設定 LLM 自動執行 Function ,並詢問 LLM 今天日期是?
,就會回答正確的日期,而不再是之前的2023年6月13日
,如下,
1 | using Microsoft.SemanticKernel; |
Semantic Kernel 在呼叫 LLM 之前,會將你註冊的 Plugins 描述(包含其名稱、描述和參數)序列化後,作為提示 (prompt) 的一部分傳送給 LLM。如果你的 Plugins 數量過多或描述過於冗長,會佔用大量的提示令牌 (token),增加成本並可能導致提示被截斷。
每次呼叫 LLM 時,建議最多只使用 10 到 20 個。若超過這個數量,模型會難以準確地選擇和使用正確的工具,容易產生錯誤或不穩定的行為。
- 註: Funciton Calling 的過程,可以參考
https://platform.openai.com/docs/guides/function-calling
的圖片來了解。

結論
在本篇文章中,我們一起探索了 Semantic Kernel 的核心概念,並透過實際範例,體驗了如何使用 Kernel 輕鬆串接多種 AI 服務(如文字生成與圖片生成)。
我們也看到,藉由 Plugins 如何突破 LLM 的資訊限制,讓 AI 能存取外部資料並執行真實世界的任務,將其從一個『資訊庫』轉變為一個『智慧代理人』。
在下一篇,我們將會深入探討 Plugins 的細節,包括如何建立和使用內建的 Plugins,以及如何利用 File-based Prompt Functions,讓你的應用程式具備更強大的語義理解與自動化能力。敬請期待!