Magentic-One#

Magentic-One 是一个通用的多代理系统,用于解决各种领域的开放式网络和基于文件的任务。它代表了多代理系统的重要进步,在许多代理基准测试中实现了具有竞争力的性能(有关完整详细信息,请参阅技术报告)。

Magentic-One 最初于 2024 年 11 月发布时,是直接在 autogen-core 库上实现的。现在,我们已将 Magentic-One 移植为使用 autogen-agentchat,从而提供更模块化且更易于使用的界面。

为此,Magentic-One 编排器 MagenticOneGroupChat 现在只是一个 AgentChat 团队,支持所有标准的 AgentChat 代理和功能。同样,Magentic-One 的 MultimodalWebSurferFileSurferMagenticOneCoderAgent 代理现在可以广泛用作 AgentChat 代理,以用于任何 AgentChat 工作流程。

最后,有一个辅助类 MagenticOne,它将所有这些捆绑在一起,就像论文中一样,只需最少的配置。

在我们的博客文章技术报告中查找有关 Magentic-one 的更多信息。

Autogen Magentic-One example

示例:上图说明了 Magentic-One 多代理团队完成 GAIA 基准测试中的一项复杂任务。Magentic-One 的 Orchestrator 代理创建一个计划,将任务委派给其他代理,并跟踪实现目标的进度,根据需要动态修改计划。Orchestrator 可以将任务委派给 FileSurfer 代理来读取和处理文件,委派给 WebSurfer 代理来操作 Web 浏览器,或者委派给 Coder 或计算机终端代理来分别编写或执行代码。

注意

使用 Magentic-One 涉及与专为人类设计的数字世界交互,这存在固有的风险。为了最大限度地降低这些风险,请考虑以下预防措施

  1. 使用容器:在 docker 容器中运行所有任务,以隔离代理并防止直接系统攻击。

  2. 虚拟环境:使用虚拟环境运行代理,以防止它们访问敏感数据。

  3. 监控日志:在执行期间和执行后密切监控日志,以检测和减轻风险行为。

  4. 人工监督:在循环中使用人工运行示例,以监督代理并防止意外后果。

  5. 限制访问:限制代理对互联网和其他资源的访问,以防止未经授权的操作。

  6. 保护数据:确保代理无权访问可能被泄露的敏感数据或资源。不要与代理共享敏感信息。请注意,代理有时可能会尝试冒险行为,例如招募人类寻求帮助或在没有人类参与的情况下接受 cookie 协议。始终确保代理受到监控并在受控环境中运行,以防止意外后果。此外,请注意 Magentic-One 可能容易受到网页的提示注入攻击。

开始使用#

安装所需的软件包

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

如果您尚未这样做,请阅读 AgentChat 教程以了解 AgentChat 的概念。

然后,您可以尝试将 autogen_agentchat.teams.SelectorGroupChat 替换为 MagenticOneGroupChat

例如

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

要使用不同的模型,请参阅模型以获取更多信息。

或者,在团队中使用 Magentic-One 代理

注意

示例代码可能会从互联网下载文件、执行代码以及与网页进行交互。在运行示例代码之前,请确保您处于安全的环境中。

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

或者,使用 MagenticOne 辅助类,将所有代理捆绑在一起

import asyncio
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_ext.teams.magentic_one import MagenticOne
from autogen_agentchat.ui import Console


async def example_usage():
    client = OpenAIChatCompletionClient(model="gpt-4o")
    m1 = MagenticOne(client=client)
    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())

架构#

Autogen Magentic-One architecture

Magentic-One 的工作基于多代理架构,其中主导的 Orchestrator 代理负责高级规划、指导其他代理和跟踪任务进度。Orchestrator 首先创建一个计划来处理任务,并在维护的任务分类帐中收集所需的资料和有根据的猜测。在其计划的每个步骤中,Orchestrator 都会创建一个进度分类帐,它会在其中对任务进度进行自我反思,并检查任务是否已完成。如果任务尚未完成,它会分配 Magentic-One 的其他代理之一来完成子任务。分配的代理完成其子任务后,Orchestrator 会更新进度分类帐并以这种方式继续,直到任务完成。如果 Orchestrator 发现任务在足够多的步骤中没有取得进展,则它可以更新任务分类帐并创建一个新计划。上图说明了这一点;因此,Orchestrator 的工作分为一个外部循环,它更新任务分类帐,以及一个内部循环,它更新进度分类帐。

总的来说,Magentic-One 由以下代理组成

  • Orchestrator:负责任务分解和规划的主导代理,指导其他代理执行子任务、跟踪总体进度以及根据需要采取纠正措施

  • WebSurfer:这是一个基于 LLM 的代理,擅长指挥和管理基于 Chromium 的 Web 浏览器的状态。对于每个传入的请求,WebSurfer 都会在浏览器上执行一个操作,然后报告网页的新状态。WebSurfer 的操作空间包括导航(例如,访问 URL、执行 Web 搜索);网页操作(例如,单击和键入);以及读取操作(例如,总结或回答问题)。WebSurfer 依靠浏览器的可访问性树和一组标记提示来执行其操作。

  • FileSurfer:这是一个基于 LLM 的代理,它命令基于 Markdown 的文件预览应用程序来读取大多数类型的本地文件。FileSurfer 还可以执行常见的导航任务,例如列出目录的内容和导航文件夹结构。

  • Coder:这是一个基于 LLM 的代理,通过其系统提示专门用于编写代码、分析从其他代理收集的信息或创建新的工件。

  • ComputerTerminal:最后,ComputerTerminal 为团队提供对控制台 shell 的访问权限,可以在其中执行 Coder 的程序,并且可以在其中安装新的编程库。

Magentic-One 的代理共同为 Orchestrator 提供了解决各种开放式问题所需的工具和能力,以及自主适应动态和不断变化的 Web 和文件系统环境并在其中采取行动的能力。

虽然我们用于所有代理的默认多模态 LLM 是 GPT-4o,但 Magentic-One 与模型无关,并且可以结合异构模型来支持不同的功能或满足完成任务时不同的成本要求。例如,它可以使用不同的 LLM 和 SLM 及其专用版本来为不同的代理提供支持。我们建议 Orchestrator 代理使用强大的推理模型,例如 GPT-4o。在 Magentic-One 的不同配置中,我们还尝试将 OpenAI o1-preview 用于 Orchestrator 的外部循环和 Coder,而其他代理继续使用 GPT-4o。

引用#


@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},
}