news 2026/4/16 15:43:44

使用Microsoft Agent Framework构建可组合的多Agent系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用Microsoft Agent Framework构建可组合的多Agent系统

在构建复杂的 AI 应用时,我们经常会遇到一个难题:如何让一个通用 Agent 调用另一个专业 Agent?

单一 Agent 往往无法胜任所有工作,我们需要明确的“分工”。本文通过 Microsoft Agent Framework 的一个示例,演示如何将一个 Agent 封装成标准的“函数工具”,供另一个 Agent 按需调用。

这种模式通常被称为 Agent-as-a-Function,它显著增强了多 Agent 系统的可组合性。

场景设定

我们构建一个“套娃”式的多 Agent 场景:

  • 底层工具:一个查询天气的 C# 本地函数

  • 子 Agent(WeatherAgent):天气专家,持有底层工具

  • 主 Agent(Main Agent):负责用户交互,并且必须只用日语输出结果

  • 任务:用户用中文提问,主 Agent 调用子 Agent 获取信息后,根据自身指令翻译并用日语回答

核心代码解析

1. 准备工作与本地函数

首先配置 Azure OpenAI 连接,并定义一个最基础的 GetWeather 本地函数。这里使用 [Description] 特性,是为了让 LLM 能更准确理解工具的用途与参数语义。

为了突出 Agent 组合模式,这里使用了简化的本地函数;在真实项目中,可以替换为 API / MCP / 插件调用。

var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT"); var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini"; [Description("获取指定地点的天气信息。")] static string GetWeather([Description("要获取天气的地点。")] string location) => $"{location} 多云,最高气温 15°C。";

2. 创建子 Agent:WeatherAgent(天气专家)

接下来创建一个专注于天气问题的专家 Agent,并将 GetWeather 注册为它的工具能力。

此时,weatherAgent 仍然只是一个独立 Agent,尚未作为函数对外暴露。

AIAgent weatherAgent = new AzureOpenAIClient(new Uri(endpoint), new AzureCliCredential()) .GetChatClient(deploymentName) .CreateAIAgent( name: "WeatherAgent", instructions: "你专注于回答天气相关的问题,必要时调用工具获取信息后再回答。", description: "一个提供天气信息的智能体。", tools: [AIFunctionFactory.Create(GetWeather)] );

3. 关键一步:将 Agent 封装为函数(Agent-as-a-Function)

核心在于.AsAIFunction()

它并不是一次简单的函数调用,而是一次完整的 Agent 推理过程,只是对外表现为一个标准的 AI Function 契约。

AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new AzureCliCredential()) .GetChatClient(deploymentName) .CreateAIAgent( instructions: """ 你是一个助手,必须只用日语回答。 工具返回的内容可能是中文,请将其翻译成自然的日语后再输出。 不要输出中文或英文。 """, tools: [weatherAgent.AsAIFunction()] );

对主 Agent 来说,WeatherAgent 就像一个普通工具函数,但其内部实际上包含完整的 Prompt、推理和工具调用逻辑。

4. 运行效果与调用流程

Console.WriteLine(await agent.RunAsync("东京的天气如何?"));

一次典型的执行过程如下:

  1. 用户用中文提问

  2. 主 Agent 在推理过程中判断需要天气信息,并选择调用 WeatherAgent 工具

  3. 子 Agent 调用GetWeather("东京")获取结果

  4. 子 Agent 返回天气信息

  5. 主 Agent 根据自身 System Prompt,将结果翻译并以日语输出

最终输出示例:

東京の天気は曇りで、最高気温は15℃です。

在真实系统中,超时控制、调用深度限制、错误回传与重试等逻辑,通常放在主 Agent 的工具调用包装层(tool policy / middleware)中统一处理,以避免多 Agent 调用链失控或变成黑盒。

为什么这种模式很重要?

  • 封装与复用:复杂能力(如 SQL Agent、Code Agent)可以整体封装为工具

  • 职责分离:主 Agent 负责交互与语言控制,子 Agent 专注垂直领域推理

  • 可组合扩展:作为工具的 Agent 内部仍可调用其他 Agent,形成树状结构

  • 轻量 vs 编排器:当只需要能力组合时,Agent-as-a-Function 更轻量;当需要复杂路由与多步工作流时,再引入 orchestrator 更合适

总结

AsAIFunction()本质上是一座桥梁:它用 Function 作为契约,把一个完整的 Agent 能力模块暴露给其他 Agent 使用。

通过这种方式,我们不再构建一个全知全能的巨型 Brain,而是构建一组可组合、可复用、职责清晰的专家团队。

如果你正在使用 Microsoft Agent Framework,不妨尝试把你的通用能力抽取出来,封装成 Agent Tool,让系统能力真正“模块化”。

源代码地址

https://github.com/bingbing-gui/aspnetcore-developer/tree/master/src/09-AI-Agent/Agent-Framework/12-Agent-As-Function-Tool

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:47:02

.NET 10 + YOLO 的多模型视觉平台:检测、分割、OBB、姿态全支持

前言基于 .NET 10 的多模型智能识别平台。高效 灵活 易部署项目简介在 AI 应用落地过程中,模型管理与多任务识别一直是开发者的痛点。不管是目标检测、图像分类、实例分割、姿态估计,还是定向检测(OBB),往往需要同时…

作者头像 李华
网站建设 2026/4/16 12:46:23

一个 C# 实现的电力系统,可作主站或终端!

致力于挖掘功能强大、性能优越、创新前沿且简单易用的 C#/.NET 开源框架、项目、类库与工具。助力 .NET 开发者轻松解锁并运用这些实用的宝藏资源,提升开发效率与创新能力!项目概述iec104 是一个 C# 实现的电力系统,可作主站或终端&#xff0…

作者头像 李华
网站建设 2026/4/16 9:22:09

中专数控专业必拿的7大证书

数控专业作为制造业的核心技术领域,证书是提升职业竞争力的关键。以下是中专数控专业学生和从业者必拿的7大证书,涵盖技术认证、行业资质及职场转型方向,并附CDA数据分析师证书的跨领域价值分析。1. 数控车工/铣工职业资格证书国家职业资格认…

作者头像 李华
网站建设 2026/4/12 15:24:35

外贸人一定要有自己的网站?这篇把建站到获客一次讲清楚

做外贸这么多年,我听过一句老话,特别真实:“没有网站的外贸人,就像没有门店的生意人。”你可能也遇到过这些情况👇客户在 Google 上搜你公司,什么都找不到发了名片、邮箱、产品表,客户还是不放心…

作者头像 李华
网站建设 2026/4/16 9:24:50

基于微信小程序的教师课堂教学辅助管理系统 人脸识别签到

文章目录具体实现截图主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 本系统(程序源码数据库调试部署讲解)带文档1万…

作者头像 李华