Compartilhar via


Orquestração magêntica

Importante

Os recursos de Orquestração de Agente no Agent Framework estão em estágio experimental. Eles estão em desenvolvimento ativo e podem mudar significativamente antes de avançar para o estágio de prévia ou release candidate.

A orquestração magêntica foi projetada com base no sistema Magentic-One inventado pela AutoGen. É um padrão flexível de vários agentes de uso geral projetado para tarefas complexas e abertas que exigem colaboração dinâmica. Nesse padrão, um gerenciador magêntico dedicado coordena uma equipe de agentes especializados, selecionando qual agente deve agir em seguida com base no contexto em evolução, no progresso da tarefa e nas funcionalidades do agente.

O gerenciador do Magentic mantém um contexto compartilhado, acompanha o progresso e adapta o fluxo de trabalho em tempo real. Isso permite que o sistema divida problemas complexos, delegar subtarefas e refinar iterativamente soluções por meio da colaboração do agente. A orquestração é especialmente adequada para cenários em que o caminho da solução não é conhecido com antecedência e pode exigir várias rodadas de raciocínio, pesquisa e computação.

Dica

Leia mais sobre o Magentic-One aqui.

Dica

O nome "Magêntico" vem de "Magentic-One". "Magentic-One" é um sistema multi-agente que inclui um conjunto de agentes, como o WebSurfer e FileSurfer. A orquestração semântica do Kernel Magentic é inspirada no sistema Magentic-One em que o Magentic gerente coordena uma equipe de agentes especializados para resolver tarefas complexas. No entanto, não é uma implementação direta do sistema de Magentic-One e não conta com os agentes do sistema de Magentic-One.

Para saber mais sobre o padrão, como quando usar o padrão ou quando evitar o padrão em sua carga de trabalho, consulte a orquestração magêntica.

Casos de uso comuns

Um usuário solicita um relatório abrangente comparando a eficiência energética e as emissões de CO₂ de diferentes modelos de machine learning. O gerente do Magentic primeiro atribui um agente de pesquisa para coletar dados relevantes e, em seguida, delega a análise e a computação a um agente de codificador. O gerente coordena várias rodadas de pesquisa e computação, agrega os achados e produz um relatório detalhado e estruturado como a saída final.

diagrama

O que você vai aprender

  • Como definir e configurar agentes para orquestração magêntica
  • Como configurar um gerenciador do Magentic para coordenar a colaboração do agente
  • Como funciona o processo de orquestração, incluindo planejamento, acompanhamento de progresso e síntese de resposta final

Definir seus agentes

Cada agente no padrão Magêntico tem uma função especializada. Neste exemplo:

  • ResearchAgent: localiza e resume informações (por exemplo, por meio da pesquisa na Web). Aqui o exemplo está usando o modelo ChatCompletionAgent com o gpt-4o-search-preview para sua capacidade de pesquisa na web.
  • CoderAgent: grava e executa código para analisar ou processar dados. Aqui, o exemplo está usando o AzureAIAgent pois ele possui ferramentas avançadas, como o interpretador de código.

Dica

O ChatCompletionAgent e AzureAIAgent são usados aqui, mas você pode usar qualquer tipo de agente.

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Agents;
using Microsoft.SemanticKernel.Agents.AzureAI;
using Microsoft.SemanticKernel.Agents.Magentic;
using Microsoft.SemanticKernel.Agents.Orchestration;
using Microsoft.SemanticKernel.Agents.Runtime.InProcess;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Azure.AI.Agents.Persistent;
using Azure.Identity;

// Helper function to create a kernel with chat completion
public static Kernel CreateKernelWithChatCompletion(...)
{
    ...
}

// Create a kernel with OpenAI chat completion for the research agent
Kernel researchKernel = CreateKernelWithChatCompletion("gpt-4o-search-preview");
ChatCompletionAgent researchAgent = new ChatCompletionAgent {
    Name = "ResearchAgent",
    Description = "A helpful assistant with access to web search. Ask it to perform web searches.",
    Instructions = "You are a Researcher. You find information without additional computation or quantitative analysis.",
    Kernel = researchKernel,
};

// Create a persistent Azure AI agent for code execution
PersistentAgentsClient agentsClient = AzureAIAgent.CreateAgentsClient(endpoint, new AzureCliCredential());
PersistentAgent definition = await agentsClient.Administration.CreateAgentAsync(
    modelId,
    name: "CoderAgent",
    description: "Write and executes code to process and analyze data.",
    instructions: "You solve questions using code. Please provide detailed analysis and computation process.",
    tools: [new CodeInterpreterToolDefinition()]);
AzureAIAgent coderAgent = new AzureAIAgent(definition, agentsClient);

Configurar o Magentic Manager

O gerenciador do Magentic coordena os agentes, planeja o fluxo de trabalho, acompanha o progresso e sintetiza a resposta final. O gerenciador padrão (StandardMagenticManager) usa um modelo de conclusão de chat que dá suporte à saída estruturada.

Kernel managerKernel = CreateKernelWithChatCompletion("o3-mini");
StandardMagenticManager manager = new StandardMagenticManager(
    managerKernel.GetRequiredService<IChatCompletionService>(),
    new OpenAIPromptExecutionSettings())
{
    MaximumInvocationCount = 5,
};

Opcional: Observar respostas do agente

Você pode criar um método de retorno para registrar as respostas do agente conforme a orquestração avança através da propriedade ResponseCallback.

ChatHistory history = [];

ValueTask responseCallback(ChatMessageContent response)
{
    history.Add(response);
    return ValueTask.CompletedTask;
}

Criar a Orquestração Magêntica

Combine seus agentes e gerentes em um MagenticOrchestration objeto.

MagenticOrchestration orchestration = new MagenticOrchestration(
    manager,
    researchAgent,
    coderAgent)
{
    ResponseCallback = responseCallback,
};

Iniciar o tempo de execução

Um runtime é necessário para gerenciar a execução de agentes. Aqui, usamos InProcessRuntime e iniciamos isso antes de invocar a orquestração.

InProcessRuntime runtime = new InProcessRuntime();
await runtime.StartAsync();

Invocar a Orquestração

Acione a orquestração com sua tarefa complexa. O gerente planejará, delegará e coordenará os agentes para resolver o problema.

string input = @"I am preparing a report on the energy efficiency of different machine learning model architectures.\nCompare the estimated training and inference energy consumption of ResNet-50, BERT-base, and GPT-2 on standard datasets (e.g., ImageNet for ResNet, GLUE for BERT, WebText for GPT-2). Then, estimate the CO2 emissions associated with each, assuming training on an Azure Standard_NC6s_v3 VM for 24 hours. Provide tables for clarity, and recommend the most energy-efficient model per task type (image classification, text classification, and text generation).";
var result = await orchestration.InvokeAsync(input, runtime);

Coletar Resultados

Aguarde a conclusão da orquestração e recupere o resultado final.

string output = await result.GetValueAsync(TimeSpan.FromSeconds(300));
Console.WriteLine($"\n# RESULT: {output}");
Console.WriteLine("\n\nORCHESTRATION HISTORY");
foreach (ChatMessageContent message in history)
{
    // Print each message
    Console.WriteLine($"# {message.Role} - {message.AuthorName}: {message.Content}");
}

Opcional: Parar o tempo de execução

Após a conclusão do processamento, interrompa o runtime para limpar os recursos.

await runtime.RunUntilIdleAsync();

Saída de exemplo

# RESULT: ```markdown
# Report: Energy Efficiency of Machine Learning Model Architectures

This report assesses the energy consumption and related CO₂ emissions for three popular ...

ORCHESTRATION HISTORY

# Assistant - ResearchAgent: Comparing the energy efficiency of different machine learning ...

# assistant - CoderAgent: Below are tables summarizing the approximate energy consumption and ...

# assistant - CoderAgent: The estimates provided in our tables align with a general understanding ...

# assistant - CoderAgent: Here's the updated structure for the report integrating both the ...

Dica

O código de exemplo completo está disponível aqui

Definir seus agentes

Cada agente no padrão Magêntico tem uma função especializada. Neste exemplo:

  • ResearchAgent: localiza e resume informações (por exemplo, por meio da pesquisa na Web). Aqui o exemplo está usando o modelo ChatCompletionAgent com o gpt-4o-search-preview para sua capacidade de pesquisa na web.
  • CoderAgent: grava e executa código para analisar ou processar dados. Aqui, o exemplo está usando o OpenAIAssistantAgent pois ele possui ferramentas avançadas, como o interpretador de código.

Dica

O ChatCompletionAgent e OpenAIAssistantAgent são usados aqui, mas você pode usar qualquer tipo de agente.

from semantic_kernel.agents import ChatCompletionAgent, OpenAIAssistantAgent
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion

research_agent = ChatCompletionAgent(
    name="ResearchAgent",
    description="A helpful assistant with access to web search. Ask it to perform web searches.",
    instructions="You are a Researcher. You find information without additional computation or quantitative analysis.",
    service=OpenAIChatCompletion(ai_model_id="gpt-4o-search-preview"),
)

# Create an OpenAI Assistant agent with code interpreter capability
client, model = OpenAIAssistantAgent.setup_resources()
code_interpreter_tool, code_interpreter_tool_resources = OpenAIAssistantAgent.configure_code_interpreter_tool()
definition = await client.beta.assistants.create(
    model=model,
    name="CoderAgent",
    description="A helpful assistant that writes and executes code to process and analyze data.",
    instructions="You solve questions using code. Please provide detailed analysis and computation process.",
    tools=code_interpreter_tool,
    tool_resources=code_interpreter_tool_resources,
)
coder_agent = OpenAIAssistantAgent(
    client=client,
    definition=definition,
)

Configurar o Magentic Manager

O gerenciador do Magentic coordena os agentes, planeja o fluxo de trabalho, acompanha o progresso e sintetiza a resposta final. O gerenciador padrão (StandardMagenticManager) utiliza prompts projetados com cuidado e requer um modelo de conclusão de chat que dá suporte à saída estruturada.

from semantic_kernel.agents import StandardMagenticManager
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion

manager = StandardMagenticManager(chat_completion_service=OpenAIChatCompletion())

Opcional: Observar respostas do agente

Você pode definir uma função de retorno para imprimir a mensagem de cada agente à medida que a orquestração progride.

from semantic_kernel.contents import ChatMessageContent

def agent_response_callback(message: ChatMessageContent) -> None:
    print(f"**{message.name}**\n{message.content}")

Criar a Orquestração Magêntica

Combine seus agentes e gerentes em um MagenticOrchestration objeto.

from semantic_kernel.agents import MagenticOrchestration

magentic_orchestration = MagenticOrchestration(
    members=[research_agent, coder_agent],
    manager=manager,
    agent_response_callback=agent_response_callback,
)

Iniciar o tempo de execução

Inicie o runtime para gerenciar a execução do agente.

from semantic_kernel.agents.runtime import InProcessRuntime

runtime = InProcessRuntime()
runtime.start()

Invocar a Orquestração

Acione a orquestração com sua tarefa complexa. O gerente planejará, delegará e coordenará os agentes para resolver o problema.

orchestration_result = await magentic_orchestration.invoke(
    task=(
        "I am preparing a report on the energy efficiency of different machine learning model architectures. "
        "Compare the estimated training and inference energy consumption of ResNet-50, BERT-base, and GPT-2 "
        "on standard datasets (e.g., ImageNet for ResNet, GLUE for BERT, WebText for GPT-2). "
        "Then, estimate the CO2 emissions associated with each, assuming training on an Azure Standard_NC6s_v3 VM "
        "for 24 hours. Provide tables for clarity, and recommend the most energy-efficient model "
        "per task type (image classification, text classification, and text generation)."
    ),
    runtime=runtime,
)

Coletar Resultados

Aguarde até que a orquestração seja concluída e imprima o resultado final.

value = await orchestration_result.get()
print(f"\nFinal result:\n{value}")

Opcional: Parar o tempo de execução

Após a conclusão do processamento, interrompa o runtime para limpar os recursos.

await runtime.stop_when_idle()

Saída de exemplo

**ResearchAgent**
Estimating the energy consumption and associated CO₂ emissions for training and inference of ResNet-50, BERT-base...

**CoderAgent**
Here is the comparison of energy consumption and CO₂ emissions for each model (ResNet-50, BERT-base, and GPT-2)
over a 24-hour period:

| Model     | Training Energy (kWh) | Inference Energy (kWh) | Total Energy (kWh) | CO₂ Emissions (kg) |
|-----------|------------------------|------------------------|---------------------|---------------------|
| ResNet-50 | 21.11                  | 0.08232                | 21.19232            | 19.50               |
| BERT-base | 0.048                  | 0.23736                | 0.28536             | 0.26                |
| GPT-2     | 42.22                  | 0.35604                | 42.57604            | 39.17               |

...

Final result:
Here is the comprehensive report on energy efficiency and CO₂ emissions for ResNet-50, BERT-base, and GPT-2 models...

Dica

O código de exemplo completo está disponível aqui.

Observação

A orquestração do agente ainda não está disponível no SDK do Java.

Próximas etapas