Condividi tramite


Orchestrazione magentica

Importante

Le funzionalità di orchestrazione dell'agente in Agent Framework si trovano nella fase sperimentale. Sono in fase di sviluppo attivo e possono cambiare significativamente prima di passare alla fase di anteprima o candidato al rilascio.

L'orchestrazione magentica è progettata in base al sistema Magentic-One inventato da AutoGen. Si tratta di un modello multi-agente flessibile e generico progettato per attività complesse e aperte che richiedono la collaborazione dinamica. In questo modello, un responsabile Magentic dedicato coordina un team di agenti specializzati, selezionando l'agente che deve agire successivamente in base al contesto in evoluzione, allo stato dell'attività e alle funzionalità dell'agente.

Il manager Magentic gestisce un contesto condiviso, tiene traccia dello stato di avanzamento e adatta il flusso di lavoro in tempo reale. Ciò consente al sistema di suddividere i problemi complessi, delegare le sottoattività e perfezionare in modo iterativo le soluzioni tramite la collaborazione degli agenti. L'orchestrazione è particolarmente adatta agli scenari in cui il percorso della soluzione non è noto in anticipo e può richiedere più cicli di ragionamento, ricerca e calcolo.

Suggerimento

Altre informazioni sul Magentic-One sono disponibili qui.

Suggerimento

Il nome "Magentic" deriva da "Magentic-One". "Magentic-One" è un sistema multi-agente che include un set di agenti, ad esempio WebSurfer e FileSurfer. L'orchestrazione Semantic Kernel Magentic è ispirata al sistema Magentic-One in cui il Magentic responsabile coordina un team di agenti specializzati per risolvere attività complesse. Tuttavia, non è un'implementazione diretta del sistema Magentic-One e non include gli agenti del sistema Magentic-One.

Casi d'uso comuni

Un utente richiede un report completo che confronta l'efficienza energetica e le emissioni di CO geografiche di diversi modelli di Machine Learning. Il responsabile Magentic assegna prima un agente di ricerca per raccogliere i dati pertinenti, quindi delega l'analisi e il calcolo a un agente del coder. Il responsabile coordina più cicli di ricerca e calcolo, aggrega i risultati e produce un report dettagliato e strutturato come output finale.

diagramma

Contenuto dell'esercitazione

  • Come definire e configurare gli agenti per l'orchestrazione Magentic
  • Come configurare un manager Magentic per coordinare la collaborazione degli agenti
  • Funzionamento del processo di orchestrazione, tra cui pianificazione, rilevamento dello stato e sintesi delle risposte finale

Definire gli agenti

Ogni agente nel modello Magentic ha un ruolo specializzato. In questo esempio:

  • ResearchAgent: trova e riepiloga le informazioni (ad esempio, tramite ricerca Web). Ecco l'esempio che usa il modello ChatCompletionAgent con il modello gpt-4o-search-preview per la capacità di ricerca web.
  • CoderAgent: scrive ed esegue il codice per analizzare o elaborare i dati. Qui l'esempio utilizza il AzureAIAgent perché dispone di strumenti avanzati come l'interprete di codice.

Suggerimento

E ChatCompletionAgentAzureAIAgent vengono usati qui, ma è possibile usare qualsiasi tipo di 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);

Configurare Magentic Manager

Il responsabile Magentic coordina gli agenti, pianifica il flusso di lavoro, tiene traccia dello stato di avanzamento e sintetizza la risposta finale. Il gestore standard (StandardMagenticManager) usa un modello di completamento della chat che supporta l'output strutturato.

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

Facoltativo: osservare le risposte dell'agente

È possibile creare un callback per acquisire le risposte dell'agente via via che l'orchestrazione progredisce attraverso la proprietà ResponseCallback.

ChatHistory history = [];

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

Creare l'orchestrazione magentica

Combinare gli agenti e il manager in un MagenticOrchestration oggetto.

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

Avviare il runtime

È necessario un runtime per gestire l'esecuzione degli agenti. In questo caso, usiamo InProcessRuntime e lo iniziamo prima di richiamare l'orchestrazione.

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

Richiamare l'orchestrazione

Richiama l'orchestrazione con il tuo compito complesso. Il responsabile pianifica, delega e coordina gli agenti per risolvere il 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);

Raccogliere i risultati

Attendere il completamento dell'orchestrazione e recuperare l'output finale.

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}");
}

Facoltativo: arrestare il runtime

Al termine dell'elaborazione, arrestare il runtime per pulire le risorse.

await runtime.RunUntilIdleAsync();

Output di esempio

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

Suggerimento

Il codice di esempio completo è disponibile qui

Definire gli agenti

Ogni agente nel modello Magentic ha un ruolo specializzato. In questo esempio:

  • ResearchAgent: trova e riepiloga le informazioni (ad esempio, tramite ricerca Web). Ecco l'esempio che usa il modello ChatCompletionAgent con il modello gpt-4o-search-preview per la capacità di ricerca web.
  • CoderAgent: scrive ed esegue il codice per analizzare o elaborare i dati. Qui l'esempio utilizza il OpenAIAssistantAgent perché dispone di strumenti avanzati come l'interprete di codice.

Suggerimento

E ChatCompletionAgentOpenAIAssistantAgent vengono usati qui, ma è possibile usare qualsiasi tipo di 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,
)

Configurare Magentic Manager

Il responsabile Magentic coordina gli agenti, pianifica il flusso di lavoro, tiene traccia dello stato di avanzamento e sintetizza la risposta finale. Il gestore standard (StandardMagenticManager) usa richieste progettate con attenzione e richiede un modello di completamento della chat che supporta l'output strutturato.

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

manager = StandardMagenticManager(chat_completion_service=OpenAIChatCompletion())

Facoltativo: osservare le risposte dell'agente

È possibile definire un callback per stampare il messaggio di ogni agente man mano che l'orchestrazione progredisce.

from semantic_kernel.contents import ChatMessageContent

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

Creare l'orchestrazione magentica

Combinare gli agenti e il manager in un MagenticOrchestration oggetto.

from semantic_kernel.agents import MagenticOrchestration

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

Avviare il runtime

Avviare il runtime per gestire l'esecuzione dell'agente.

from semantic_kernel.agents.runtime import InProcessRuntime

runtime = InProcessRuntime()
runtime.start()

Richiamare l'orchestrazione

Richiama l'orchestrazione con il tuo compito complesso. Il responsabile pianifica, delega e coordina gli agenti per risolvere il 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,
)

Raccogliere i risultati

Attendere il completamento dell'orchestrazione e stampare il risultato finale.

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

Facoltativo: arrestare il runtime

Al termine dell'elaborazione, arrestare il runtime per pulire le risorse.

await runtime.stop_when_idle()

Output di esempio

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

Suggerimento

Il codice di esempio completo è disponibile qui.

Annotazioni

L'orchestrazione dell'agente non è ancora disponibile in Java SDK.

Passaggi successivi