Magentic-One#

Magentic-One 是一个通用的多代理系统,用于解决跨多个领域的开放式网页和文件任务。这代表了多代理系统的重要进步,在一系列代理基准测试中取得了具有竞争力的表现(详见技术报告获取完整细节)。

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

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

最后,有一个辅助类,MagenticOne,它在论文中以最小的配置将所有内容捆绑在一起。

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

示例: 上图展示了Magentic-One多代理团队完成来自GAIA基准的复杂任务。Magentic-One的Orchestrator代理创建计划,将任务委派给其他代理,并跟踪目标的进展,根据需要动态修订计划。Orchestrator可以将任务委派给FileSurfer代理以读取和处理文件,WebSurfer代理以操作网页浏览器,或者Coder或Computer Terminal代理分别编写或执行代码。

注意

使用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"))


asyncio.run(main())

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

或者,在团队中使用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())

架构#

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

总体而言,Magentic-One 包含以下代理:

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

  • WebSurfer: 这是一个基于LLM的代理,擅长命令和管理基于Chromium的网页浏览器的状态。每当接收到一个请求时,WebSurfer会在浏览器上执行一个操作,然后报告网页的新状态。WebSurfer的操作空间包括导航(例如访问URL、执行网络搜索);网页操作(例如点击和输入);以及读取操作(例如摘要或回答问题)。WebSurfer依赖浏览器的可访问性树和标记集提示来执行其操作。

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

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

  • 计算机终端:最后,ComputerTerminal为团队提供了一个控制台shell,可以在此执行Coder的程序,并可以安装新的编程库。

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

虽然我们为所有代理使用的默认多模态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},
}