Skip to content

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 --prerelease

TypeScript:

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 配置选项

选项类型说明
InstructionsstringAgent 的系统 Prompt
Tools工具列表Agent 可调用的自定义工具
Streamingbool是否启用流式输出
Modelstring覆盖默认模型

最佳实践

单一职责:每个 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 的价值才能体现出来。