MAF多路分支路由工作流如何应用于处理?
摘要:上一篇,我们学习了MAF中如何进行if-else类型的条件路由,但是实际工作中可能会村中多个分支路由的场景。在实际业务场景中,很多的业务逻辑涉及到不止两个判断条件,而是多个。在MAF中,我们可以使用 Switch-Case 来实现这种工作流
大家好,我是Edison。
最近我一直在跟着圣杰的《.NET+AI智能体开发进阶》课程学习MAF的开发技巧,我强烈推荐你也上车跟我一起出发!
上一篇,我们学习了MAF中如何进行if-else类型的条件路由,但是实际工作中可能会存在多个分支路由的场景。本篇,我们来了解下MAF中的switch-case路由实现多分支路由工作流。
Why switch-case?
在实际业务场景中,很多的业务逻辑涉及到不止两个判断条件,而是多个。
例如,在上一篇的企业内部邮件检测案例中,我们的检测结果只有两个(垃圾邮件 或 正常邮件),但如果我们想增加一个结果(不确定)就无法适用了。
在MAF中,我们可以使用 Switch-Case 来实现这种工作流内部多类决策条件的 工作流需求。
实验案例
今天来晚上上一篇这个企业内部邮件检测的工作流案例,上一篇的流程是这样的:
今天假设我们需要有更为精细的分类:
✅**正常邮件**(NotSpam):客户咨询、业务往来
❌**垃圾邮件**(Spam):明显的诈骗、广告
⚠️**不确定邮件**(Uncertain):可能是钓鱼邮件,需要人工审核
那么这就是一个三元分类的,在业务开发中我们通常会用到switch-case语法,而在MAF工作流中,也为我们定义了这种switch-case接口。
在下面的代码示例中,比对了两种接口的使用方式:
// Conditional Edge
builder
.AddEdge(source, target1, condition: c => c.IsSpam == false)
.AddEdge(source, target2, condition: c => c.IsSpam == true);
// Switch-Case
builder.AddSwitch(source, sb => sb
.AddCase(c => c.Decision == NotSpam, target1)
.AddCase(c => c.Decision == Spam, target2)
.WithDefault(target3)
);
可以看到,switch-case模式其价值主要在于增强代码可维护性,对于后续如果有新增分类,只需要添加一个AddCase接口方法实现新增分类的处理,同时基于WithDefault接口方法实现兜底确保所有情况都有处理。
最后,下面是我们需要重构后的分支路由图:
准备工作
在今天的这个案例中,我们仍然创建了一个.NET控制台应用程序,安装了以下NuGet包:
Microsoft.Agents.AI.OpenAI
Microsoft.Agents.AI.Workflows
Microsoft.Extensions.AI.OpenAI
我们的配置文件中定义了LLM API的信息:
{
"OpenAI": {
"EndPoint": "https://api.siliconflow.cn",
"ApiKey": "******************************",
"ModelId": "Qwen/Qwen3-30B-A3B-Instruct-2507"
}
}
这里我们使用 SiliconCloud 提供的Qwen/Qwen3-30B-A3B-Instruct-2507模型,你可以通过这个URL注册账号:https://cloud.siliconflow.cn/i/DomqCefW获取大量免费的Token来进行本次实验。
