用 Microsoft Agent Framework 构建 SubAgent(Multi-Agent)

[复制链接]
发表于 2026-3-26 20:45:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本文演示怎样用 Microsoft Agent Framework 用 Executor + Workflow(DAG)模式实现 SubAgent(子署理)架构。通过示例代码(来自项目的 txt)展示并发 Fan‑Out/Fan‑In 的实现、消息路由与聚合计谋,末了讨论最佳实践与权衡。
假定读者品级: 认识 C#、异步编程与根本的 LLM/Agent 概念(如果不熟,先看根本 LLM/Agent 入门)。
为什么要用 SubAgents?

  • 将复杂使命拆成职责单一的模块(职责分离)
  • 更易观测、测试与演进(可插拔节点)
  • 支持并行/流水线处理惩罚,便于扩展与优化
焦点思绪(扼要)

  • Planner/Orchestrator 负责使命拆解与路由
  • 每个 SubAgent 为专责 Executor(或 Tool)
  • 用 Workflow/DAG 串联节点:支持 Fan‑Out(并发)与 Fan‑In(聚合)
  • 明确上下文与影象隔离,防止“串味”
示例架构

  • 节点:ConcurrentStartExecutor(广播)、ChatClientAgent(专业子署理)、ConcurrentAggregationExecutor(聚合)
  • 流程:Start → Fan‑Out 到多个 Agent → Agent 各自处理惩罚 → Fan‑In 到 Aggregation → 输出结果
示例代码
初始化 OpenAI client & 两个 ChatClientAgent
  1. OpenAIClient client = new OpenAIClient(Environment.GetEnvironmentVariable("OPENAI_API_KEY")!);
  2. var chatClient = client.GetChatClient("gpt-4o-mini").AsIChatClient();
  3. ChatClientAgent physicist = new(
  4.     chatClient,
  5.     name: "Physicist",
  6.     instructions: "You are an expert in physics. You answer questions from a physics perspective."
  7. );
  8. ChatClientAgent chemist = new(
  9.     chatClient,
  10.     name: "Chemist",
  11.     instructions: "You are an expert in chemistry. You answer questions from a chemistry perspective."
  12. );
复制代码
构建 Workflow
  1. var startExecutor = new ConcurrentStartExecutor();
  2. var aggregationExecutor = new ConcurrentAggregationExecutor();
  3. var workflow = new WorkflowBuilder(startExecutor)
  4.     .AddFanOutEdge(startExecutor, new[] { physicist, chemist })
  5.     .AddFanInBarrierEdge(new[] { physicist, chemist }, aggregationExecutor)
  6.     .WithOutputFrom(aggregationExecutor)
  7.     .Build();
复制代码
流式实行并监听输出
  1. await using StreamingRun run = await InProcessExecution.RunStreamingAsync(workflow, input: "What is temperature?");
  2. await foreach (WorkflowEvent evt in run.WatchStreamAsync())
  3. {
  4.     if (evt is WorkflowOutputEvent output)
  5.     {
  6.         Console.WriteLine($"Workflow completed with results:\n{output.Data}");
  7.     }
  8. }
复制代码
ConcurrentStartExecutor(广播用户消息,再发 TurnToken 启动子署理)
  1. [MessageHandler]
  2. public async ValueTask HandleAsync(string message, IWorkflowContext context, CancellationToken cancellationToken = default)
  3. {
  4.     await context.SendMessageAsync(new ChatMessage(ChatRole.User, message), cancellationToken: cancellationToken);
  5.     await context.SendMessageAsync(new TurnToken(emitEvents: true), cancellationToken: cancellationToken);
  6. }
  7. protected override ProtocolBuilder ConfigureProtocol(ProtocolBuilder protocolBuilder)
  8. {
  9.     return protocolBuilder.ConfigureRoutes(r => r.AddHandler<string>(this.HandleAsync))
  10.                           .SendsMessage<ChatMessage>()
  11.                           .SendsMessage<TurnToken>();
  12. }
复制代码
ConcurrentAggregationExecutor(吸收各 Agent 消息并在满意条件时产出聚合结果)
  1. public override async ValueTask HandleAsync(List<ChatMessage> message, IWorkflowContext context, CancellationToken cancellationToken = default)
  2. {
  3.     this._messages.AddRange(message);
  4.     if (this._messages.Count == 3) // 示例:等待 3 条回复再聚合
  5.     {
  6.         var formattedMessages = string.Join(Environment.NewLine, this._messages.Select(m => $"{m.AuthorName}: {m.Text}"));
  7.         await context.YieldOutputAsync(formattedMessages, cancellationToken);
  8.     }
  9. }
复制代码
渐渐阐明(快速教程风格)

  • 准备

    • 环境:.NET 版本与 Microsoft Agent Framework SDK(按项目要求 pin 版本
    • 设置:设置 OPENAI_API_KEY 环境变量

  • 界说 Agents / Executors

    • 每个子署理用一类 Executor 或 ChatClientAgent 实例体现
    • 明确每个署理的 instructions(prompt)与权限(可调用哪些工具)

  • 构建 Workflow(DAG)

    • 先构建出发点 Executor(start),再 AddNode / AddEdge 或用 Fan‑Out/Fan‑In helper
    • 聚合节点负责归并与输出(并可实现辩论办理定略)

  • 运行与监控监控

    • 支持流式实行(StreamingRun)便于实时观察中央结果
    • 在聚合节点参加超时、重试或部门可用逻辑

  • 测试

    • 单元测试 Executors 的消息处理惩罚逻辑
    • 集成测试覆盖完备 Workflow 路径

最佳实践与权衡

  • 保举:Workflow/DAG 模式(可观测可观测、恰当生产)
  • 必须:上下文隔离(克制 prompt 串味)、清楚的路由与错误界限
  • 权衡:

    • 更细颗粒的 SubAgents → 更高可组合性,但更复杂的调理/监控监控
    • Tool‑based 子署理更简朴但失去自治本事

  • 安全:控制外部工具调用权限,防止子署理滥用
常见坑

  • 把全部逻辑塞进单个 Agent(难以维护)
  • 忽视失败场景(网络、LLM 超时、部门结果不可用)
  • 不做上下文界限与隐私隔离导致数据泄漏或“串味”
结论 & 下一步

  • SubAgent 模式恰当将复杂使命分解为可管理、可观测可观测的模块。对于生产级体系保举用 Workflow/DAG + Executor 模式。
参考与进一步阅读

  • Microsoft Agent Framework 文档(请参考 SDK 官方文档

免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金.
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表