autogen_ext.teams.magentic_one#
- class MagenticOne(client: ChatCompletionClient, hil_mode: bool = False, input_func: Callable[[str], str] | Callable[[str, CancellationToken | None], Awaitable[str]] | None = None, code_executor: CodeExecutor | None = None)[source]#
-
MagenticOne 是一个专门的群聊类,它集成了 FileSurfer、WebSurfer、Coder 和 Executor 等各种代理来解决复杂的任务。要了解更多关于 Magentic-One 背后的科学原理,请参阅完整的博客文章:Magentic-One:用于解决复杂任务的通用多代理系统以及下面的参考资料。
安装
pip install "autogen-ext[magentic-one]"
- 参数:
client (ChatCompletionClient) – 用于模型交互的客户端。
hil_mode (bool) – 可选;如果设置为 True,则将 UserProxyAgent 添加到代理列表中。
警告
使用 Magentic-One 涉及与为人类设计的数字世界进行交互,这具有内在的风险。为了最大限度地减少这些风险,请考虑以下预防措施
使用容器:在 Docker 容器中运行所有任务,以隔离代理并防止直接的系统攻击。
虚拟环境:使用虚拟环境来运行代理,并防止它们访问敏感数据。
监控日志:在执行期间和之后密切监控日志,以检测和减轻危险行为。
人工监督:在人工监督下运行示例,以监督代理并防止意外后果。
限制访问:限制代理对互联网和其他资源的访问,以防止未经授权的操作。
保护数据:确保代理无法访问可能被泄露的敏感数据或资源。不要与代理共享敏感信息。
请注意,代理有时可能会尝试危险的操作,例如招募人类寻求帮助或在没有人工参与的情况下接受 cookie 协议。始终确保对代理进行监控,并在受控环境中运行,以防止意外后果。此外,请注意 Magentic-One 可能容易受到来自网页的提示注入攻击。
架构
Magentic-One 是一个通用的多代理系统,用于解决各种领域中基于开放式 Web 和文件的任务。它代表了开发可以完成人们在工作和个人生活中遇到的任务的代理的重要一步。
Magentic-One 的工作基于多代理架构,其中一个主导的 Orchestrator 代理负责高级规划、指导其他代理以及跟踪任务进度。Orchestrator 首先创建一个计划来处理任务,在维护的任务分类账中收集所需的实际情况和有根据的猜测。在其计划的每个步骤中,Orchestrator 都会创建一个进度分类账,在其中自我反思任务进度并检查任务是否完成。如果任务尚未完成,它会为 Magentic-One 的其他代理之一分配一个子任务来完成。在分配的代理完成其子任务后,Orchestrator 会更新进度分类账,并以这种方式继续,直到任务完成。如果 Orchestrator 发现进展不够顺利,它可以更新任务分类账并创建一个新计划。
总的来说,Magentic-One 由以下代理组成
Orchestrator:负责任务分解和规划的主导代理,指导其他代理执行子任务,跟踪整体进度,并在需要时采取纠正措施。
WebSurfer:一个基于 LLM 的代理,精通于指挥和管理基于 Chromium 的 Web 浏览器的状态。它在浏览器上执行操作并报告网页的新状态。
FileSurfer:一个基于 LLM 的代理,它命令一个基于 Markdown 的文件预览应用程序读取大多数类型的本地文件。它还可以执行常见的导航任务,例如列出目录内容和导航文件夹结构。
Coder:一个基于 LLM 的代理,专门用于编写代码、分析从其他代理收集的信息或创建新工件。
ComputerTerminal:为团队提供对控制台 shell 的访问权限,Coder 的程序可以在其中执行,并且可以在其中安装新的编程库。
总而言之,Magentic-One 的代理为 Orchestrator 提供了解决各种开放式问题所需的工具和能力,以及自主适应并在动态且不断变化的 Web 和文件系统环境中采取行动的能力。
示例
# Autonomously complete a coding task: 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())
# Enable human-in-the-loop mode 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_hil(): client = OpenAIChatCompletionClient(model="gpt-4o") # to enable human-in-the-loop mode, set hil_mode=True m1 = MagenticOne(client=client, hil_mode=True) 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_hil())
参考
@article{fourney2024magentic, title={Magentic-one: A generalist multi-agent system for solving complex tasks}, author={Fourney, Adam and Bansal, Gagan and Mozannar, Hussein and Tan, Cheng and Salinas, Eduardo and Niedtner, Friederike and Proebsting, Grace and Bassman, Griffin and Gerrits, Jack and Alber, Jacob and others}, journal={arXiv preprint arXiv:2411.04468}, year={2024}, url={https://arxiv.org/abs/2411.04468} }