iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
生成式 AI

當 .NET 遇見 AI Agents:用 Semantic Kernel × MCP 打造智慧協作應用系列 第 9

Day 9: 什麼!!多了一個 Semantic Kernel Agent Framework

  • 分享至 

  • xImage
  •  

透過前面幾篇文章的內容,對 Semantic Kernel 有了基本的認識,包含模型的連結、Prompt 的設計、plugin 的建立與使用、甚至加入短期記憶(聊天記錄)等,這些都是屬於 Semantic Kernel 的基本功能。而透過這些功能,已經可以建立起一些簡單的生成式 AI 應用程式,完成的功能是偏向「使用者說一句,我們做一件事」的邏輯,簡單來說就是「單指令對應單工具」,距離真正具備「自動判斷、規劃與執行」的 AI Agent,還差一點點。

因此在 2024 年 Semantic Kernel 團隊為了讓開發者更容易建立 Agent 應用,推出了 Semantic Kernel Agent Framework (SKAF),這是一個基於 Semantic Kernel 的高階框架,讓開發者可以更方便的建立具備決策能力的 AI Agent,如果你有聽過 AutoGen 的話,SKAF就是 Semantic Kernel 與 AutoGen 進行整合下的產出,並且於2025上半年正式 GA。

Semantic Kernel Agent Framework 的核心

  • 核心抽象 – IAgent/Agent 類別
    Semantic Kernel Agent Framework 提供統一的代理抽象介面(IAgent)以及一個抽象基礎類別(Agent),所有具體的代理實作基本上都是繼承自這個基礎類別。Agent 類別的角色可以說是整個框架的「共通底座」,它封裝了很多跟 Semantic Kernel 整合時常見的重複邏輯,比如:怎麼跟 Kernel 溝通、要怎麼呼叫函數等等。這樣的設計,讓我們在開發不同類型的代理時,不用每次都從頭寫起,可以直接用這些「通用能力」,把注意力集中在我們自己想實作的業務邏輯上。

簡單來說,Semantic Kernel Agent Framework 幫我們把底層的繁瑣細節都處理好了,再往上提供一層比較高階的抽象。對開發者來說,不但能無痛延續 Semantic Kernel 的原有開發模式,也讓整個開發流程更順手、更有彈性。

  • 多代理協作與並行對話
    在 Semantic Kernel 的 Agent Framework 裡,它支援在同一個應用中建立多個具備不同職責的 Agent,讓它們可以像一個小團隊一樣,分工合作、一起完成任務。舉個例子來說,一段使用者的對話中,可能同時有一個負責聊天互動的 Chat Agent,還有一個專門處理訂單查詢的 Customer Order Agent。這兩個代理各自有自己的專長(capabilities),不需要搶工作,但可以互相協作,把整個流程順利完成。這種設計讓我們在開發時能夠更清楚地把職責拆分,也更容易維護。

此外,Semantic Kernel Agent Framework 也支援「一個代理處理多個對話執行緒」(AgentThread)。就是同一個 Agent 可以同時追蹤和管理不同使用者的對話上下文,如此一來對於同一個使用者來說,只要能持久化這些上下文,就能在不同的對話session中保持一致性。

  • 對話狀態與 AgentThread
    針對特定平台的對話狀態管理,Semantic Kernel Agent Framework 提供了專門的 AgentThread 實作,來處理不同模型服務在對話記憶上的差異。

例如,如果你用的是 Azure 的 AI 服務,就可以搭配 AzureAIAgent 和 AzureAIAgentThread,自動對接 Azure 提供的內建對話狀態儲存機制。等於說,你不用自己處理Azure AI 平台上的記憶保存與還原,Semantic Kernel Agent Framework會幫你搞定。

但如果你只是用一般的 ChatCompletion 模型(像是 OpenAI API),那就可以用內建的 AgentThread,自己在應用端管理這些歷史訊息。這種設計的好處是可以依據使用情境的不同,自由選擇要不要倚賴雲端服務的對話記憶功能,或者自己處理整個對話歷程。

Agent 抽象實作

Semantic Kernel Agent Framework 提供 ChatCompletionAgent 與 OpenAIAssistantAgent 兩種常見型別,對應不同供應商/託管風格。

  • ChatCompletionAgent
    ChatCompletionAgent 是專門設計給像是 OpenAI ChatGPT 或 Azure OpenAI Chat 這類聊天補全模型使用的。簡單說,它就是一個通用型的對話代理,能處理人機之間的對話,也能在多個代理之間扮演「溝通橋樑」的角色。

它的核心是透過 IChatCompletionService 來與模型互動產生回應內容,而且會自動維護整個多輪對話的歷史紀錄,讓上下文不會斷線。也可以透過參數設定來微調它的行為,例如:指定角色(像是 system/user/assistant)、設定溫度值來調整創造力,以及直接指定要用哪一個模型。

另外,它也支援我們自訂 Instructions(也就是 system message 的內容),來定義這個代理「扮演什麼樣的角色」。舉個例子:你可以設定它是「一位嚴謹的文案校稿助理」,這樣它在回應時就會比較傾向於精準、保守,符合這個角色的性格。

同時,ChatCompletionAgent 也支援串流回應與函式呼叫。當啟用函式模式之後,便可以自動呼叫掛載在代理上的工具,去執行一些實際任務,直接變成不只是「會聊天」,而是可以「邊聊邊做事」。

在 Semantic Kernel 1.0 裡,ChatCompletionAgent 幾乎就是構建本地 AI 助理的核心元件,不管是單純的問答應用,還是多輪對話的複雜任務,是非常實用的一個元件。

  • OpenAIAssistantAgent
    跟前面提到的 ChatCompletionAgent 相比,OpenAIAssistantAgent 可以說是更高階的一種實作。它本身就內建了多種工具(像是程式碼解譯器、文件檢索等等),而且最方便的是——對話的上下文是由 OpenAI 平台自動幫你管理的。這代表開發者完全不用自己煩惱怎麼保存對話歷程,整個流程幾乎是 plug-and-play。使用上也非常簡單,只要提供 API 金鑰,然後指定你在 OpenAI 平台建立好的 Assistant ID,就能快速把一個功能完整的 AI 助手跑起來。而且因為 OpenAI 的 Assistant 原本就支援函式自動呼叫(Function Calling),所以在 Semantic Kernel 裡使用 OpenAIAssistantAgent 時,也不用額外啟用什麼函數模式——只要定義好 Assistant 的工具,它就能自動判斷什麼時候該叫什麼功能,整個體驗非常順。簡單來說就是如果你要以 Semantic Kernel 來串接 OpenAI 的 Assistant 功能,OpenAIAssistantAgent 就是最合適的選擇。

結語

Semantic Kernel Agent Framework (SKAF) 是建立在 Semantic Kernel 之上的高階框架,讓開發者可以更輕鬆的打造具備決策能力的 AI Agent,但卻也保持著 Semantic Kernel 相同的開發體驗。當然也會對過去的 Semantic Kernel 造成了一些改變,例如早期要用 Semantic Kernel 實現 Agent 自動決策規劃,通常是由 Planner 來負責,但在 SKAF 裡,這個角色就被 Agent 本身取代了,轉換到 Function Calling+ Agent 抽象的實作。另外有了 SKAF 之後,對於從單 Agent 聊天到多 Agent 協作的開發上也會更容易。

因此如果你想要建立一個具備決策能力的 AI Agent,Semantic Kernel Agent Framework 絕對是目前最推薦的選擇。它不但延續了 Semantic Kernel 的設計理念,也讓開發流程更順手、更有彈性。無論是單一代理還是多代理協作,SKAF 都能提供強大的支援,幫助你快速打造出符合需求的生成式 AI 應用程式。

下篇文章將會介紹如何使用 Semantic Kernel Agent Framework 來建立一個簡單的 AI Agent,並展示它的基本功能與使用方式,明天見!


上一篇
Day 8: Single-Agent vs Multi-Agent 架構的選擇指南
系列文
當 .NET 遇見 AI Agents:用 Semantic Kernel × MCP 打造智慧協作應用9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言