10-02-03 — Multi-agent Orchestration no Copilot Studio
TL;DR
O Copilot Studio suporta orquestração multi-agente nativamente: um agente orquestrador recebe a solicitação e delega para agentes especializados via handoff ou chamada direta. Em 2025 a Microsoft adicionou suporte ao protocolo A2A (Agent-to-Agent) e ao MCP, permitindo que agentes de diferentes plataformas colaborem. Para equipes .NET, isso se traduz em agentes especializados que são APIs REST chamadas pelo orquestrador.
Padrões de orquestração
Copilot Studio] O -->|Delega RH| A1[Agente RH
custom engine .NET] O -->|Delega TI| A2[Agente IT Help
declarative] O -->|Delega Vendas| A3[Agente Sales
Python + Fabric] A1 --> R[Resposta consolidada] A2 --> R A3 --> R R --> U
Handoff entre agentes no Copilot Studio
O mecanismo nativo de handoff no Copilot Studio usa o nó Transfer to Agent, que pode apontar para outro agente publicado na mesma organização.
Configurando handoff no manifest
// No topic do agente orquestrador — nó Transfer to Agent
// Via Copilot Studio UI: Actions > Transfer to Agent > selecionar agente publicado
// Para custom engine, via código .NET:
// O orquestrador chama o sub-agente via HTTP
public class OrchestratorAgent : ActivityHandler
{
private readonly HttpClient _httpClient;
protected override async Task OnMessageActivityAsync(
ITurnContext<IMessageActivity> turnContext,
CancellationToken cancellationToken)
{
var intent = await ClassifyIntent(turnContext.Activity.Text);
string response = intent switch
{
"HR" => await CallSubAgent("https://hr-agent.azurewebsites.net/api/query",
turnContext.Activity.Text),
"IT" => await CallSubAgent("https://it-agent.azurewebsites.net/api/query",
turnContext.Activity.Text),
_ => "Não entendi. Pode reformular?"
};
await turnContext.SendActivityAsync(MessageFactory.Text(response), cancellationToken);
}
private async Task<string> CallSubAgent(string url, string query)
{
var payload = new { query, context = "from-orchestrator" };
var response = await _httpClient.PostAsJsonAsync(url, payload);
var result = await response.Content.ReadFromJsonAsync<AgentResponse>();
return result?.Answer ?? "Sem resposta do sub-agente";
}
}
Protocolo A2A (Agent-to-Agent)
O protocolo A2A, proposto pela Google e adotado pela Microsoft em 2025, padroniza a comunicação entre agentes de diferentes plataformas. Um agente A2A expõe um agent card (JSON) que descreve suas capacidades, e outros agentes podem descobri-lo e chamar suas tasks.
// Agent Card simplificado (JSON exposto em /.well-known/agent.json)
{
"name": "Agente RH Impar",
"description": "Responde perguntas sobre políticas de RH, férias e benefícios",
"url": "https://hr-agent.impar.com.br",
"version": "1.0",
"capabilities": {
"streaming": true,
"pushNotifications": false
},
"skills": [
{
"id": "rh-policy",
"name": "Consulta de Políticas RH",
"description": "Responde perguntas sobre as políticas internas da Impar",
"inputModes": ["text"],
"outputModes": ["text"]
}
]
}
MCP para integração com ferramentas
O Model Context Protocol permite que agentes exponham ou consumam ferramentas de forma padronizada. No contexto multi-agente, um agente pode ser tanto servidor MCP (expondo suas capacidades) quanto cliente MCP (consumindo capacidades de outros).
Padrões de design para multi-agente
- Hub-and-spoke — Um orquestrador central, vários especialistas. Mais simples, mas single point of failure
- Peer-to-peer — Agentes se chamam diretamente baseados em capability discovery. Mais resiliente, mais complexo
- Pipeline — A saída de um agente é entrada do próximo (ex: extração → análise → resposta). Ideal para processamento de documentos
Como isso se conecta
- Módulo 9 (Semantic Kernel) — AgentGroupChat do SK implementa orquestração multi-agente em .NET
- 11-03-03 — OneLake MCP Server pode ser usado como fonte por agentes especializados
- 10-03-01 — A topologia multi-agente inteira publica como um único app Teams