MAF快速入门(13)常见智能体编排模式
<p><span><span>大家好,我是Edison。</span></span></p><p><span><span>最近我一直在跟着圣杰的《<span>.NET+AI智能体开发进阶</span><span>》课程学习MAF开发多智能体工作流,我强烈推荐你也上车跟我一起出发!</span></span></span></p>
<p><span><span>上一篇</span><span>,我们学习了MAF中如何进行子工作流<span>。本篇,我们来了解下在MAF中如何快速实现一些常见的智能体编排模式。</span></span></span></p>
<h1><span><span><span><strong>1 智能体编排模式介绍</strong></span></span></span></h1>
<p>传统的单Agent系统在处理复杂多面任务的能力方面受到较多限制,因此我们会有多Agent编排协作完成任务的需求。</p>
<p><img src="https://img2024.cnblogs.com/blog/381412/202601/381412-20260124091613961-245103765.png" alt="image" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>事实上,在构建AI应用解决业务问题时,单个Agent往往无法胜任所有任务,常常需要我们将多个Agent组合起来系统工作。而这种组合与协调的方式,就被称为 <strong>Agent Orchestration</strong> 即 Agent编排。</p>
<p>MAF支持多种多Agent编排流程模式,每个模式都针对不同的协作方案而设计。这些模式作为框架的一部分提供出来,我们可以自己扩展。</p>
<p><span data-pm-slice="0 0 []"><span><span>在MAF中,常见的Agent编排模式如下:</span></span></span></p>
<ul class="list-paddingleft-1">
<li><span data-pm-slice="0 0 []"><span><span>Sequential 顺序编排:<span>即各个Agent依次处理并传递给下一个Agent执行;</span></span></span></span></li>
<li><span data-pm-slice="0 0 []"><span><span>Concurrent 并发编排:<span>即多个Agent并行处理同一个任务,然后汇聚结果;</span></span></span></span></li>
<li><span data-pm-slice="0 0 []"><span><span>Handoffs 移交编排:<span>即每个Agent都可以将对话移交给另一个Agent,确保每个Agent处理任务的某个部分;</span></span></span></span></li>
<li><span data-pm-slice="0 0 []"><span><span>GroupChat 群聊编排:<span>即多个Agent加入了同一个微信群,通过群聊对话形成一些决策;</span></span></span></span></li>
</ul>
<p><span data-pm-slice="0 0 []"><span><span>对应到MAF中,<span><span>AgentWorkflowBuilder <span>类提供了这些编排模式的具体实现,我们开发者可以直接使用对应的接口即可快速完成有一次编排 而无需 自行实现Edge连接。</span></span></span></span></span></span></p>
<h1><strong><span>2 <strong><span data-pm-slice="1 1 ["para",{"tagName":"section","attributes":{"style":"letter-spacing: 0.578px;text-align: left;margin: 8px;","data-pm-slice":"6 3 []"},"namespaceURI":"http://www.w3.org/1999/xhtml"},"para",{"tagName":"p","attributes":{"style":"outline: 0px;visibility: visible;line-height: 1.75em;margin-top: 16px;margin-bottom: 16px;"},"namespaceURI":"http://www.w3.org/1999/xhtml"},"node",{"tagName":"span","attributes":{"style":"color: rgb(0, 179, 139);font-family: \"PingFang SC\", \"Lantinghei SC\", \"Microsoft Yahei\", \"Hiragino Sans GB\", \"Microsoft Sans Serif\", \"WenQuanYi Micro Hei\", Helvetica, sans-serif;"},"namespaceURI":"http://www.w3.org/1999/xhtml"},"node",{"tagName":"span","attributes":{"style":"letter-spacing: 0.544px;"},"namespaceURI":"http://www.w3.org/1999/xhtml"},"node",{"tagName":"strong","attributes":{},"namespaceURI":"http://www.w3.org/1999/xhtml"}]">智能体编排模式详解</span></strong></span></strong></h1>
<h3><strong><span><span>2.1 顺序编排</span></span></strong></h3>
<p data-pm-slice="0 0 []">在顺序编排模式中,各个Agent被组成一个流程,每个Agent都会处理任务,并将执行结果输出传递给下一个待执行的Agent。可以看出,对于每个基于上一步骤构建的工作流<span data-pm-slice="1 1 ["para",{"tagName":"section","attributes":{"style":"letter-spacing: 0.578px;text-align: left;"},"namespaceURI":"http://www.w3.org/1999/xhtml"},"para",{"tagName":"p","attributes":{"style":"line-height: 1.75em;margin: 8px;"},"namespaceURI":"http://www.w3.org/1999/xhtml"},"node",{"tagName":"strong","attributes":{},"namespaceURI":"http://www.w3.org/1999/xhtml"}]">(Workflow)来说,这是比较适合的模式。</span></p>
<p><img src="https://img2024.cnblogs.com/blog/381412/202601/381412-20260124091657384-365298595.png" alt="image" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>目前,像文档审阅、工作流、数据处理管道、多阶段推理等,是比较常见的应用场景。</p>
<p>下面的代码展示了在MAF中的顺序编排实现:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> analyst = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ChatClientAgent(...);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> writer = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ChatClientAgent(...);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> editor = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ChatClientAgent(...);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Build a Workflow</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> workflow =<span style="color: rgba(0, 0, 0, 1)"> AgentWorkflowBuilder.BuildSequential(
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">content-team-workflow</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Test the Workflow</span>
......</pre>
</div>
<p>可以看到,通过BuildSequential方法即可快速完成一次顺序编排。</p>
<h3><span><span>2.2 并发编排</span></span></h3>
<p>并发模式使用多个Agent并行处理同一个任务,每个Agent都可以独立处理输入,并收集并聚合结果。</p>
<p><img src="https://img2024.cnblogs.com/blog/381412/202601/381412-20260124194638071-182220484.png" alt="image" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>此模式比较适合多种观点或解决方案很有价值的场景,比如集思广益、群体推理以及其他投票系统。</p>
<p>下面的代码展示了在MAF中的代码实现:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Step1. Create Agents</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> sensitiveWordAgent = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ChatClientAgent(...);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> adDetectionAgent = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ChatClientAgent(...);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> sentimentAgent = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ChatClientAgent(...);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Step2. Build a Workflow</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> workflow =<span style="color: rgba(0, 0, 0, 1)"> AgentWorkflowBuilder.BuildConcurrent(
agents: </span><span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)">[] { sensitiveWordAgent, adDetectionAgent, sentimentAgent },
aggregator: auditAggregator
);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Step3. Test the workflow</span>
......</pre>
</div>
<h3><span data-pm-slice="1 1 ["para",{"tagName":"p","attributes":{"style":"outline: 0px;visibility: visible;line-height: 1.75em;margin-top: 16px;margin-bottom: 16px;"},"namespaceURI":"http://www.w3.org/1999/xhtml"}]"><span>2.3 移交编排</span></span></h3>
<p>在移交(也可以叫做交接)编排模式中,允许各个Agent根据上下文或用户请求相互转移控制权,每个Agent都可以通过适当的专业知识将对话“移交”给另一个Agent,确保每个Agent处理任务的某个指定部分。</p>
<p><img src="https://img2024.cnblogs.com/blog/381412/202601/381412-20260124194802065-1054226946.png" alt="image" width="707" height="556" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>这种模式非常适合于客户支持(客服)、专家系统或需要动态委派类型的任务场景。</p>
<p><span data-pm-slice="1 1 ["para",{"tagName":"section","attributes":{"style":"font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;text-transform: none;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-align: left;line-height: 1.75em;margin-bottom: 8px;margin-top: 8px;"},"namespaceURI":"http://www.w3.org/1999/xhtml"},"node",{"tagName":"strong","attributes":{},"namespaceURI":"http://www.w3.org/1999/xhtml"}]">下面的代码展示了在MAF的代码实现</span>:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Step1. Create Agents</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> triageAgent = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ChatClientAgent(...);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> historyTutor = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ChatClientAgent(...);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> mathTutor = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ChatClientAgent(...);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Step2. Build a Workflow</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> workflow =<span style="color: rgba(0, 0, 0, 1)"> AgentWorkflowBuilder.CreateHandoffBuilderWith(triageAgent)
.WithHandoffs(triageAgent, ) </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Triage can route to either specialist</span>
.WithHandoffs(, triageAgent) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Math or History tutor can return to triage</span>
<span style="color: rgba(0, 0, 0, 1)"> .Build();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Step3. Test the workflow</span>
.....</pre>
</div>
<h3 data-pm-slice="2 3 []"><span data-pm-slice="1 1 ["para",{"tagName":"p","attributes":{"style":"outline: 0px;visibility: visible;line-height: 1.75em;margin-top: 16px;margin-bottom: 16px;"},"namespaceURI":"http://www.w3.org/1999/xhtml"}]"><span>2.4 群聊编排</span></span></h3>
<p>在群聊编排模式中,各个Agent就像加入了一个微信群,由群管理员协调进行群聊对话。这种模式非常适合于模拟会议、辩论或协作解决问题的会议类型场景。</p>
<p>下图展示了一个讨论业务建议的用例,由一个Chat Manager负责主持对话,依次让三个参与对话的Agent进行建议发表。这个Chat Manager就像是群管理员,它不仅负责主持对话,也会在必要时引入人工干预。</p>
<p><img src="https://img2024.cnblogs.com/blog/381412/202601/381412-20260124194919639-675664209.png" alt="image" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p><span data-pm-slice="1 1 ["para",{"tagName":"section","attributes":{"style":"font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;text-transform: none;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-align: left;line-height: 1.75em;margin-bottom: 8px;margin-top: 8px;"},"namespaceURI":"http://www.w3.org/1999/xhtml"},"node",{"tagName":"strong","attributes":{},"namespaceURI":"http://www.w3.org/1999/xhtml"},"node",{"tagName":"strong","attributes":{},"namespaceURI":"http://www.w3.org/1999/xhtml"}]">下面的代码展示了在MAF的代码实现:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Step1. Create Agents</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> researchAgent = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ChatClientAgent(...);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> writerAgent = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ChatClientAgent(...);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> criticAgent = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ChatClientAgent(...);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Step2. Build a Workflow</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> workflow =<span style="color: rgba(0, 0, 0, 1)"> AgentWorkflowBuilder.CreateGroupChatBuilderWith(
agents </span>=> <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> RoundRobinGropuChatManager(agents))
.AddParticipants(researchAgent, writerAgent, criticAgent)
.Build();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Step3. Test the workflow</span>
.....</pre>
</div>
<h1><strong><span>3 小结</span></strong></h1>
<p>本文介绍了MAF中常见的Agent编排模式,并详细介绍了顺序编排、并发编排、移交编排 和 群聊编排 的适用场景 和 代码实现。</p>
<p>这几种模式的对比分析如下:</p>
<p><img src="https://img2024.cnblogs.com/blog/381412/202601/381412-20260124195004594-1977355623.png" alt="image" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<h1>示例源码</h1>
<p>GitHub: https://github.com/EdisonTalk/MAFD</p>
<h1>参考资料</h1>
<p><span data-pm-slice="0 0 []"><span>圣杰,《.NET + AI 智能体开发进阶》(推荐指数:★★★★★)</span></span></p>
<p><span data-pm-slice="0 0 []"><span>Microsoft Learn,<span>《Agent Framework Tutorials》</span></span></span></p>
<div><span data-pm-slice="0 0 []"><span> </span></span></div>
<p style="text-align: center"><img src="https://images.cnblogs.com/cnblogs_com/edisonchou/1647700/o_200902144330EdisonTalk-Footer.jpg" alt="" style="width: 65%; border: 1px solid rgba(221, 221, 221, 1); border-radius: 3px; box-shadow: 0 4px 8px rgba(3, 27, 78, 0.12)"></p>
<div id="Copyright">
<p>作者:<span style="text-decoration: underline">爱迪生</span></p>
<p>出处:https://edisontalk.cnblogs.com</p>
<p>本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。</p>
</div>
</div>
<div id="MySignature" role="contentinfo">
<div align="center"><img border="0" src="http://service.t.sina.com.cn/widget/qmd/2068032061/d643d182/10.png"></div><br><br>
来源:https://www.cnblogs.com/edisontalk/p/-/quick-start-on-maf-chatper13
頁:
[1]