大家好,我是Edison。
最近我一直在跟着圣杰的《.NET+AI智能体开发进阶》课程学习MAF开发多智能体工作流,我强烈推荐你也上车跟我一起出发!
上一篇,我们学习了MAF中如何进行并行工作流。本篇,我们来了解下在MAF中如何开启 主工作流 + 自工作流 的模式,相信这会是大家可能会碰到的场景。
1 子工作流模式介绍
在实际业务场景中,往往需要在主工作流中根据工单类型分发或移交到不同的标准化子流程中进行后续处理。
在MAF中,我们可以使用 Sub-Worklfow 模式来实现这个目的,如下代码片段所示。
首先,将子工作流转换为一个Executor:- var logisticsSubExecutor =
- logisticsSubWorkflow.BindAsExecutor("LogisticsSubWorkflow");
- var productQualitySubExecutor =
- productQualitySubWorkflow.BindAsExecutor("ProductQualitySubWorkflow");
复制代码 然后,构建主工作流并根据条件路由到子工作流Executor:- var mainWorkflow = new WorkflowBuilder(classifierExecutor)
- .AddEdge<ComplaintProcessingRecord>(classifierExecutor, productQualitySubExecutor,
- condition: record => record.Category == "产品质量")
- .AddEdge<ComplaintProcessingRecord>(classifierExecutor, logisticsSubExecutor,
- condition: record => record.Category == "物流问题")
- .AddEdge(productQualitySubExecutor, complianceExecutor)
- .AddEdge(logisticsSubExecutor, complianceExecutor)
- .AddEdge(complianceExecutor, sentimentExecutor)
- .WithOutputFrom(sentimentExecutor)
- .Build();
复制代码 这样就实现了:主工作流进行分类转发,自工作流进行详细处理。
2 主工作流+子工作流实验案例
假设我们是一个企业的客服中心,每天都会收到大量的工单,需要根据工单类型(比如是 产品质量话题 还是 物流话题)分发到不同的标准化子流程去做后续处理,最后生成一个用户友好 且 满足合规要求 的回复给用户。
因此,我们的目标是:配置 1个主工作流 + 2个子工作流 来覆盖这个需求。
2.1 关键依赖包引入
在今天的这个案例中,我们仍然创建了一个.NET控制台应用程序,安装了以下NuGet包:
- Microsoft.Agents.AI.OpenAI
- Microsoft.Agents.AI.Workflows
- Microsoft.Extensions.AI.OpenAI
2.2 定义数据传输模型
首先,我们定义一下在这个工作流中需要生成传递的数据模型:
投诉数据模型 及 共享状态- namespace SubWorkflow.Models;
- // 共享状态:投诉处理记录(各执行器会更新此对象)
- internal class ComplaintProcessingRecord
- {
- public CustomerComplaint Original { get; set; }
- public string Category { get; set; } = "未分类";
- public string Handler { get; set; } = "待分配";
- public List<string> ProcessingSteps { get; set; } = new();
- public string AIGeneratedResponse { get; set; } = "";
- public string ComplianceStatus { get; set; } = "待审核";
- public string SentimentScore { get; set; } = "未评估";
- }
- // 投诉数据模型
- internal record CustomerComplaint(
- string OrderId,
- string CustomerName,
- string ComplaintText,
- DateTime SubmittedAt
- );
复制代码 2.3 定义产品质量处理子工作流
(1)问题评估:封装产品质量评估的逻辑,这里仅仅做演示用无实际逻辑。
[code]internal sealed class ProductEvaluationExecutor() : Executor(nameof(ProductEvaluationExecutor)){ public override ValueTask HandleAsync(ComplaintProcessingRecord record, IWorkflowContext context, CancellationToken cancellationToken = default) { Console.WriteLine("
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |