Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Magentic Orchestration se v jazyce C# zatím nepodporuje.
Magnetická orchestrace je navržena na základě systému Magentic-One vynalezeného AutoGen. Jedná se o flexibilní vzor s více agenty pro obecné účely navržený pro složité otevřené úlohy, které vyžadují dynamickou spolupráci. V tomto modelu vyhrazený magentický manažer koordinuje tým specializovaných agentů a vybere, který agent by měl pokračovat na základě vyvíjejícího se kontextu, průběhu úkolů a možností agenta.
Magentický manažer udržuje sdílený kontext, sleduje průběh a přizpůsobuje pracovní postup v reálném čase. Díky tomu může systém rozdělit složité problémy, delegovat dílčí úkoly a iterativně zpřesňovat řešení prostřednictvím spolupráce agentů. Orchestrace je obzvláště vhodná pro scénáře, ve kterých není cesta řešení předem známá a může vyžadovat několik cyklů odůvodnění, výzkumu a výpočtů.
Návod
Magentická orchestrace má stejnou architekturu jako model orchestrace skupinového chatu s velmi výkonným manažerem, který používá plánování ke koordinaci spolupráce agentů. Pokud váš scénář vyžaduje jednodušší koordinaci bez složitého plánování, zvažte místo toho použití vzoru Skupinový chat.
Poznámka:
V dokumentu Magentic-One jsou 4 vysoce specializovaní agenti navrženi tak, aby vyřešili velmi specifickou sadu úloh. V magentické orchestraci v rozhraní Agent Framework můžete definovat vlastní specializované agenty tak, aby vyhovovaly vašim konkrétním potřebám aplikace. Není však otestováno, jak dobře magentická orchestrace bude fungovat mimo původní Magentic-One návrh.
Co se naučíte
- Nastavení magentického manažera pro koordinaci více specializovaných agentů
- Zpracování streamovaných událostí pomocí
WorkflowOutputEvent - Postup implementace kontroly plánu s lidským prvkem v rozhodování
- Jak sledovat spolupráci agentů a jejich pokrok při řešení složitých úkolů
Definování specializovaných agentů
V magentické orchestraci definujete specializované agenty, které může správce dynamicky vybírat na základě požadavků na úlohy:
from agent_framework import Agent
from agent_framework.openai import OpenAIChatClient, OpenAIResponsesClient
responses_client = OpenAIResponsesClient()
researcher_agent = Agent(
name="ResearcherAgent",
description="Specialist in research and information gathering",
instructions=(
"You are a Researcher. You find information without additional computation or quantitative analysis."
),
# This agent requires the gpt-4o-search-preview model to perform web searches
chat_client=OpenAIChatClient(model_id="gpt-4o-search-preview"),
)
coder_agent = Agent(
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.",
chat_client=responses_client,
tools=responses_client.get_code_interpreter_tool(),
)
# Create a manager agent for orchestration
manager_agent = Agent(
name="MagenticManager",
description="Orchestrator that coordinates the research and coding workflow",
instructions="You coordinate a team to complete complex tasks efficiently.",
chat_client=OpenAIChatClient(),
)
Sestavení magentického pracovního postupu
Slouží MagenticBuilder ke konfiguraci pracovního postupu pomocí standardního manažera(StandardMagenticManager):
from agent_framework.orchestrations import MagenticBuilder
workflow = MagenticBuilder(
participants=[researcher_agent, coder_agent],
manager_agent=manager_agent,
max_round_count=10,
max_stall_count=3,
max_reset_count=2,
).build()
Návod
Standardní manažer je implementován na základě návrhu MagneticOne s předem danými pokyny převzatými z původní studie. Chování manažera můžete přizpůsobit předáním vlastních výzev prostřednictvím parametrů konstruktoru MagenticBuilder . Pokud chcete manažera dále přizpůsobit, můžete také implementovat vlastního manažera tím, že subclassujete MagenticManagerBase třídu.
Spuštění pracovního postupu se streamováním událostí
Spusťte komplexní úlohu a zpracujte události pro aktualizace výstupu a orchestrace streamování:
import json
import asyncio
from typing import cast
from agent_framework import (
AgentResponseUpdate,
Message,
WorkflowEvent,
)
from agent_framework.orchestrations import MagenticProgressLedger
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 (for example, 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)."
)
# Keep track of the last executor to format output nicely in streaming mode
last_message_id: str | None = None
output_event: WorkflowEvent | None = None
async for event in workflow.run_stream(task):
if event.type == "output" and isinstance(event.data, AgentResponseUpdate):
message_id = event.data.message_id
if message_id != last_message_id:
if last_message_id is not None:
print("\n")
print(f"- {event.executor_id}:", end=" ", flush=True)
last_message_id = message_id
print(event.data, end="", flush=True)
elif event.type == "magentic_orchestrator":
print(f"\n[Magentic Orchestrator Event] Type: {event.data.event_type.name}")
if isinstance(event.data.content, MagenticProgressLedger):
print(f"Please review progress ledger:\n{json.dumps(event.data.content.to_dict(), indent=2)}")
else:
print(f"Unknown data type in MagenticOrchestratorEvent: {type(event.data.content)}")
# Block to allow user to read the plan/progress before continuing
# Note: this is for demonstration only and is not the recommended way to handle human interaction.
# Please refer to `with_plan_review` for proper human interaction during planning phases.
await asyncio.get_event_loop().run_in_executor(None, input, "Press Enter to continue...")
elif event.type == "output":
output_event = event
# The output of the Magentic workflow is a list of ChatMessages with only one final message
# generated by the orchestrator.
output_messages = cast(list[Message], output_event.data)
output = output_messages[-1].text
print(output)
Pokročilé: Přezkum plánu s člověkem v procesu
Povolte funkci HITL (human-in-the-loop), aby uživatelé mohli před provedením zkontrolovat a schválit navrhovaný plán vedoucího. To je užitečné pro zajištění toho, aby plán odpovídal očekáváním a požadavkům uživatelů.
Existují dvě možnosti kontroly plánu:
- Revidovat: Uživatel může poskytnout zpětnou vazbu k revizi plánu, což aktivuje správu, která bude na základě zpětné vazby znovu plánovat.
- Schválit: Uživatel může schválit plán as-is, což pracovnímu postupu umožní pokračovat.
Povolte kontrolu plánu pomocí enable_plan_review=True při vytváření pracovního postupu Magentic:
from agent_framework import (
AgentResponseUpdate,
Agent,
Message,
MagenticPlanReviewRequest,
WorkflowEvent,
)
from agent_framework.orchestrations import MagenticBuilder
workflow = MagenticBuilder(
participants=[researcher_agent, analyst_agent],
enable_plan_review=True,
manager_agent=manager_agent,
max_round_count=10,
max_stall_count=1,
max_reset_count=2,
).build()
Žádosti o kontrolu plánu jsou vydány jako WorkflowEvent s type="request_info" a MagenticPlanReviewRequest daty. Tyto požadavky můžete zpracovat ve streamu událostí:
Návod
Další informace o požadavcích a odpovědích najdete v průvodci Požadavky a odpovědi .
pending_request: WorkflowEvent | None = None
pending_responses: dict[str, MagenticPlanReviewResponse] | None = None
output_event: WorkflowEvent | None = None
while not output_event:
if pending_responses is not None:
stream = workflow.run(responses=pending_responses)
else:
stream = workflow.run_stream(task)
last_message_id: str | None = None
async for event in stream:
if event.type == "output" and isinstance(event.data, AgentResponseUpdate):
message_id = event.data.message_id
if message_id != last_message_id:
if last_message_id is not None:
print("\n")
print(f"- {event.executor_id}:", end=" ", flush=True)
last_message_id = message_id
print(event.data, end="", flush=True)
elif event.type == "request_info" and event.request_type is MagenticPlanReviewRequest:
pending_request = event
elif event.type == "output":
output_event = event
pending_responses = None
# Handle plan review request if any
if pending_request is not None:
event_data = cast(MagenticPlanReviewRequest, pending_request.data)
print("\n\n[Magentic Plan Review Request]")
if event_data.current_progress is not None:
print("Current Progress Ledger:")
print(json.dumps(event_data.current_progress.to_dict(), indent=2))
print()
print(f"Proposed Plan:\n{event_data.plan.text}\n")
print("Please provide your feedback (press Enter to approve):")
reply = await asyncio.get_event_loop().run_in_executor(None, input, "> ")
if reply.strip() == "":
print("Plan approved.\n")
pending_responses = {pending_request.request_id: event_data.approve()}
else:
print("Plan revised by human.\n")
pending_responses = {pending_request.request_id: event_data.revise(reply)}
pending_request = None
Klíčové koncepty
- Dynamická koordinace: Magentický manažer dynamicky vybírá, který agent by měl fungovat dále na základě vyvíjejícího se kontextu.
- Iterativní zpřesnění: Systém může rozdělit složité problémy a iterativní upřesňovat řešení prostřednictvím několika kruhů.
- Sledování průběhu: Integrované mechanismy pro detekci zastavení a resetování plánu v případě potřeby
- Flexibilní spolupráce: Agenti se dají volat vícekrát v libovolném pořadí podle toho, co určuje manažer.
- Lidský dohled: Volitelné mechanismy human-in-the-loop pro kontrolu plánu
Tok provádění pracovního postupu
Magentická orchestrace se řídí tímto vzorem provádění:
- Fáze plánování: Manažer analyzuje úkol a vytvoří počáteční plán.
- Volitelná kontrola plánu: Pokud je tato možnost povolená, můžou lidé plán zkontrolovat a schválit nebo upravit.
- Výběr agenta: Správce vybere nejvhodnějšího agenta pro každý dílčí úkol.
- Spuštění: Vybraný agent spustí svou část úlohy.
- Hodnocení průběhu: Vedoucí vyhodnocuje průběh a aktualizuje plán.
- Detekce zastavení: Pokud dojde k zastavení průběhu, automaticky přeplánovat s volitelným procesem kontrolovaným člověkem
- Iterace: Kroky 3 až 6 se opakují, dokud není úkol dokončen nebo nejsou dosaženy limity.
- Konečná syntéza: Manažer syntetizuje všechny výstupy agenta do konečného výsledku.
Kompletní příklad
Prohlédnou si kompletní ukázky v úložišti ukázek architektury agentů.