Appearance
Microsoft Agent Framework(MAF)提供多 Agent 编排能力,可以把 Copilot 包装成 MAF Agent,与其他 Agent(Azure OpenAI、Anthropic 等)混合使用。支持顺序流水线和并行执行,适合需要多个专精 Agent 协作完成复杂任务的场景。
GitHub Copilot SDK 集成 Microsoft Agent Framework:多 Agent 协作工作流
什么是 Microsoft Agent Framework
Microsoft Agent Framework(MAF)是微软提供的多 Agent 编排框架,支持 .NET 和 Python。它定义了统一的 Agent 接口(A2A 协议),让不同 AI 服务提供的 Agent 可以互相协作——你可以把 Copilot、Azure OpenAI、Anthropic 的 Agent 放在同一个工作流中。
安装
.NET:
bash
dotnet add package GitHub.Copilot.SDK
dotnet add package Microsoft.Agents.AI.GitHub.Copilot --prereleaseTypeScript:
bash
npm install @github/copilot-sdk基本用法
.NET 中将 Copilot 包装为 MAF Agent
csharp
using GitHub.Copilot.SDK;
using Microsoft.Agents.AI;
var copilotClient = new CopilotClient(new CopilotClientOptions
{
GithubToken = Environment.GetEnvironmentVariable("GITHUB_TOKEN")
});
AIAgent agent = copilotClient.AsAIAgent();
string response = await agent.RunAsync("解释 ASP.NET Core 中的依赖注入是如何工作的");TypeScript 中定义工具
typescript
import { DefineTool } from '@github/copilot-sdk'
const getWeather = DefineTool({
name: 'GetWeather',
description: '获取指定城市的当前天气',
parameters: {
location: { type: 'string', description: '城市名称' }
},
execute: async ({ location }) => `${location}当前天气:晴,气温 25°C`
})多 Agent 工作流
顺序流水线
适合需要前一个 Agent 的输出作为后一个 Agent 输入的场景:
csharp
// 顺序:先审查代码,再生成文档
var reviewer = copilotClient.AsAIAgent(new AIAgentOptions {
Instructions = "你是一个严格的代码审查专家,专注于安全性和性能问题"
});
var documentor = copilotClient.AsAIAgent(new AIAgentOptions {
Instructions = "你是一个技术文档专家,根据代码审查结果生成规范的文档"
});
var pipeline = new SequentialOrchestrator(new[] { reviewer, documentor });
string result = await pipeline.RunAsync("审查并为这个 HTTP 客户端重试逻辑编写文档");并行执行
适合多个维度独立分析,最后汇总结果:
csharp
// 并行:安全审查和性能审查同时进行
var securityReviewer = copilotClient.AsAIAgent(new AIAgentOptions {
Instructions = "专注于安全漏洞分析:SQL 注入、XSS、认证绕过等"
});
var performanceReviewer = copilotClient.AsAIAgent(new AIAgentOptions {
Instructions = "专注于性能问题:N+1 查询、内存泄漏、不必要的同步等"
});
var concurrent = new ConcurrentOrchestrator(new[] { securityReviewer, performanceReviewer });
string combinedResult = await concurrent.RunAsync("分析这个数据库查询模块");流式响应
csharp
// .NET 流式输出
await foreach (var chunk in agent.RunStreamingAsync("用 C# 写一个快速排序实现"))
{
Console.Write(chunk);
}typescript
// TypeScript 流式输出
session.on('assistant.message_delta', (event) => {
process.stdout.write(event.data.delta ?? '')
})Agent 配置选项
| 选项 | 类型 | 说明 |
|---|---|---|
Instructions | string | Agent 的系统 Prompt |
Tools | 工具列表 | Agent 可调用的自定义工具 |
Streaming | bool | 是否启用流式输出 |
Model | string | 覆盖默认模型 |
最佳实践
单一职责:每个 Agent 只做一件事,职责明确。一个"既审查代码又写文档又发邮件"的 Agent 远不如三个专精 Agent 好用。
角色描述要具体:Instructions 中明确说明 Agent 的专业领域和判断标准,模糊的角色描述会导致输出质量不稳定。
错误处理:多 Agent 工作流中,任何一个 Agent 出错都可能影响整个流程。用 try-catch 包裹 Agent 调用,记录哪个 Agent 出了什么问题。
安全提示:如果把
onPermissionRequest设置为自动批准所有请求,会存在提示注入(prompt injection)风险,生产环境不建议这么做。
常见问题
Q: Copilot SDK 和 Azure OpenAI SDK 的 Agent 可以在同一个 MAF 工作流中吗?
A: 可以。MAF 的设计目标就是让不同 AI 服务的 Agent 互操作。只要各自正确实现了 A2A 协议接口,就能混合使用。
Q: 顺序流水线中,前一个 Agent 的输出会自动传给下一个吗?
A: 会。SequentialOrchestrator 会把每个 Agent 的输出作为下一个的输入,你不需要手动传递。
Q: MAF 和直接用 Copilot SDK 相比,什么时候应该用 MAF?
A: 单个 Agent 或简单任务,直接用 Copilot SDK 更轻量。当你需要协调多个 AI 服务、或需要把任务分解给不同专精 Agent 并行/串行处理时,MAF 的价值才能体现出来。