Semantic Kernel Agent Orchestration编排
一、多代理编排核心价值
Semantic Kernel的Agent Orchestration框架解决了传统单代理系统的局限性:
// 统一调用接口示例(适用于所有模式)
InProcessRuntime runtime = new();
await runtime.StartAsync();
// 任意编排模式通用执行流程
OrchestrationResult<string> result = await orchestration.InvokeAsync(task, runtime);
string output = await result.GetValueAsync();
通过协调具有不同专业技能的代理(如物理专家、化学专家),构建出能处理复杂工作流的协作系统。实验性提示:当前功能仍处实验阶段,API可能变更。
二、五种编排模式详解
1. 并发编排 (Concurrent)
原理:向所有代理广播任务,独立收集结果
适用场景:并行分析、多方案决策
// 定义不同领域的专家代理
ChatCompletionAgent physicist = new() {
Name = "物理专家",
Instructions = "你是一名物理学专家,从物理角度回答问题",
Kernel = kernel
};
ChatCompletionAgent chemist = new() {
Name = "化学专家",
Instructions = "你是一名化学专家,从化学角度分析问题",
Kernel = kernel
};
// 创建并发编排
ConcurrentOrchestration orchestration = new(physicist, chemist);
// 执行任务(获取温度定义的多元视角)
var result = await orchestration.InvokeAsync("温度是什么?", runtime);
string[] outputs = await result.GetValueAsync();
/* 输出示例:
物理专家:温度是衡量粒子平均动能的物理量...
化学专家:温度反映了分子热运动的剧烈程度...
*/
2. 顺序编排 (Sequential)
原理:按预设顺序传递处理结果,形成流水线
适用场景:多阶段文档处理、供应链管理
// 创建营销处理流水线
ChatCompletionAgent analyst = new() {
Name = "市场分析师",
Instructions = "你是一名市场分析师,从产品描述中提取:\n-核心功能\n-目标用户\n-独特卖点"
};
ChatCompletionAgent writer = new() {
Name = "文案撰写人",
Instructions = "根据分析结果撰写150字营销文案,只需输出文案正文"
};
ChatCompletionAgent editor = new() {
Name = "内容编辑",
Instructions = "优化文案语法,提升表达清晰度,保持风格统一"
};
// 构建顺序链
SequentialOrchestration orchestration = new(analyst, writer, editor);
// 执行产品文案生成
var result = await orchestration.InvokeAsync(
"一款环保不锈钢水杯,可保持饮品低温24小时", runtime);
/* 输出示例:
市场分析师:核心功能:环保材料、24小时保冷...
文案撰写人:全新环保不锈钢水杯,让您的冷饮持续冰爽...
内容编辑:【最终文案】创新环保不锈钢水杯...
*/
3. 群聊编排 (Group Chat)
原理:通过管理器协调多代理对话
适用场景:头脑风暴、争议解决
// 构建创意团队
ChatCompletionAgent writer = new() {
Name = "文案专员",
Instructions = "你是有十年经验的文案专家,擅长简洁幽默的表达,每次仅提出一个方案"
};
ChatCompletionAgent director = new() {
Name = "艺术总监",
Instructions = "你是一位崇尚David Ogilvy的创意总监,负责审核文案质量"
};
// 创建轮询式群聊(5轮对话上限)
GroupChatOrchestration orchestration = new(
new RoundRobinGroupChatManager { MaximumInvocationCount = 5 },
writer, director
);
// 发起创意任务
var result = await orchestration.InvokeAsync(
"为经济型电动SUV设计广告标语", runtime);
/* 输出示例:
文案专员:“电动驾趣,触手可及”
艺术总监:建议加入环保元素...
文案专员:“绿色动力,轻松驰骋”
*/
4. 移交编排 (Handoff)
原理:根据上下文动态转移控制权
适用场景:多级客服系统、专家转接
// 构建客服代理链
OrchestrationHandoffs handoffs = OrchestrationHandoffs
.StartWith(triageAgent)
.Add(triageAgent, statusAgent, returnAgent, refundAgent)
.Add(statusAgent, triageAgent, "遇到非订单问题转接")
.Add(returnAgent, triageAgent, "遇到非退货问题转接");
// 模拟用户咨询队列
Queue<string> queries = new(new[] {
"我想查询订单状态", "订单号123", "需要退货", "订单号456", "商品破损"
});
// 创建移交编排(支持人工介入)
HandoffOrchestration orchestration = new(handoffs) {
InteractiveCallback = () => ValueTask.FromResult(
new ChatMessageContent(AuthorRole.User, queries.Dequeue()))
};
// 处理用户请求
var result = await orchestration.InvokeAsync("我需要订单帮助", runtime);
/* 输出示例:
工单代理:请问您需要什么帮助?
订单代理:请提供订单号
退货代理:请描述退货原因...
*/
5. Magentic编排
原理:管理器动态协调代理分工
适用场景:研究分析、跨领域协作
// 创建研究+执行代理
ChatCompletionAgent researcher = new() {
Name = "研究专员",
Instructions = "你负责收集信息,不执行计算或量化分析",
Kernel = researchKernel // 使用gpt-4o-search-preview模型
};
AzureAIAgent coder = new() {
Name = "代码专员",
Instructions = "你使用代码处理数据,需提供详细分析过程",
Tools = { new CodeInterpreterToolDefinition() } // 代码解释器
};
// 配置Magentic管理器
StandardMagenticManager manager = new(...) {
MaximumInvocationCount = 5 // 最大调用次数
};
// 构建复杂任务协作
MagenticOrchestration orchestration = new(manager, researcher, coder);
// 执行综合研究任务
var result = await orchestration.InvokeAsync(@"
比较ResNet-50、BERT-base和GPT-2在Azure Standard_NC6s_v3 VM上训练24小时的
能耗与CO2排放量,按图像分类/文本分类/文本生成任务给出建议", runtime);
/* 输出示例:
研究专员:根据论文A,ResNet-50训练能耗约45kWh...
代码专员:排放量计算代码:
emissions = energy * 0.387 // 微软区域排放因子
表格结果:
| 模型 | 任务类型 | 能耗(kWh) | CO2(kg) |
|----------|--------------|----------|---------|
| ResNet-50| 图像分类 | 42 | 16.25 |
*/
三、开发准备
- 安装必要包:
dotnet add package Microsoft.SemanticKernel.Agents.Orchestration --prerelease
dotnet add package Microsoft.SemanticKernel.Agents.Runtime.InProcess --prerelease
- 统一架构优势:
// 所有模式共享相同调用接口
await orchestration.InvokeAsync(task, runtime);
await result.GetValueAsync();
await runtime.RunUntilIdleAsync();
实验性声明:本文所述功能仍处开发阶段,API可能变更,生产环境慎用。完整示例代码详见官方GitHub仓库。
Semantic Kernel Agent Orchestration编排的更多相关文章
- Semantic Kernel 入门系列:💾Native Function
语义的归语义,语法的归语法. 基础定义 最基本的Native Function定义只需要在方法上添加 SKFunction 的特性即可. using Microsoft.SemanticKernel. ...
- Semantic Kernel 知多少 | 开启面向AI编程新篇章
引言 在ChatGPT 火热的当下, 即使没有上手亲自体验,想必也对ChatGPT的强大略有耳闻.当一些人在对ChatGPT犹犹豫豫之时,一些敏锐的企业主和开发者们已经急不可耐的开展基于ChatGPT ...
- Semantic Kernel 入门系列:📅 Planner 计划管理
Semantic Kernel 的一个核心能力就是实现"目标导向"的AI应用. 目标导向 "目标导向"听起来是一个比较高大的词,但是却是实际生活中我们处理问题的 ...
- LangChain vs Semantic Kernel
每当向他人介绍 Semantic Kernel, 会得到的第一个问题就是 Semantic Kernel 类似于LangChain吗,或者是c# 版本的LangChain吗? 为了全面而不想重复的回答 ...
- Semantic Kernel 入门系列:🛸LLM降临的时代
不论你是否关心,不可否认,AGI的时代即将到来了. 在这个突如其来的时代中,OpenAI的ChatGPT无疑处于浪潮之巅.而在ChatGPT背后,我们不能忽视的是LLM(Large Language ...
- Semantic Kernel 入门系列:🪄LLM的魔法
ChatGPT 只是LLM 的小试牛刀,让人类能够看到的是机器智能对于语言系统的理解和掌握. 如果只是用来闲聊,而且只不过是将OpenAI的接口封装一下,那么市面上所有的ChatGPT的换皮应用都差不 ...
- Semantic Kernel 入门系列:🔥Kernel 内核和🧂Skills 技能
理解了LLM的作用之后,如何才能构造出与LLM相结合的应用程序呢? 首先我们需要把LLM AI的能力和原生代码的能力区分开来,在Semantic Kernel(以下简称SK),LLM的能力称为 sem ...
- Semantic Kernel 入门系列:💬Semantic Function
如果把提示词也算作一种代码的话,那么语义技能所带来的将会是全新编程方式,自然语言编程. 通常情况下一段prompt就可以构成一个Semantic Function,如此这般简单,如果我们提前可以组织好 ...
- Semantic Kernel 入门系列:🥑突破提示词的限制
无尽的上下文 LLM的语言理解和掌握能力在知识内容的解读和总结方面提供了强大的能力. 但是由于训练数据本身来自于公共领域,也就注定了无法在一些小众或者私有的领域能够足够的好的应答. 因此如何给LLM ...
- Semantic Kernel 入门系列:🥑Memory内存
了解的运作原理之后,就可以开始使用Semantic Kernel来制作应用了. Semantic Kernel将embedding的功能封装到了Memory中,用来存储上下文信息,就好像电脑的内存一样 ...
随机推荐
- 你常用哪些工具来分析 JVM 性能?
常用的 JVM 性能分析工具 JVM 性能分析工具主要用于监控.调试和优化 Java 程序的性能,尤其是在垃圾回收.内存泄漏.线程调度等方面.以下是一些常用的 JVM 性能分析工具: 1. jvisu ...
- Vue3+Ant-design项目启用ts/typescript
Ant-design官方文档提供了js和ts两种案例,按照文档给项目install ant-design后写了个组件编译时发现只要加上`<script lang="ts"&g ...
- 2025dsfz集训Day2:二分与三分
DAY2:二分与三分 \[Designed\ By\ FrankWkd\ -\ Luogu@Lwj54joy,uid=845400 \] 特别感谢 此次课的主讲 - Kwling 二分概述 二分法,在 ...
- .net core项目代码提交忽略文件.gitignore的配置
根据语言自动生成 1. 访问 .gitignore.io 首先,访问 https://www.gitignore.io/.这是一个非常有用的网站,可以根据你的开发环境自动生成 .gitignore 文 ...
- 【经验】微信小程序|云后台比价(自带云开发、leancloud、bmob)(2022/10/31更新)
这个博客UI不太好看,我另外也发在了博客园里,可点击链接查看. 文章目录 前言 1. 免费配额 2. 超过额度时收费情况 3. 另外的价钱 总结 前言 作为前端开发者,没有购买云服务器的习惯,在只需要 ...
- vue3 基础-表单元素双向绑定
通常是在 form 表单相关的场景中会用到双向绑定相关, 核心是 v-model 的应用. input 输入框 <!DOCTYPE html> <html lang="en ...
- Manim:动画制作背后的魔法
Manim是一个强大的数学动画制作库,它能够帮助我们创建出令人惊叹的动画,无论是用于教学还是娱乐. 不过,对于初学者来说,Manim的内部工作机制可能显得有些复杂. 本文将从整体上简单介绍Manim的 ...
- E. Level Up
E. Level Up 题意 玩家初始等级为 \(1\), 有 \(n\) 只怪物,每个怪物有一个等级 \(a_i\), 如果怪物等级高于你,则你们会战斗,战斗后经验加1,否则怪物会逃跑,你不会获得经 ...
- HashMap get和resize源码解析|Java 17
直奔主题,奉上HashMap中get 函数源码解析: public V get(Object key) { Node<K,V> e; return (e = getNode(hash(ke ...
- Spring AOP 面向切面编程之AOP是什么
前言 软件工程有一个基本原则叫做"关注点分离"(Concern Separation),通俗的理解就是不同的问题交给不同的部分去解决,每部分专注于解决自己的问题.这年头互联网也 ...