拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Microsoft Agent Framework 中 Agent 的架构形态

Microsoft Agent Framework 中 Agent 的架构形态 目录1. 应用托管型 AgentApplication-owned Agent可用的模型提供商不同 Model Provider 面向 Microsoft Agent Framework 提供的能力.NET SDK 和 Endpoint2. 自定义实现型 AgentCustom Agent引用 Abstractions 包自定义 AIAgent3. 远程托管型 AgentRemote / Managed AgentMicrosoft FoundryGitHub CopilotCopilot StudioAnthropic ClaudeA2A总结在使用 Microsoft Agent Framework 时会接触到不同类型的 Agent。它们的创建方式、运行位置以及管理方式都有所不同。按照微软官方文档的划分可以主要从下面三类来理解应用托管型 AgentApplication-owned Agent自定义实现型 AgentCustom Agent远程托管型 AgentRemote / Managed Agent今天我们来解剖一下这三种 Agent 的类型。1. 应用托管型 AgentApplication-owned Agent我们首先来介绍第一种。微软官方的命名是 Model providersApplication-owned Agent 这个名字是我根据 Agent 的职责划分命名的一个名字你可以理解为他们两者是等同的。与此同时这也是我们用得最多的一种形态。微软官方在 Model Providers 文档中是这样描述这种职责关系的模型提供商为 Agent 提供推理客户端。你的应用负责 Agent 定义、Instructions、Tools、Middleware 和 Session Policy而 Model Provider 负责模型推理以及 Provider 托管的相关能力。简单来说Agent Runtime 运行在自己的应用中Agent 的定义和执行流程由应用控制Model Provider 主要负责提供模型推理能力。在 Agent Framework 中ChatClientAgent就是这种开发方式中非常重要的一个 Agent 实现。它的基本结构是ChatClientAgent使用IChatClient与底层模型推理服务进行交互。因此Agent 和 Model Provider 实际上是两个不同的概念ChatClientAgent负责 Agent 的执行与运行管理Model Provider负责提供模型推理客户端以及 Provider 托管的相关能力。那么问题来了ChatClientAgent可以使用哪些模型服务这里并不仅仅只有 Azure。Agent Framework 的ChatClientAgent建立在Microsoft.Extensions.AI.IChatClient抽象之上。任何能够提供Microsoft.Extensions.AI.IChatClient实现的推理服务都可以作为ChatClientAgent的后端模型服务。可用的模型提供商不同 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 服务或模型服务Agent Framework 在 .NET 中需要使用 对应的 Client SDK、NuGet Package 以及 Endpoint。到这里第一种 Agent 的开发方式基本就清楚了……2. 自定义实现型 AgentCustom Agent大多数情况下我们可以直接使用 Agent Framework 已经提供的ChatClientAgent。但是如果ChatClientAgent的执行机制无法满足业务需求需要自己控制 Agent 的核心执行逻辑Agent Framework 还提供了更底层的扩展方式直接继承AIAgent实现自己的 Agent。Microsoft Agent Framework 支持通过继承AIAgent类并实现所需的方法来构建 Custom Agent。这里需要注意Custom Agent 并不是和 Application-owned Agent 完全独立的另一套运行模式。Custom Agent 本质上仍然可以运行在自己的应用中只不过 Agent 的核心执行逻辑由开发者自己实现。简单来说当现成的ChatClientAgent无法满足业务场景需要自己控制 Session、消息处理、执行流程或响应生成逻辑时可以考虑实现 Custom Agent。引用 Abstractions 包自定义 Agent 需要引用dotnet add package Microsoft.Agents.AI.Abstractions自定义 AIAgentCustom Agent 的核心是继承 AIAgent并实现必要的 Session 管理和 Agent 执行方法。Session 可以基于 InMemoryAgentSession 实现但并不限定只能使用这一种 Session。下面先通过一个简单骨架看看 AIAgent 的主要扩展点internal sealedclassMyAgent : AIAgent{ // 1. 创建 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 非流式执行 protected override TaskAgentResponse RunCoreAsync( IEnumerableChatMessage messages, AgentSession? session null, AgentRunOptions? options null, CancellationToken cancellationToken default) { thrownew NotImplementedException(); } // 5. Agent 流式执行 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 主要需要处理两部分内容。第一部分是 Session 管理CreateSessionCoreAsyncSerializeSessionCoreAsyncDeserializeSessionCoreAsync第二部分是 Agent 执行RunCoreAsyncRunCoreStreamingAsync实际上Agent Framework 自带的 ChatClientAgent 本身也是 AIAgent 的一个具体实现。Microsoft 已经在其中实现了 Session 管理、非流式执行、流式执行以及与 IChatClient 交互等逻辑。因此大多数常规的模型 Agent 场景直接使用 ChatClientAgent 即可3. 远程托管型 AgentRemote / Managed Agent前面两种方式主要讨论的是 Agent Framework 应用侧的 Agent 实现。除此之外Agent Framework 还可以接入已经运行在远程服务中的 Agent。微软将这一类集成归到 Agent Services。Agent Services 提供的是远程或托管的 Agent Runtime而不仅仅是模型推理能力。远程服务可以负责 Agent Definition、Hosted Tools、Permissions、Session 或 Execution Lifecycle这也是远程托管型 AgentRemote / Managed Agent和 应用托管型 AgentApplication-owned Agent 一个很重要的区别应用托管型 AgentApplication-owned Agent 主要为应用侧 Agent 提供模型推理客户端 远程托管型 AgentRemote / Managed Agent则提供远程或托管的 Agent RuntimeMicrosoft FoundryMicrosoft Agent Framework 提供了对 Microsoft Foundry Agent Service 的集成。应用可以通过 Agent Framework 接入运行在 Microsoft Foundry 中的 Prompt Agent 或 Hosted Agent。Agent 的定义、版本、Hosted Tools、Conversation 以及服务端执行可以由 Microsoft Foundry 负责。GitHub CopilotAgent Framework 可以接入 GitHub Copilot 的 Coding Agent Runtime。Agent Runtime、Session、权限以及 Shell、File、URL 等内置能力和 MCP 连接由 GitHub Copilot 侧负责Agent Framework 则通过统一接口与这个远程 Agent Runtime 进行交互。目前该集成支持 C#、Python 和 Go。Copilot StudioAgent Framework 可以接入已经发布到 Copilot Studio 中的 Agent。Agent 的 Topics、Knowledge、Actions、Plugins 以及远程执行由 Copilot Studio 负责应用通过 Agent Framework 与这个远程 Agent 进行交互。目前该集成支持 C# 和 Python。Anthropic ClaudeAgent Framework 可以接入由 Claude Agent SDK 提供的 Agent Runtime。Agent Runtime、Session、权限、内置 Tools 和 MCP 连接由 Claude Agent SDK 侧负责。目前 Agent Framework 的这项 Agent Service 集成支持 Python。A2AAgent Framework 还可以通过 A2A 接入符合 A2A 规范的远程 Agent。远程 Agent 负责自己的 Agent Definition、Tools、Session、Task 和 ExecutionAgent Framework 通过 A2A 与其进行交互。目前该集成支持 C#、Python 和 Go。总结理解 Microsoft Agent Framework 中的 Agent可以先抓住一个关键问题Agent Runtime 到底运行在哪里谁负责 Agent 的执行如果 Agent 运行在自己的应用中通常可以直接使用 ChatClientAgent通过 IChatClient 接入不同的 Model Provider。如果现成的 ChatClientAgent 无法满足需求需要自己控制 Session、执行流程或响应生成逻辑可以继承 AIAgent 实现 Custom Agent。如果 Agent 已经运行在 Microsoft Foundry、GitHub Copilot、Copilot Studio、Claude Agent SDK 或其他支持的远程环境中则可以通过 Agent Framework 的 Agent Services 集成进行调用。把 Agent 本身、Model Provider 和 Agent Service 这三个概念分开之后Microsoft Agent Framework 的整体结构就比较容易理解了。引入地址
返回列表