找回密码
 立即注册
首页 业界区 业界 Semantic Kernel Agent Orchestration编排

Semantic Kernel Agent Orchestration编排

咳镘袁 2025-7-17 14:36:38
一、多代理编排核心价值

Semantic Kernel的Agent Orchestration框架解决了传统单代理系统的局限性:
  1. // 统一调用接口示例(适用于所有模式)
  2. InProcessRuntime runtime = new();  
  3. await runtime.StartAsync();
  4. // 任意编排模式通用执行流程
  5. OrchestrationResult<string> result = await orchestration.InvokeAsync(task, runtime);  
  6. string output = await result.GetValueAsync();  
复制代码
通过协调具有​​不同专业技能​​的代理(如物理专家、化学专家),构建出能处理复杂工作流的协作系统。​​实验性提示​​:当前功能仍处实验阶段,API可能变更。
二、五种编排模式详解

1. 并发编排 (Concurrent)

​原理​​:向所有代理广播任务,独立收集结果
​适用场景​​:并行分析、多方案决策
  1. // 定义不同领域的专家代理
  2. ChatCompletionAgent physicist = new() {  
  3.     Name = "物理专家",  
  4.     Instructions = "你是一名物理学专家,从物理角度回答问题",  
  5.     Kernel = kernel  
  6. };
  7. ChatCompletionAgent chemist = new() {  
  8.     Name = "化学专家",  
  9.     Instructions = "你是一名化学专家,从化学角度分析问题",  
  10.     Kernel = kernel  
  11. };
  12. // 创建并发编排
  13. ConcurrentOrchestration orchestration = new(physicist, chemist);  
  14. // 执行任务(获取温度定义的多元视角)
  15. var result = await orchestration.InvokeAsync("温度是什么?", runtime);  
  16. string[] outputs = await result.GetValueAsync();  
  17. /* 输出示例:
  18. 物理专家:温度是衡量粒子平均动能的物理量...
  19. 化学专家:温度反映了分子热运动的剧烈程度...
  20. */
复制代码
2. 顺序编排 (Sequential)

​原理​​:按预设顺序传递处理结果,形成流水线
​适用场景​​:多阶段文档处理、供应链管理
  1. // 创建营销处理流水线
  2. ChatCompletionAgent analyst = new() {  
  3.     Name = "市场分析师",  
  4.     Instructions = "你是一名市场分析师,从产品描述中提取:\n-核心功能\n-目标用户\n-独特卖点"  
  5. };
  6. ChatCompletionAgent writer = new() {  
  7.     Name = "文案撰写人",  
  8.     Instructions = "根据分析结果撰写150字营销文案,只需输出文案正文"  
  9. };
  10. ChatCompletionAgent editor = new() {  
  11.     Name = "内容编辑",  
  12.     Instructions = "优化文案语法,提升表达清晰度,保持风格统一"  
  13. };
  14. // 构建顺序链
  15. SequentialOrchestration orchestration = new(analyst, writer, editor);  
  16. // 执行产品文案生成
  17. var result = await orchestration.InvokeAsync(  
  18.     "一款环保不锈钢水杯,可保持饮品低温24小时", runtime);  
  19. /* 输出示例:
  20. 市场分析师:核心功能:环保材料、24小时保冷...
  21. 文案撰写人:全新环保不锈钢水杯,让您的冷饮持续冰爽...
  22. 内容编辑:【最终文案】创新环保不锈钢水杯...
  23. */
复制代码
3. 群聊编排 (Group Chat)

​原理​​:通过管理器协调多代理对话
​适用场景​​:头脑风暴、争议解决
  1. // 构建创意团队
  2. ChatCompletionAgent writer = new() {  
  3.     Name = "文案专员",  
  4.     Instructions = "你是有十年经验的文案专家,擅长简洁幽默的表达,每次仅提出一个方案"  
  5. };
  6. ChatCompletionAgent director = new() {  
  7.     Name = "艺术总监",  
  8.     Instructions = "你是一位崇尚David Ogilvy的创意总监,负责审核文案质量"  
  9. };
  10. // 创建轮询式群聊(5轮对话上限)
  11. GroupChatOrchestration orchestration = new(  
  12.     new RoundRobinGroupChatManager { MaximumInvocationCount = 5 },  
  13.     writer, director  
  14. );
  15. // 发起创意任务
  16. var result = await orchestration.InvokeAsync(  
  17.     "为经济型电动SUV设计广告标语", runtime);  
  18. /* 输出示例:
  19. 文案专员:“电动驾趣,触手可及”
  20. 艺术总监:建议加入环保元素...
  21. 文案专员:“绿色动力,轻松驰骋”
  22. */
复制代码
4. 移交编排 (Handoff)

​原理​​:根据上下文动态转移控制权
​适用场景​​:多级客服系统、专家转接
  1. // 构建客服代理链
  2. OrchestrationHandoffs handoffs = OrchestrationHandoffs  
  3.     .StartWith(triageAgent)  
  4.     .Add(triageAgent, statusAgent, returnAgent, refundAgent)  
  5.     .Add(statusAgent, triageAgent, "遇到非订单问题转接")  
  6.     .Add(returnAgent, triageAgent, "遇到非退货问题转接");
  7. // 模拟用户咨询队列
  8. Queue<string> queries = new(new[] {  
  9.     "我想查询订单状态", "订单号123", "需要退货", "订单号456", "商品破损"  
  10. });
  11. // 创建移交编排(支持人工介入)
  12. HandoffOrchestration orchestration = new(handoffs) {  
  13.     InteractiveCallback = () => ValueTask.FromResult(  
  14.         new ChatMessageContent(AuthorRole.User, queries.Dequeue()))  
  15. };
  16. // 处理用户请求
  17. var result = await orchestration.InvokeAsync("我需要订单帮助", runtime);  
  18. /* 输出示例:
  19. 工单代理:请问您需要什么帮助?
  20. 订单代理:请提供订单号
  21. 退货代理:请描述退货原因...
  22. */
复制代码
5. Magentic编排

​原理​​:管理器动态协调代理分工
​适用场景​​:研究分析、跨领域协作
  1. // 创建研究+执行代理
  2. ChatCompletionAgent researcher = new() {  
  3.     Name = "研究专员",  
  4.     Instructions = "你负责收集信息,不执行计算或量化分析",  
  5.     Kernel = researchKernel // 使用gpt-4o-search-preview模型  
  6. };
  7. AzureAIAgent coder = new() {  
  8.     Name = "代码专员",  
  9.     Instructions = "你使用代码处理数据,需提供详细分析过程",  
  10.     Tools = { new CodeInterpreterToolDefinition() }  // 代码解释器  
  11. };
  12. // 配置Magentic管理器
  13. StandardMagenticManager manager = new(...) {  
  14.     MaximumInvocationCount = 5  // 最大调用次数  
  15. };
  16. // 构建复杂任务协作
  17. MagenticOrchestration orchestration = new(manager, researcher, coder);  
  18. // 执行综合研究任务
  19. var result = await orchestration.InvokeAsync(@"  
  20. 比较ResNet-50、BERT-base和GPT-2在Azure Standard_NC6s_v3 VM上训练24小时的  
  21. 能耗与CO2排放量,按图像分类/文本分类/文本生成任务给出建议", runtime);  
  22. /* 输出示例:
  23. 研究专员:根据论文A,ResNet-50训练能耗约45kWh...
  24. 代码专员:排放量计算代码:
  25.     emissions = energy * 0.387 // 微软区域排放因子
  26. 表格结果:
  27. | 模型       | 任务类型       | 能耗(kWh) | CO2(kg) |
  28. |----------|--------------|----------|---------|
  29. | ResNet-50| 图像分类      | 42       | 16.25   |
  30. */
复制代码
三、开发准备


  • 安装必要包:
  1. dotnet add package Microsoft.SemanticKernel.Agents.Orchestration --prerelease
  2. dotnet add package Microsoft.SemanticKernel.Agents.Runtime.InProcess --prerelease
复制代码

  • 统一架构优势:
  1. // 所有模式共享相同调用接口
  2. await orchestration.InvokeAsync(task, runtime);  
  3. await result.GetValueAsync();  
  4. await runtime.RunUntilIdleAsync();
复制代码
​实验性声明​​:本文所述功能仍处开发阶段,API可能变更,生产环境慎用。完整示例代码详见官方GitHub仓库。
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册