Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Magentic Orchestration belum didukung di C#.
Orkestrasi magentik dirancang berdasarkan sistem Magentic-One yang ditemukan oleh AutoGen. Ini adalah pola multi-agen tujuan umum yang fleksibel yang dirancang untuk tugas kompleks dan terbuka yang memerlukan kolaborasi dinamis. Dalam pola ini, manajer Magentic khusus mengoordinasikan tim agen khusus, memilih agen mana yang harus bertindak selanjutnya berdasarkan konteks yang berkembang, kemajuan tugas, dan kemampuan agen.
Manajer Magentic mempertahankan konteks bersama, melacak kemajuan, dan mengadaptasi alur kerja secara real time. Ini memungkinkan sistem untuk memecah masalah kompleks, mendelegasikan subtugas, dan memperbaiki solusi secara berulang melalui kolaborasi agen. Orkestrasi sangat cocok untuk skenario di mana jalur solusi tidak diketahui sebelumnya dan mungkin memerlukan beberapa putaran penalaran, penelitian, dan komputasi.
Petunjuk / Saran
Orkestrasi Magentic memiliki arsitektur yang sama dengan pola orkestrasi Obrolan Grup , dengan manajer yang sangat kuat yang menggunakan perencanaan untuk mengoordinasikan kolaborasi agen. Jika skenario Anda memerlukan koordinasi yang lebih sederhana tanpa perencanaan yang kompleks, pertimbangkan untuk menggunakan pola Obrolan Grup sebagai gantinya.
Nota
Dalam makalah Magentic-One , 4 agen yang sangat khusus dirancang untuk menyelesaikan serangkaian tugas yang sangat spesifik. Dalam orkestrasi Magentic dalam Agent Framework, Anda dapat menentukan agen khusus Anda sendiri agar sesuai dengan kebutuhan aplikasi spesifik Anda. Namun, belum diuji seberapa baik orkestrasi Magentic akan berkinerja dengan baik di luar desain asli Magentic-One.
Apa yang akan Anda Pelajari
- Cara menyiapkan manajer Magentic untuk mengoordinasikan beberapa agen khusus
- Cara menangani peristiwa streaming dengan
WorkflowOutputEvent - Cara menerapkan tinjauan rencana human-in-the-loop
- Cara melacak kolaborasi agen dan kemajuan melalui tugas yang kompleks
Tentukan Agen Khusus Anda
Dalam orkestrasi Magentic, Anda menentukan agen khusus yang dapat dipilih manajer secara dinamis berdasarkan persyaratan tugas:
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(),
)
Membangun Alur Kerja Magentic
Gunakan MagenticBuilder untuk mengonfigurasi alur kerja dengan manajer standar(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()
Petunjuk / Saran
Manajer standar diimplementasikan berdasarkan desain Magentic-One, dengan perintah tetap yang diambil dari kertas asli. Anda dapat menyesuaikan perilaku manajer dengan meneruskan perintah Anda sendiri melalui MagenticBuilder parameter konstruktor. Untuk menyesuaikan manajer lebih lanjut, Anda juga dapat menerapkan manajer Anda sendiri dengan sub kelas MagenticManagerBase .
Jalankan Alur Kerja dengan Streaming Peristiwa
Jalankan tugas yang kompleks dan tangani peristiwa untuk output streaming dan pembaruan orkestrasi:
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)
Tingkat Lanjut: Tinjauan Rencana Human-in-the-Loop
Aktifkan human-in-the-loop (HITL) untuk memungkinkan pengguna meninjau dan menyetujui rencana yang diusulkan manajer sebelum eksekusi. Ini berguna untuk memastikan bahwa paket selaras dengan harapan dan persyaratan pengguna.
Ada dua opsi untuk peninjauan rencana.
- Revisi: Pengguna dapat memberikan umpan balik untuk merevisi rencana, yang akan memicu tim manajemen untuk merencanakan ulang berdasarkan umpan balik.
- Setujui: Pengguna dapat menyetujui paket as-is, memungkinkan alur kerja untuk melanjutkan.
Aktifkan tinjauan rencana dengan meneruskan enable_plan_review=True ketika membangun ulang alur kerja Magnetic:
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()
Permintaan ulasan rencana dikirimkan sebagai WorkflowEvent bersama type="request_info" dan data MagenticPlanReviewRequest. Anda dapat menangani permintaan ini di aliran peristiwa:
Petunjuk / Saran
Pelajari selengkapnya tentang permintaan dan respons di panduan Permintaan dan Respons .
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
Konsep utama
- Koordinasi Dinamis: Manajer Magentic secara dinamis memilih agen mana yang harus bertindak berikutnya berdasarkan konteks yang berkembang
- Penyempurnaan Berulang: Sistem dapat memecah masalah kompleks dan secara berulang menyempurnakan solusi melalui beberapa putaran
- Pelacakan Kemajuan: Mekanisme bawaan untuk mendeteksi macet dan mereset rencana jika diperlukan
- Kolaborasi Fleksibel: Agen dapat dipanggil beberapa kali dalam urutan apa pun seperti yang ditentukan oleh manajer
- Pengawasan Manusia: Mekanisme mengiringi manusia secara opsional untuk peninjauan rencana
Proses Eksekusi Alur Kerja
Orkestrasi Magentik mengikuti pola eksekusi ini:
- Fase Perencanaan: Manajer menganalisis tugas dan membuat rencana awal
- Tinjauan Paket Opsional: Jika diaktifkan, manusia dapat meninjau dan menyetujui/memodifikasi paket
- Pemilihan Agen: Manajer memilih agen yang paling tepat untuk setiap subtugas
- Eksekusi: Agen yang dipilih menjalankan bagian tugas mereka
- Penilaian Kemajuan: Manajer mengevaluasi kemajuan dan memperbarui rencana
- Deteksi Macet: Jika kemajuan macet, rencana ulang otomatis dengan opsi peninjauan manusia.
- Iterasi: Langkah 3-6 berulang hingga tugas selesai atau batas tercapai
- Sintesis Akhir: Manajer mensintesis semua output agen menjadi hasil akhir
Contoh Lengkap
Lihat sampel lengkap di repositori Sampel Kerangka Kerja Agen.