用. NET 驅動 AI Agent 到 MCP 實踐

本次工作坊以 Semantic Kernel 實作AI Agent以及MCP,程式語言採用 C#,工作坊專案:https://github.com/iangithub/hwdhol2025

認識 Semantic Kernel

Semantic Kernel(簡稱 SK)是微軟開源的一套 AI 原生應用開發框架,發展目的在於協助開發者將大型語言模型(LLM)與既有的軟體系統、業務流程、外部服務整合起來,建構出「可落地」的 LLM 智慧應用。

這個框架的誕生源於一個重要的技術需求:當企業想要利用 AI 的強大能力時,往往面臨如何將 AI 模型與既有的商業邏輯、資料庫、API 服務等傳統程式碼銜接整合的挑戰。因此 Semantic Kernel 提供了一個標準化的架構,讓 AI 模型能夠像呼叫函式一樣被程式呼叫,同時也能讓 AI 主動呼叫外部的函式和工具,實現真正的「AI 協調編排」(AI Orchestration)。目前支援C#、Python、Java,並且包含 LLM 應用所需要的記憶體管理、Tools系統、提示詞等功能,讓開發者不需要從零開始建構這些基礎設施。

簡單來說,Semantic Kernel 的發展目的就是成為連接「AI 大腦」與「應用程式世界」的橋樑,讓企業能夠快速將 AI 能力融入日常的軟體系統中,加速 AI 應用的落地實踐。

Semantic Kernel 核心組件

想像一下,你在組裝一台電腦。有主機板、CPU、記憶體、硬碟等零件,每個都有自己的功能,但只有當它們正確組合在一起時,才能變成一台能用的電腦。Semantic Kernel 也是這樣,它由幾個核心元件組成,每個都扮演著不可或缺的角色。

  • 🧠Kernel(大腦中樞) Kernel 是整個 Semantic Kernel 的「大腦中樞」,負責協調所有元件的運作。可以把它想像成一個「智慧調度中心」,管理要連接哪個 LLM Model、要呼叫哪些Plugins、要註冊哪些服務,所有的 AI 互動都會經過 Kernel 來處理和分配。

  • 🧰 Plugins(Function Calling) Plugins 是 Semantic Kernel 用來擴充 LLM 功能的關鍵機制,對應到 OpenAI Function Calling 的概念,開發者可以把任意的 C# 或 Python 函式包裝成 Plugin,註冊進 Kernel,讓 LLM 能夠「自行決定何時呼叫這些函式」,達成指令式自動化的效果,例如,當使用者問「今天天氣如何?」,AI 可以自動呼叫天氣查詢插件來取得即時資料。

  • 🔌 LLM Model Connector(模型連接器) Semantic Kernel 支援連接多種 LLM 服務包含雲端平台以及地端部署,因此它設計了抽象的 Model Connector 介面,讓開發者能夠自由接上不同來源的模型,例如:OpenAI / Azure OpenAI、Ollama、Hugging Face、Google Gemini…

  • 📝 Memory(記憶模組) Memory 是 Semantic Kernel 讓 AI 具備「記憶」能力,包含可以儲存和檢索對話歷史、上下文資訊、知識庫內容等,並且支援向量資料庫(Vector Database)來實現語意搜尋,能夠根據語意相似度而非關鍵字來找相關資訊。

初體驗 Semantic Kernel

建立一個連接 LLM 的生成式應用,並掛載 Plugin,模擬天氣資訊回應助手。目標熟識 SK 基本元素使用方式。

  • 前置作業,安裝必要套件

  • 建立Kernel,並設定自動調用 function calling

  • 建立Plugin WeatherServicePlugin,模擬取得天氣資訊

  • Kernel 掛載Plugin WeatherServicePlugin

  • 建立短期記憶對話記錄,並呼叫AddSystemMessage 加入 System Prompt

  • Kernel 取得聊天完成 ChatCompletionService 服務

  • 以串流方式Streaming 獲取 AI 回應方式開始對話

Sequential Agent

Sequential Agent,也稱為 Sequential Orchestration(順序編排),是 Semantic Kernel 中一種 AI 工作流程編排模式。運作模式就是讓多個 Agent 依照「既定的順序」依序執行,就像生產線一樣,前一個 Agent 的輸出會成為下一個 Agent 的輸入,每個 Sub Agent 都專注於一個明確的任務,像模組化的工人,最終產出完整結果。

實際應用場景

文章生成流程: Agent 1:根據主題生成大綱 Agent 2:根據大綱撰寫內容 Agent 3:檢查文法和潤飾 Agent 4:生成摘要和關鍵字

客戶服務處理: Agent 1:分析客戶問題類型 Agent 2:查詢相關知識庫 Agent 3:生成回覆內容 Agent 4:檢查回覆的專業性和禮貌性

輿情分析系統: Agent 1:透過 RSS 抓取當天的文章資料 Agent 2:移除雜訊、清理 HTML、正規化文字 Agent 3:分析關鍵字與同義詞,統整熱門討論主題 Agent 4:整理結果並輸出成每日排行榜報告

Sequential Agent Lab

Lab場景:多代理人協同審查文件內容,確保符合人資政策、資訊安全與合規要求,原始碼請參考 github(Agents/SequentialOrchestrationAgent.cs)。

  • 前置作業,安裝必要套件

  • 專案檔加入忽略警告訊息設定

Handoff Agent

Handoff Orchestration(移交式協作),顧名思義就是多個 Agent 之間透過「主導權的轉移(Handoff)」來完成一個任務,與 Sequential 不同的是,Handoff 並不是一開始就設定好固定順序,而是讓 Agent 之間在對話或任務執行過程中,根據「情境判斷」來決定下一步該由哪個 Agent 接手。

實際應用場景

企業內部多部門諮詢系統: HR Agent:負責人事相關諮詢(例如請假、福利、考勤) IT Agent:負責系統登入、VPN、設備問題 Finance Agent:負責費用報支、帳款、薪資等

Handoff Agent Lab

Lab場景:企業內部辦公室助理,對使用者的提問進行分類的企業 Support Agent,任務是判斷使用者問題屬於哪一類:人資(HR)、IT、或合規(Compliance),原始碼請參考 github(Agents/HandoffOrchestrationAgent.cs)。

Concurrent Agent

Concurrent Orchestration(並行協作) 是指在一個任務中,讓多個 Agent 同時(並行)工作,並在最後再把它們的結果整合起來,而不是像 Sequential 那樣一個接一個執行,對於縮短總處理時間的場景非常有用,但前題是這幾個並行工作的 sub-agent 彼此間並沒有關聯性。

實際應用場景

多語言內容生成,同時完成:一次性生成所有語言版本 Agent 1:翻譯成英文 Agent 2:翻譯成日文 Agent 3:翻譯成西班牙文 Agent 4:翻譯成法文

Concurrent Agent Lab

Lab場景:產品說明書多語言版本生成,原始碼請參考 github(Agents/ConcurrentOrchestrationAgent.cs)。

認識 MCP

Model Context Protocol(模型上下文協議)是 Anthropic 於 2024 年推出的開放標準協議,其發展目的是為了解決一個關鍵問題:如何讓 AI 模型安全、標準化的連接到各種資料源、工具和服務。 在 MCP 出現之前,每個 AI 應用都需要為不同的資料源(如資料庫、API、檔案系統)客製化整合方案,增加重複開發工作和維護成本。MCP 的誕生就是為了建立一個統一的通訊標準,讓 AI 模型能夠透過標準化的方式存取外部資源,簡單來說就是AI系統間的 WEB API。

三大核心組件

  • MCP Host(主機) AI 應用程式本身,如 Claude Desktop、IDE、你的LLM應用,負責初始化連接和協調整體流程

  • MCP Client(客戶端) Client 是 MCP 架構的「消費端」,在 Host 中運行,維護與 MCP Server 的連接,處理協議層的通訊細節

  • MCP Server(伺服器) Server 是 MCP 架構的「供應端」,負責**暴露工具(Tools / Capabilities)與上下文(Context)**給其他 Agent 或用戶端使用,每個 Server 可以暴露多種能力。

兩大通訊方式

  • stdio(標準輸入輸出) Standard Input/Output,這種方式透過程序的標準輸入和輸出串流來傳遞訊息,MCP Client 會啟動一個 MCP Server 程序,然後透過 stdin(標準輸入)發送請求,並從 stdout(標準輸出)接收回應。簡單來說,,就是在Client本機跑一個 MCP Server 的程序。

  • Streamable HTTP(取代了 SSE) 透過單一 HTTP 連接實現雙向訊息傳遞,這種方式是基於Http的通訊方式,支援雙向互動,所以會需要有一個連接的端點。

Lab 前置作業

安裝MCP官方.NET套件,Client及Server都需要

Agent 連接基於 stdio 的 MCP Server

Lab情境會建立一個主控台應用,採用Self-Host運行在本機,接著在AI Agent的應用使用 stdio 方式來連接 MCP Server,取得工具給 AI Agent 使用。原始碼請參考 github(Agents/AgentWithStdioMcp.cs),MCP Server原始碼請參考 github(McpServer/mymcpserver 專案)。

Agent 連接基於 Streamable HTTP 的MCP Server

Lab情境會建立一個 Web 應用,採用 Streamable HTTP 運行Web應用並暴露連接端點,接著在AI Agent的應用使用 HTTP 方式來連接 MCP Server,取得工具給 AI Agent 使用。原始碼請參考 github(Agents/AgentWithHttpMcp.cs),MCP Server原始碼請參考 github(McpServer/McpWebOrderServer 專案)。測試時必須同時啟用 McpWebOrderServer 以實現遠端MCP Server連結。

Last updated