形態(tài))
目錄1. 應(yīng)用托管型 AgentApplication-owned Agent可用的模型提供商不同 Model Provider 面向 Microsoft Agent Framework 提供的能力.NET SDK 和 Endpoint2. 自定義實現(xiàn)型 AgentCustom Agent引用 Abstractions 包自定義 AIAgent3. 遠程托管型 AgentRemote / Managed AgentMicrosoft FoundryGitHub CopilotCopilot StudioAnthropic ClaudeA2A總結(jié)在使用 Microsoft Agent Framework 時會接觸到不同類型的 Agent。它們的創(chuàng)建方式、運行位置以及管理方式都有所不同。按照微軟官方文檔的劃分可以主要從下面三類來理解應(yīng)用托管型 AgentApplication-owned Agent自定義實現(xiàn)型 AgentCustom Agent遠程托管型 AgentRemote / Managed Agent今天我們來解剖一下這三種 Agent 的類型。1. 應(yīng)用托管型 AgentApplication-owned Agent我們首先來介紹第一種。微軟官方的命名是 Model providersApplication-owned Agent 這個名字是我根據(jù) Agent 的職責劃分命名的一個名字你可以理解為他們兩者是等同的。與此同時這也是我們用得最多的一種形態(tài)。微軟官方在 Model Providers 文檔中是這樣描述這種職責關(guān)系的模型提供商為 Agent 提供推理客戶端。你的應(yīng)用負責 Agent 定義、Instructions、Tools、Middleware 和 Session Policy而 Model Provider 負責模型推理以及 Provider 托管的相關(guān)能力。簡單來說Agent Runtime 運行在自己的應(yīng)用中Agent 的定義和執(zhí)行流程由應(yīng)用控制Model Provider 主要負責提供模型推理能力。在 Agent Framework 中ChatClientAgent就是這種開發(fā)方式中非常重要的一個 Agent 實現(xiàn)。它的基本結(jié)構(gòu)是ChatClientAgent使用IChatClient與底層模型推理服務(wù)進行交互。因此Agent 和 Model Provider 實際上是兩個不同的概念ChatClientAgent負責 Agent 的執(zhí)行與運行管理Model Provider負責提供模型推理客戶端以及 Provider 托管的相關(guān)能力。那么問題來了ChatClientAgent可以使用哪些模型服務(wù)這里并不僅僅只有 Azure。Agent Framework 的ChatClientAgent建立在Microsoft.Extensions.AI.IChatClient抽象之上。任何能夠提供Microsoft.Extensions.AI.IChatClient實現(xiàn)的推理服務(wù)都可以作為ChatClientAgent的后端模型服務(wù)??捎玫哪P吞峁┥滩煌?Model Provider 面向 Microsoft Agent Framework 提供的能力不同 Model Provider 面向 Agent Framework 暴露或提供的能力并不完全相同。除了基本的模型推理能力之外一些 Provider 還可以提供 Function Tools、 Structured Outputs、Code Interpreter、File Search、MCP Tools、 Background Responses 等能力。.NET SDK 和 Endpoint針對不同的 AI 服務(wù)或模型服務(wù)Agent Framework 在 .NET 中需要使用 對應(yīng)的 Client SDK、NuGet Package 以及 Endpoint。到這里第一種 Agent 的開發(fā)方式基本就清楚了……2. 自定義實現(xiàn)型 AgentCustom Agent大多數(shù)情況下我們可以直接使用 Agent Framework 已經(jīng)提供的ChatClientAgent。但是如果ChatClientAgent的執(zhí)行機制無法滿足業(yè)務(wù)需求需要自己控制 Agent 的核心執(zhí)行邏輯Agent Framework 還提供了更底層的擴展方式直接繼承AIAgent實現(xiàn)自己的 Agent。Microsoft Agent Framework 支持通過繼承AIAgent類并實現(xiàn)所需的方法來構(gòu)建 Custom Agent。這里需要注意Custom Agent 并不是和 Application-owned Agent 完全獨立的另一套運行模式。Custom Agent 本質(zhì)上仍然可以運行在自己的應(yīng)用中只不過 Agent 的核心執(zhí)行邏輯由開發(fā)者自己實現(xiàn)。簡單來說當現(xiàn)成的ChatClientAgent無法滿足業(yè)務(wù)場景需要自己控制 Session、消息處理、執(zhí)行流程或響應(yīng)生成邏輯時可以考慮實現(xiàn) Custom Agent。引用 Abstractions 包自定義 Agent 需要引用dotnet add package Microsoft.Agents.AI.Abstractions自定義 AIAgentCustom Agent 的核心是繼承 AIAgent并實現(xiàn)必要的 Session 管理和 Agent 執(zhí)行方法。Session 可以基于 InMemoryAgentSession 實現(xiàn)但并不限定只能使用這一種 Session。下面先通過一個簡單骨架看看 AIAgent 的主要擴展點internal sealedclassMyAgent : AIAgent{ // 1. 創(chuàng)建 Session protected override ValueTaskAgentSession CreateSessionCoreAsync( CancellationToken cancellationToken default) { thrownew NotImplementedException(); } // 2. Session 序列化 protected override ValueTaskJsonElement SerializeSessionCoreAsync( AgentSession session, JsonSerializerOptions? jsonSerializerOptions null, CancellationToken cancellationToken default) { thrownew NotImplementedException(); } // 3. Session 反序列化 protected override ValueTaskAgentSession DeserializeSessionCoreAsync( JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions null, CancellationToken cancellationToken default) { thrownew NotImplementedException(); } // 4. Agent 非流式執(zhí)行 protected override TaskAgentResponse RunCoreAsync( IEnumerableChatMessage messages, AgentSession? session null, AgentRunOptions? options null, CancellationToken cancellationToken default) { thrownew NotImplementedException(); } // 5. Agent 流式執(zhí)行 protected override async IAsyncEnumerableAgentResponseUpdate RunCoreStreamingAsync( IEnumerableChatMessage messages, AgentSession? session null, AgentRunOptions? options null, [EnumeratorCancellation] CancellationToken cancellationToken default) { thrownew NotImplementedException();#pragma warning disable CS0162 yieldbreak;#pragma warning restore CS0162 }}從這個骨架可以看到自定義 AIAgent 主要需要處理兩部分內(nèi)容。第一部分是 Session 管理CreateSessionCoreAsyncSerializeSessionCoreAsyncDeserializeSessionCoreAsync第二部分是 Agent 執(zhí)行RunCoreAsyncRunCoreStreamingAsync實際上Agent Framework 自帶的 ChatClientAgent 本身也是 AIAgent 的一個具體實現(xiàn)。Microsoft 已經(jīng)在其中實現(xiàn)了 Session 管理、非流式執(zhí)行、流式執(zhí)行以及與 IChatClient 交互等邏輯。因此大多數(shù)常規(guī)的模型 Agent 場景直接使用 ChatClientAgent 即可3. 遠程托管型 AgentRemote / Managed Agent前面兩種方式主要討論的是 Agent Framework 應(yīng)用側(cè)的 Agent 實現(xiàn)。除此之外Agent Framework 還可以接入已經(jīng)運行在遠程服務(wù)中的 Agent。微軟將這一類集成歸到 Agent Services。Agent Services 提供的是遠程或托管的 Agent Runtime而不僅僅是模型推理能力。遠程服務(wù)可以負責 Agent Definition、Hosted Tools、Permissions、Session 或 Execution Lifecycle這也是遠程托管型 AgentRemote / Managed Agent和 應(yīng)用托管型 AgentApplication-owned Agent 一個很重要的區(qū)別應(yīng)用托管型 AgentApplication-owned Agent 主要為應(yīng)用側(cè) Agent 提供模型推理客戶端 遠程托管型 AgentRemote / Managed Agent則提供遠程或托管的 Agent RuntimeMicrosoft FoundryMicrosoft Agent Framework 提供了對 Microsoft Foundry Agent Service 的集成。應(yīng)用可以通過 Agent Framework 接入運行在 Microsoft Foundry 中的 Prompt Agent 或 Hosted Agent。Agent 的定義、版本、Hosted Tools、Conversation 以及服務(wù)端執(zhí)行可以由 Microsoft Foundry 負責。GitHub CopilotAgent Framework 可以接入 GitHub Copilot 的 Coding Agent Runtime。Agent Runtime、Session、權(quán)限以及 Shell、File、URL 等內(nèi)置能力和 MCP 連接由 GitHub Copilot 側(cè)負責Agent Framework 則通過統(tǒng)一接口與這個遠程 Agent Runtime 進行交互。目前該集成支持 C#、Python 和 Go。Copilot StudioAgent Framework 可以接入已經(jīng)發(fā)布到 Copilot Studio 中的 Agent。Agent 的 Topics、Knowledge、Actions、Plugins 以及遠程執(zhí)行由 Copilot Studio 負責應(yīng)用通過 Agent Framework 與這個遠程 Agent 進行交互。目前該集成支持 C# 和 Python。Anthropic ClaudeAgent Framework 可以接入由 Claude Agent SDK 提供的 Agent Runtime。Agent Runtime、Session、權(quán)限、內(nèi)置 Tools 和 MCP 連接由 Claude Agent SDK 側(cè)負責。目前 Agent Framework 的這項 Agent Service 集成支持 Python。A2AAgent Framework 還可以通過 A2A 接入符合 A2A 規(guī)范的遠程 Agent。遠程 Agent 負責自己的 Agent Definition、Tools、Session、Task 和 ExecutionAgent Framework 通過 A2A 與其進行交互。目前該集成支持 C#、Python 和 Go??偨Y(jié)理解 Microsoft Agent Framework 中的 Agent可以先抓住一個關(guān)鍵問題Agent Runtime 到底運行在哪里誰負責 Agent 的執(zhí)行如果 Agent 運行在自己的應(yīng)用中通??梢灾苯邮褂?ChatClientAgent通過 IChatClient 接入不同的 Model Provider。如果現(xiàn)成的 ChatClientAgent 無法滿足需求需要自己控制 Session、執(zhí)行流程或響應(yīng)生成邏輯可以繼承 AIAgent 實現(xiàn) Custom Agent。如果 Agent 已經(jīng)運行在 Microsoft Foundry、GitHub Copilot、Copilot Studio、Claude Agent SDK 或其他支持的遠程環(huán)境中則可以通過 Agent Framework 的 Agent Services 集成進行調(diào)用。把 Agent 本身、Model Provider 和 Agent Service 這三個概念分開之后Microsoft Agent Framework 的整體結(jié)構(gòu)就比較容易理解了。引入地址