Partilhar via


Orquestração Magentica

Importante

Os recursos de orquestração de agentes 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 versão candidata.

A orquestração Magentic é projetada com base no sistema Magentic-One inventado pela AutoGen. É um padrão multiagente flexível e de uso geral projetado para tarefas complexas e abertas que exigem colaboração dinâmica. Nesse padrão, um gerente Magentic 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 capacidades do agente.

O gerente Magentic mantém um contexto compartilhado, acompanha o progresso e adapta o fluxo de trabalho em tempo real. Isso permite que o sistema quebre problemas complexos, delegue subtarefas e refine iterativamente soluções por meio da colaboração de agentes. 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.

Sugestão

Leia mais sobre o Magentic-One aqui.

Sugestão

O nome "Magentic" vem de "Magentic-One". "Magentic-One" é um sistema multiagente que inclui um conjunto de agentes, como o WebSurfer e FileSurfer. A orquestração do Semantic Kernel Magentic é inspirada no sistema Magentic-One, onde o gerente Magentic coordena uma equipa de agentes especializados para resolver tarefas complexas. No entanto, não é uma implementação direta do sistema Magentic-One e não apresenta os agentes do sistema Magentic-One.

Para saber mais sobre o padrão, como quando usá-lo ou quando evitá-lo na sua carga de trabalho, consulte Orquestração Magnética.

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 aprendizado de máquina. O gerente Magentic primeiro atribui um agente de pesquisa para coletar dados relevantes, em seguida, delega a análise e computação a um agente codificador. O gerente coordena várias rodadas de pesquisa e computação, agrega os resultados e produz um relatório detalhado e estruturado como resultado final.

diagrama

O que você vai aprender

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

Defina seus agentes

Cada agente no padrão Magentic tem um papel especializado. Neste exemplo:

  • ResearchAgent: Localiza e resume informações (por exemplo, através de pesquisa na web). Aqui o exemplo está usando o ChatCompletionAgent com o modelo gpt-4o-search-preview para sua capacidade de pesquisa na Web.
  • CoderAgent: Escreve e executa código para analisar ou processar dados. Aqui o exemplo está usando o AzureAIAgent desde que ele tem ferramentas avançadas, como o interpretador de código.

Sugestão

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 gerente 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 suporta saída estruturada.

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

Opcional: Observe as respostas do agente

Você pode criar um callback para capturar as respostas do agente à medida que a orquestração progride pela propriedade ResponseCallback.

ChatHistory history = [];

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

Crie a Orquestração Magnética

Combine seus agentes e gerente em um MagenticOrchestration objeto.

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

Iniciar o tempo de execução

Um ambiente de execução é necessário para gerir a execução de agentes. Aqui, usamos InProcessRuntime e iniciamos o processo antes de invocar a orquestração.

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

Invoque a orquestração

Invoque 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);

Recolher Resultados

Aguarde a conclusão da orquestração e recupere a saída 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: Pare o tempo de execução

Após a conclusão do processamento, pare o tempo de execução para limpar recursos.

await runtime.RunUntilIdleAsync();

Saída de amostra

# 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 ...

Sugestão

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

Defina seus agentes

Cada agente no padrão Magentic tem um papel especializado. Neste exemplo:

  • ResearchAgent: Localiza e resume informações (por exemplo, através de pesquisa na web). Aqui o exemplo está usando o ChatCompletionAgent com o modelo gpt-4o-search-preview para sua capacidade de pesquisa na Web.
  • CoderAgent: Escreve e executa código para analisar ou processar dados. Aqui o exemplo está usando o OpenAIAssistantAgent desde que ele tem ferramentas avançadas, como o interpretador de código.

Sugestão

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 gerente Magentic coordena os agentes, planeja o fluxo de trabalho, acompanha o progresso e sintetiza a resposta final. O gerenciador padrão (StandardMagenticManager) usa prompts cuidadosamente projetados e requer um modelo de conclusão de bate-papo que 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: Observe as respostas do agente

Pode definir um callback para imprimir a mensagem de cada agente à medida que a orquestração se desenvolve.

from semantic_kernel.contents import ChatMessageContent

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

Crie a Orquestração Magnética

Combine seus agentes e gerente 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 ambiente de execução para gerir a execução do agente.

from semantic_kernel.agents.runtime import InProcessRuntime

runtime = InProcessRuntime()
runtime.start()

Invoque a orquestração

Invoque 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,
)

Recolher Resultados

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

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

Opcional: Pare o tempo de execução

Após a conclusão do processamento, pare o tempo de execução para limpar recursos.

await runtime.stop_when_idle()

Saída de amostra

**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...

Sugestão

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

Observação

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

Próximos passos