如果你正準備在 .NET 專案中導入 AI 功能,你可能會發現最頭痛的不是選擇哪個模型,而是如何處理各個組件「接在一起」。通常你需要處理不同的模型 API、向量資料庫、資料清洗管線以及 Agent 框架,每個東西的 SDK 都不一樣,一旦升級版本就可能導致程式碼大改。
為了解決這個問題,微軟推出了一套可組合(Composable)的 AI 技術棧。我們可以透過一個實際的案例:一個名為 ConferencePulse 的會議助手應用程式,來理解這套架構是如何運作的。這個應用程式能根據會議內容自動生成投票、即時回答觀眾問題(RAG)、分析參與數據並在結尾生成會議總結。
對於 Junior 工程師來說,最核心的概念是:不要讓你的業務邏輯直接依賴於特定的 AI 供應商,而應該依賴於一套標準的抽象介面。
統一的 AI 進入點:Microsoft.Extensions.AI
在過去,如果你想從 Azure OpenAI 換成 Ollama(本地模型),你得修改所有呼叫 API 的程式碼。現在,透過 Microsoft.Extensions.AI 提供的 IChatClient 介面,你可以將 AI 供應商視為一種「服務」。
這套設計採用了類似 ASP.NET Core 中間件(Middleware)的模式。你可以定義一個管道,在其中加入日誌記錄(Logging)、追蹤(OpenTelemetry)或自動處理工具呼叫(Function Invocation)。對開發者而言,無論底層是哪個模型,你在程式碼中看到的永遠是 IChatClient。這樣做的好處是,當你想要嘗試新模型或切換供應商時,只需要修改註冊服務的那幾行設定,而不需要改動整個應用的邏輯。
知識層的建構:DataIngestion 與 VectorData
AI 如果沒有上下文(Context),就只能胡說八道。要讓 AI 懂你的業務資料,通常需要 RAG(檢索增強生成)流程。這涉及兩個步驟:將資料餵進去(Ingestion)以及從中檢索(Retrieval)。
首先是 Microsoft.Extensions.DataIngestion。它提供了一套管線,讓你可以將文件(例如 GitHub 的 Markdown 檔)讀入、切片(Chunking,將長文切成 AI 能處理的小塊)、富化(Enrichment,利用 AI 為每一塊內容生成摘要或關鍵字),最後寫入儲存空間。
接著是 Microsoft.Extensions.VectorData。它就像是 AI 界的 Entity Framework Core。它提供了一個統一的介面來操作向量資料庫(Vector Store),無論你後端是用 Qdrant 還是 Azure AI Search,查詢語法都是一樣的。
這意味著你可以靈活更換儲存方案,而不會被綁死在單一廠商的 SDK 上。
擴展 AI 能力:MCP 與工具呼叫
當 AI 需要執行特定動作(例如:查詢目前會議主題、建立投票)時,我們需要給它「工具」。
對於簡單的需求,直接使用 IChatClient 的工具呼叫功能即可。你只需要定義好 C# 方法,將其封裝成 AITool,AI 就會根據對話內容決定何時呼叫這些方法。
但如果需要跨系統獲取資訊,就輪到 Model Context Protocol (MCP) 出場了。MCP 是一種標準協議,讓 AI 應用能以統一方式連接外部上下文提供者。在 ConferencePulse 中,它扮演了兩個角色: 第一,作為消費者,應用程式透過 MCP 連接到 Microsoft Learn 或 DeepWiki 的伺服器,獲取最新的技術文檔。 第二,作為提供者,應用程式本身也可以變成一個 MCP 伺服器,讓外部工具(如 GitHub Copilot 或 Claude)能反過來查詢會議的即時狀態。
複雜任務的協作:Microsoft Agent Framework
很多開發者一聽到 AI 就想用 Agent(代理人),但其實並非所有場景都需要。
如果只是單次問答或簡單的工具呼叫,用 IChatClient 就夠了。但當你遇到需要多個專家協作的複雜任務時,例如「會議總結」:你需要一個分析投票的專家、一個分析問題的專家,以及一個負責綜合所有結果的總結專家。
這時就需要 Microsoft Agent Framework。它允許你定義具有不同指令(Instructions)和權限(Scoped Tools)的 Agent,並透過工作流(Workflow)來協調它們。例如,先讓三個分析 Agent 同時執行(Fan-out),最後將結果匯總給總結 Agent(Fan-in)。
總結:如何選擇技術層級
在實作 AI 功能時,建議遵循「由簡入繁」的原則: 單純的內容生成 $\rightarrow$ 使用 IChatClient 單次呼叫。 需要操作資料或執行動作 $\rightarrow$ 使用 IChatClient 搭配 Tools。 需要跨系統獲取標準化外部資訊 $\rightarrow$ 導入 MCP。 需要多個 AI 角色協作且有複雜流程 $\rightarrow$ 使用 Microsoft Agent Framework。
透過這套可組合的技術棧,.NET 開發者可以將 AI 能力模組化。模型會演進,資料庫會更換,但只要你的應用程式建立在這些穩定抽象層之上,維護成本將大幅降低。
來源:devblogs.microsoft.com - Building an AI-Powered Conference App with .NET's Composable AI Stack
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。