Magentic-One#

Magentic-One ist ein generalistisches Multi-Agenten-System zur Lösung offener web- und dateibasierter Aufgaben in einer Vielzahl von Domänen. Es stellt einen bedeutenden Fortschritt für Multi-Agenten-Systeme dar und erzielt eine wettbewerbsfähige Leistung bei einer Reihe von Agenten-Benchmarks (vollständige Details finden Sie im technischen Bericht).

Bei der ursprünglichen Veröffentlichung im November 2024 wurde Magentic-One direkt auf der autogen-core Bibliothek implementiert. Wir haben Magentic-One nun auf die Verwendung von autogen-agentchat portiert, was eine modularere und einfacher zu bedienende Schnittstelle bietet.

Zu diesem Zweck ist der Magentic-One-Orchestrator MagenticOneGroupChat nun einfach ein AgentChat-Team, das alle Standard-AgentChat-Agenten und -Funktionen unterstützt. Ebenso sind Magentic-Ones MultimodalWebSurfer, FileSurfer und MagenticOneCoderAgent Agenten nun breit als AgentChat-Agenten verfügbar und können in allen AgentChat-Workflows verwendet werden.

Schließlich gibt es eine Hilfsklasse, MagenticOne, die all dies so bündelt, wie es im Paper mit minimaler Konfiguration war.

Weitere Informationen über Magentic-one finden Sie in unserem Blogbeitrag und im technischen Bericht.

Autogen Magentic-One example

Beispiel: Die obige Abbildung zeigt, wie das Magentic-One Multi-Agenten-Team eine komplexe Aufgabe aus dem GAIA-Benchmark bewältigt. Der Orchestrator-Agent von Magentic-One erstellt einen Plan, delegiert Aufgaben an andere Agenten und verfolgt den Fortschritt in Richtung des Ziels, wobei er den Plan dynamisch überarbeitet, wenn nötig. Der Orchestrator kann Aufgaben an einen FileSurfer-Agenten zum Lesen und Bearbeiten von Dateien, einen WebSurfer-Agenten zur Bedienung eines Webbrowsers oder einen Coder- oder Computerterminal-Agenten zum Schreiben bzw. Ausführen von Code delegieren.

Vorsicht

Die Verwendung von Magentic-One beinhaltet die Interaktion mit einer für Menschen konzipierten digitalen Welt, was inhärente Risiken birgt. Um diese Risiken zu minimieren, beachten Sie die folgenden Vorsichtsmaßnahmen:

  1. Container verwenden: Führen Sie alle Aufgaben in Docker-Containern aus, um die Agenten zu isolieren und direkte Systemangriffe zu verhindern.

  2. Virtuelle Umgebung: Verwenden Sie eine virtuelle Umgebung, um die Agenten auszuführen und zu verhindern, dass sie auf sensible Daten zugreifen.

  3. Protokolle überwachen: Überwachen Sie die Protokolle während und nach der Ausführung genau, um riskantes Verhalten zu erkennen und zu mildern.

  4. Menschliche Aufsicht: Führen Sie die Beispiele mit einem Menschen im Loop aus, um die Agenten zu überwachen und unbeabsichtigte Folgen zu verhindern.

  5. Zugriff einschränken: Beschränken Sie den Zugriff der Agenten auf das Internet und andere Ressourcen, um unbefugte Handlungen zu verhindern.

  6. Daten schützen: Stellen Sie sicher, dass die Agenten keinen Zugriff auf sensible Daten oder Ressourcen haben, die kompromittiert werden könnten. Teilen Sie keine sensiblen Informationen mit den Agenten. Beachten Sie, dass Agenten gelegentlich riskante Aktionen ausführen können, z. B. Menschen um Hilfe bitten oder Cookie-Zustimmungen ohne menschliches Zutun akzeptieren. Stellen Sie immer sicher, dass die Agenten überwacht werden und in einer kontrollierten Umgebung arbeiten, um unbeabsichtigte Folgen zu verhindern. Seien Sie außerdem vorsichtig, da Magentic-One anfällig für Prompt-Injection-Angriffe von Webseiten sein kann.

Erste Schritte#

Installieren Sie die erforderlichen Pakete

pip install "autogen-agentchat" "autogen-ext[magentic-one,openai]"

# If using the MultimodalWebSurfer, you also need to install playwright dependencies:
playwright install --with-deps chromium

Wenn Sie dies noch nicht getan haben, durchlaufen Sie das AgentChat-Tutorial, um die Konzepte von AgentChat kennenzulernen.

Dann können Sie versuchen, einen autogen_agentchat.teams.SelectorGroupChat durch MagenticOneGroupChat zu ersetzen.

Zum Beispiel

import asyncio
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import MagenticOneGroupChat
from autogen_agentchat.ui import Console


async def main() -> None:
    model_client = OpenAIChatCompletionClient(model="gpt-4o")

    assistant = AssistantAgent(
        "Assistant",
        model_client=model_client,
    )
    team = MagenticOneGroupChat([assistant], model_client=model_client)
    await Console(team.run_stream(task="Provide a different proof for Fermat's Last Theorem"))
    await model_client.close()


asyncio.run(main())

Um ein anderes Modell zu verwenden, lesen Sie bitte Modelle für weitere Informationen.

Oder verwenden Sie die Magentic-One-Agenten in einem Team

Vorsicht

Der Beispielcode kann Dateien aus dem Internet herunterladen, Code ausführen und mit Webseiten interagieren. Stellen Sie sicher, dass Sie sich in einer sicheren Umgebung befinden, bevor Sie den Beispielcode ausführen.

import asyncio
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_agentchat.teams import MagenticOneGroupChat
from autogen_agentchat.ui import Console
from autogen_ext.agents.web_surfer import MultimodalWebSurfer
# from autogen_ext.agents.file_surfer import FileSurfer
# from autogen_ext.agents.magentic_one import MagenticOneCoderAgent
# from autogen_agentchat.agents import CodeExecutorAgent
# from autogen_ext.code_executors.local import LocalCommandLineCodeExecutor

async def main() -> None:
    model_client = OpenAIChatCompletionClient(model="gpt-4o")

    surfer = MultimodalWebSurfer(
        "WebSurfer",
        model_client=model_client,
    )

    team = MagenticOneGroupChat([surfer], model_client=model_client)
    await Console(team.run_stream(task="What is the UV index in Melbourne today?"))

    # # Note: you can also use  other agents in the team
    # team = MagenticOneGroupChat([surfer, file_surfer, coder, terminal], model_client=model_client)
    # file_surfer = FileSurfer( "FileSurfer",model_client=model_client)
    # coder = MagenticOneCoderAgent("Coder",model_client=model_client)
    # terminal = CodeExecutorAgent("ComputerTerminal",code_executor=LocalCommandLineCodeExecutor())


asyncio.run(main())

Oder verwenden Sie die MagenticOne-Hilfsklasse mit allen gebündelten Agenten

import asyncio
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_ext.teams.magentic_one import MagenticOne
from autogen_agentchat.ui import Console
from autogen_agentchat.agents import ApprovalRequest, ApprovalResponse


def approval_func(request: ApprovalRequest) -> ApprovalResponse:
    """Simple approval function that requests user input before code execution."""
    print(f"Code to execute:\n{request.code}")
    user_input = input("Do you approve this code execution? (y/n): ").strip().lower()
    if user_input == 'y':
        return ApprovalResponse(approved=True, reason="User approved the code execution")
    else:
        return ApprovalResponse(approved=False, reason="User denied the code execution")


async def example_usage():
    client = OpenAIChatCompletionClient(model="gpt-4o")
    # Enable code execution approval for security
    m1 = MagenticOne(client=client, approval_func=approval_func)
    task = "Write a Python script to fetch data from an API."
    result = await Console(m1.run_stream(task=task))
    print(result)


if __name__ == "__main__":
    asyncio.run(example_usage())

Architektur#

Autogen Magentic-One architecture

Die Arbeit von Magentic-One basiert auf einer Multi-Agenten-Architektur, bei der ein führender Orchestrator-Agent für die übergeordnete Planung, die Steuerung anderer Agenten und die Verfolgung des Aufgabenfortschritts verantwortlich ist. Der Orchestrator erstellt zunächst einen Plan zur Bewältigung der Aufgabe und sammelt benötigte Fakten und begründete Vermutungen in einem Task Ledger, der gepflegt wird. Bei jedem Schritt seines Plans erstellt der Orchestrator einen Progress Ledger, in dem er den Aufgabenfortschritt selbst reflektiert und prüft, ob die Aufgabe abgeschlossen ist. Wenn die Aufgabe noch nicht abgeschlossen ist, weist er einem der anderen Agenten von Magentic-One eine Teilaufgabe zu. Nachdem der zugewiesene Agent seine Teilaufgabe abgeschlossen hat, aktualisiert der Orchestrator den Progress Ledger und fährt so fort, bis die Aufgabe abgeschlossen ist. Wenn der Orchestrator feststellt, dass über mehrere Schritte hinweg kein Fortschritt erzielt wird, kann er den Task Ledger aktualisieren und einen neuen Plan erstellen. Dies wird in der obigen Abbildung veranschaulicht; die Arbeit des Orchestrators ist somit in eine äußere Schleife unterteilt, in der er den Task Ledger aktualisiert, und eine innere Schleife zur Aktualisierung des Progress Ledger.

Insgesamt besteht Magentic-One aus den folgenden Agenten:

  • Orchestrator: der leitende Agent, der für die Aufgabenzerlegung und -planung, die Steuerung anderer Agenten bei der Ausführung von Teilaufgaben, die Verfolgung des Gesamtfortschritts und die Ergreifung von Korrekturmaßnahmen bei Bedarf zuständig ist.

  • WebSurfer: Dies ist ein LLM-basierter Agent, der erfahren im Umgang und der Verwaltung des Zustands eines Chromium-basierten Webbrowsers ist. Mit jeder eingehenden Anfrage führt der WebSurfer eine Aktion im Browser aus und berichtet dann über den neuen Zustand der Webseite. Der Aktionsraum des WebSurfer umfasst Navigation (z. B. Besuch einer URL, Durchführung einer Websuche), Webseitenaktionen (z. B. Klicken und Tippen) und Leseaktionen (z. B. Zusammenfassen oder Beantworten von Fragen). Der WebSurfer stützt sich auf den Barrierefreiheitsbaum des Browsers und auf Set-of-Marks-Prompting, um seine Aktionen auszuführen.

  • FileSurfer: Dies ist ein LLM-basierter Agent, der eine Markdown-basierte Dateivorschau-Anwendung steuert, um lokale Dateien der meisten Typen zu lesen. Der FileSurfer kann auch gängige Navigationsaufgaben wie das Auflisten von Verzeichnisinhalten und das Navigieren in einer Ordnerstruktur ausführen.

  • Coder: Dies ist ein LLM-basierter Agent, der durch seinen System-Prompt für das Schreiben von Code, die Analyse von von anderen Agenten gesammelten Informationen oder die Erstellung neuer Artefakte spezialisiert ist.

  • ComputerTerminal: Schließlich bietet das ComputerTerminal dem Team Zugriff auf eine Konsolen-Shell, in der die Programme des Coder ausgeführt und neue Programmierbibliotheken installiert werden können.

Zusammen bieten die Agenten von Magentic-One dem Orchestrator die Werkzeuge und Fähigkeiten, die er benötigt, um eine breite Palette von offenen Problemen zu lösen, sowie die Fähigkeit, sich autonom an dynamische und sich ständig ändernde Web- und Dateisystemumgebungen anzupassen und darin zu handeln.

Während das standardmäßige multimodale LLM, das wir für alle Agenten verwenden, GPT-4o ist, ist Magentic-One modellunabhängig und kann heterogene Modelle integrieren, um verschiedene Fähigkeiten zu unterstützen oder unterschiedliche Kostenanforderungen bei der Erledigung von Aufgaben zu erfüllen. Es kann beispielsweise verschiedene LLMs und SLMs sowie deren spezialisierte Versionen verwenden, um verschiedene Agenten anzutreiben. Wir empfehlen ein starkes Argumentationsmodell für den Orchestrator-Agenten wie GPT-4o. In einer anderen Konfiguration von Magentic-One experimentieren wir auch mit der Verwendung von OpenAI o1-preview für die äußere Schleife des Orchestrators und für den Coder, während andere Agenten weiterhin GPT-4o verwenden.

Zitat#


@misc{fourney2024magenticonegeneralistmultiagentsolving,
      title={Magentic-One: A Generalist Multi-Agent System for Solving Complex Tasks},
      author={Adam Fourney and Gagan Bansal and Hussein Mozannar and Cheng Tan and Eduardo Salinas and Erkang and Zhu and Friederike Niedtner and Grace Proebsting and Griffin Bassman and Jack Gerrits and Jacob Alber and Peter Chang and Ricky Loynd and Robert West and Victor Dibia and Ahmed Awadallah and Ece Kamar and Rafah Hosn and Saleema Amershi},
      year={2024},
      eprint={2411.04468},
      archivePrefix={arXiv},
      primaryClass={cs.AI},
      url={https://arxiv.org/abs/2411.04468},
}