Udostępnij za pośrednictwem


Orkiestracja magentyczna

Ważne

Funkcje orkiestracji agenta w ramach struktury agenta znajdują się w fazie eksperymentalnej. Są one aktywnie opracowywane i mogą ulec znacznej zmianie przed przejściem do etapu wersji zapoznawczej lub wersji kandydującej do wydania.

Orkiestracja magentic została zaprojektowana na podstawie systemu Magentic-One opracowanego przez AutoGen. Jest to elastyczny wzorzec wieloaplikowy ogólnego przeznaczenia przeznaczony dla złożonych, otwartych zadań wymagających dynamicznej współpracy. W tym wzorcu dedykowany menedżer magentyczny koordynuje zespół wyspecjalizowanych agentów, wybierając agenta, który powinien działać dalej na podstawie zmieniającego się kontekstu, postępu zadań i możliwości agenta.

Menedżer magentic utrzymuje kontekst udostępniony, śledzi postęp i dostosowuje przepływ pracy w czasie rzeczywistym. Dzięki temu system może rozdzielić złożone problemy, delegować podzadania i iteracyjnie uściślić rozwiązania za pośrednictwem współpracy agentów. Orkiestracja jest szczególnie odpowiednia dla scenariuszy, w których ścieżka rozwiązania nie jest znana z wyprzedzeniem i może wymagać wielu rund rozumowania, badań i obliczeń.

Wskazówka

Przeczytaj więcej na temat Magentic-One tutaj.

Wskazówka

Nazwa "Magentic" pochodzi z "Magentic-One". "Magentic-One" to system wieloagentowy, który zawiera zestaw agentów, takich jak WebSurfer i FileSurfer. Orkiestracja magnetyczna jądra semantycznego jest inspirowana systemem Magentic-One, w którym menedżer Magentic koordynuje zespół wyspecjalizowanych agentów, aby rozwiązywać złożone zadania. Nie jest to jednak bezpośrednia implementacja systemu Magentic-One i nie zawiera agentów z systemu Magentic-One.

Typowe przypadki użycia

Użytkownik żąda kompleksowego raportu porównującego efektywność energetyczną i emisję CO· różnych modeli uczenia maszynowego. Menedżer Magentic najpierw przypisuje agenta badawczego do zbierania odpowiednich danych, a następnie deleguje analizę i obliczenia do agenta coder. Menedżer koordynuje wiele rund badań i obliczeń, agreguje wyniki i tworzy szczegółowy, ustrukturyzowany raport jako końcowe dane wyjściowe.

diagram

Czego nauczysz się

  • Jak definiować i konfigurować agentów na potrzeby orkiestracji magentycznej
  • Jak skonfigurować menedżera magentycznego w celu koordynowania współpracy agentów
  • Jak działa proces aranżacji, w tym planowanie, śledzenie postępu i ostateczna synteza odpowiedzi

Definiowanie agentów

Każdy agent we wzorcu magentycznym ma wyspecjalizowaną rolę. W tym przykładzie:

  • ResearchAgent: znajduje i podsumowuje informacje (np. za pośrednictwem wyszukiwania w Internecie). W tym przykładzie używany jest model ChatCompletionAgent z funkcją wyszukiwarki internetowej gpt-4o-search-preview.
  • CoderAgent: zapisuje i wykonuje kod w celu analizowania lub przetwarzania danych. W tym przykładzie jest używany element AzureAIAgent , ponieważ ma zaawansowane narzędzia, takie jak interpreter kodu.

Wskazówka

Wartości ChatCompletionAgent i AzureAIAgent są tu używane, ale można użyć dowolnego typu agenta.

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

Konfigurowanie menedżera magentic

Menedżer Magentic koordynuje agentów, planuje przepływ pracy, śledzi postęp i syntetyzuje ostateczną odpowiedź. Menedżer standardowy (StandardMagenticManager) używa modelu uzupełniania czatu, który obsługuje sformatowane dane wyjściowe.

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

Opcjonalnie: Obserwowanie odpowiedzi agenta

Można utworzyć wywołanie zwrotne, aby przechwycić odpowiedzi agenta za pośrednictwem właściwości ResponseCallback, w trakcie postępu orkiestracji.

ChatHistory history = [];

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

Tworzenie orkiestracji magentycznej

Połącz agentów i menedżera w obiekt MagenticOrchestration.

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

Uruchamianie środowiska uruchomieniowego

Środowisko uruchomieniowe jest wymagane do zarządzania wykonywaniem agentów programowych. W tym miejscu użyjemy InProcessRuntime i uruchomimy go przed wywołaniem orkiestracji.

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

Wywołaj orkiestrację

Wywołaj aranżację za pomocą złożonego zadania. Menedżer będzie planować, delegować i koordynować agentów w celu rozwiązania problemu.

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

Zbieranie wyników

Poczekaj na ukończenie aranżacji i pobierz końcowe dane wyjściowe.

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

Opcjonalnie: Zatrzymaj środowisko uruchomieniowe

Po zakończeniu przetwarzania zatrzymaj środowisko uruchomieniowe, aby wyczyścić zasoby.

await runtime.RunUntilIdleAsync();

Przykładowe dane wyjściowe

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

Wskazówka

Pełny przykładowy kod jest dostępny tutaj

Definiowanie agentów

Każdy agent we wzorcu magentycznym ma wyspecjalizowaną rolę. W tym przykładzie:

  • ResearchAgent: znajduje i podsumowuje informacje (np. za pośrednictwem wyszukiwania w Internecie). W tym przykładzie używany jest model ChatCompletionAgent z funkcją wyszukiwarki internetowej gpt-4o-search-preview.
  • CoderAgent: zapisuje i wykonuje kod w celu analizowania lub przetwarzania danych. W tym przykładzie jest używany element OpenAIAssistantAgent , ponieważ ma zaawansowane narzędzia, takie jak interpreter kodu.

Wskazówka

Wartości ChatCompletionAgent i OpenAIAssistantAgent są tu używane, ale można użyć dowolnego typu agenta.

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

Konfigurowanie menedżera magentic

Menedżer Magentic koordynuje agentów, planuje przepływ pracy, śledzi postęp i syntetyzuje ostateczną odpowiedź. Menedżer standardowy (StandardMagenticManager) używa starannie zaprojektowanych zapytań i wymaga modelu uzupełniania czatu, który obsługuje uporządkowane dane wyjściowe.

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

manager = StandardMagenticManager(chat_completion_service=OpenAIChatCompletion())

Opcjonalnie: Obserwowanie odpowiedzi agenta

Możesz zdefiniować wywołanie zwrotne, które drukuje komunikat każdego agenta podczas postępu orkiestracji.

from semantic_kernel.contents import ChatMessageContent

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

Tworzenie orkiestracji magentycznej

Połącz agentów i menedżera w obiekt MagenticOrchestration.

from semantic_kernel.agents import MagenticOrchestration

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

Uruchamianie środowiska uruchomieniowego

Uruchom środowisko uruchomieniowe, aby zarządzać wykonywaniem agenta.

from semantic_kernel.agents.runtime import InProcessRuntime

runtime = InProcessRuntime()
runtime.start()

Wywołaj orkiestrację

Wywołaj aranżację za pomocą złożonego zadania. Menedżer będzie planować, delegować i koordynować agentów w celu rozwiązania problemu.

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

Zbieranie wyników

Poczekaj na ukończenie aranżacji i wyświetl końcowy wynik.

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

Opcjonalnie: Zatrzymaj środowisko uruchomieniowe

Po zakończeniu przetwarzania zatrzymaj środowisko uruchomieniowe, aby wyczyścić zasoby.

await runtime.stop_when_idle()

Przykładowe dane wyjściowe

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

Wskazówka

Pełny przykładowy kod jest dostępny tutaj.

Uwaga / Notatka

Orkiestracja agentów nie jest jeszcze dostępna w Java SDK.

Dalsze kroki