Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
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 internetowejgpt-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 internetowejgpt-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.