如果你之前已經接觸過 Microsoft Extensions for AI (MEAI) 的 IChatClient,你可能習慣於「輸入問題 $\rightarrow$ 得到答案」這種簡單的對話模式。但如果你想開發的不再僅僅是一個聊天機器人,而是一個能自主思考、調用工具、擁有長期記憶,甚至能與其他 AI 協作的「代理人」,那麼你就需要了解 Microsoft Agent Framework。
對 junior 工程師來說,最核心的區別在於:Chatbot 是被動的,而 Agent 是主動的。Chatbot 像是一個翻譯機,而 Agent 則像是一個助理,你給他一個目標(To-do list),他會自己決定要查什麼資料、跑什麼計算,最後交付結果。
從基礎設施到自主代理的演進
在 .NET 的 AI 生態中,這是一個層層堆疊的過程。首先是 MEAI (IChatClient),它定義了與各種 LLM 通訊的統一介面;接著是 VectorData,解決了如何讓 AI 檢索私有知識(RAG 模式)的問題。而 Microsoft Agent Framework 則是將這兩者整合,賦予 AI 自主行動的能力。
透過 .AsAIAgent() 這個擴展方法,你可以將一個簡單的 ChatClient 升級為 AIAgent。這意味著該物件現在不僅能對話,還能管理對話會話(Sessions)、操作工具(Tools)以及處理記憶(Memory)。
賦予 AI 手腳:工具調用 (Tool Calling)
Agent 最強大的地方在於它可以使用工具。在框架中,工具其實就是普通的 C# 函式。透過 AIFunctionFactory,你可以將函式定義為工具提供給 Agent。
這裡有一個關鍵技術點:Description 屬性。對於人類工程師,函式名稱可能就夠了,但對於 AI 來說,Description 是它的使用說明書。AI 會閱讀這些描述來判斷「現在的情況是否需要調用這個工具」以及「該傳入什麼參數」。如果描述寫得模糊,AI 就會發生誤判或無法正確調用。
管理對話脈絡:會話與記憶
在實務開發中,對話通常不是一次性的,這涉及兩個層次的狀態管理。
第一層是 AgentSession(短期對話脈絡)。它記錄了當前對話的歷史。例如,當使用者說「把它改成英文」時,Agent 必須知道「它」指的是上一句提到的內容。Session 支援序列化,這對於開發無狀態(Stateless)的後端服務至關重要,你可以將 Session 存入資料庫,下次請求時再還原。
第二層是 AIContextProvider(長期記憶)。Session 只能記得這次聊了什麼,但如果你希望 Agent 記得使用者的名字、偏好或過去的習慣,就需要 AIContextProvider。它提供了兩個核心掛鉤:StoreAIContextAsync 用於在對話後提取並儲存資訊;ProvideAIContextAsync 則在對話前將相關資訊注入到 Prompt 中。這讓 Agent 能在不同會話之間保持對使用者的認知。
複雜任務的協作:工作流 (Workflows)
當單一 Agent 無法處理複雜任務時,我們可以使用基於圖(Graph-based)的工作流來協作。你可以定義多個 Executor(執行單元)並透過 Edge(邊)連接它們,形成數據流。
常見的實作模式包括: 順序流:Agent A 處理完交給 Agent B。 條件路由:根據 A 的輸出,決定交給 B 還是 C。 反饋迴路(Writer-Critic 模式):這是非常經典的模式。由一個 Writer Agent 產出內容,再由一個 Critic Agent 審核。如果未通過,則將內容打回 Writer 重新修改,直到達標為止。
此外,框架還支援 Human-in-the-loop(人類介入)。對於涉及金流、刪除資料等高風險操作,Agent 會發出請求並暫停,直到人類工程師或使用者核准後才執行。
總結:AI 構建塊的協同效應
將這三個組件結合起來,就是一套完整的 AI 解決方案: MEAI 提供底層通訊 $\rightarrow$ VectorData 提供知識庫 $\rightarrow$ Agent Framework 負責編排與執行。
例如,你可以建立一個 Context Provider,在每次 Agent 啟動前自動去 VectorData 搜尋相關文件,將其作為背景知識餵給 Agent,從而實現一個具備長期記憶且能精準檢索私有資料的自主代理系統。
來源:devblogs.microsoft.com - Microsoft Agent Framework - Building Blocks for AI Part 3
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。