autogen_ext.teams.magentic_one#
- class MagenticOne(client: ChatCompletionClient, hil_mode: bool = False, input_func: Callable[[str], str] | Callable[[str, CancellationToken | 无], Awaitable[str]] | 无 = None, code_executor: CodeExecutor | 无 = None)[源代码]#
-
MagenticOne 是一个专门的群聊类,它集成了各种代理,如 FileSurfer、WebSurfer、Coder 和 Executor,用于解决复杂任务。要了解更多关于 Magentic-One 背后的科学原理,请查看完整的博客文章:Magentic-One: A Generalist Multi-Agent System for Solving Complex Tasks 以及下面的参考文献。
安装:
pip install "autogen-ext[magentic-one]"
- Parameters:
client (ChatCompletionClient) – 用于模型交互的客户端。
hil_mode (bool) – 可选;如果设置为True,将UserProxyAgent添加到代理列表中。
警告
使用Magentic-One涉及与为人类设计的数字世界交互,这带有固有的风险。为了尽量减少这些风险,请考虑以下预防措施:
使用容器:在docker容器中运行所有任务,以隔离代理程序并防止直接的系统攻击。
虚拟环境: 使用虚拟环境来运行代理,以防止它们访问敏感数据。
监控日志: 在执行期间和之后密切监控日志,以检测和缓解风险行为。
人工监督: 在运行示例时,确保有人在循环中监督代理,以防止意外后果。
限制访问: 限制代理访问互联网和其他资源,以防止未经授权的操作。
保护数据: 确保代理无法访问可能被泄露的敏感数据或资源。不要与代理共享敏感信息。
请注意,代理人有时可能会尝试一些冒险的行为,例如在没有人类参与的情况下招募人类帮助或接受cookie协议。始终确保代理人受到监控并在受控环境中操作,以防止意外后果。此外,要小心Magentic-One可能容易受到网页prompt注入攻击。
架构:
Magentic-One 是一个通用的多代理系统,用于解决跨多个领域的开放式网页和基于文件的任务。它代表了朝着开发能够完成人们工作和个人生活中遇到的任务的代理迈出的重要一步。
Magentic-One的工作基于多代理架构,其中主导的Orchestrator代理负责高级规划、指导其他代理并跟踪任务进度。Orchestrator首先制定一个计划来应对任务,收集所需的事实和有根据的猜测,并维护在一个Task Ledger中。在计划的每一步中,Orchestrator创建一个Progress Ledger,在此自我反思任务进度并检查任务是否完成。如果任务尚未完成,它会将Magentic-One的其他代理之一指派一个子任务来完成。在指定的代理完成其子任务后,Orchestrator更新Progress Ledger,并以这种方式继续,直到任务完成。如果Orchestrator发现足够多的步骤没有取得进展,它可以更新Task Ledger并制定一个新的计划。
总体而言,Magentic-One 包含以下代理:
协调者:负责任务分解和计划的主要代理,指导其他代理执行子任务,跟踪整体进度,并在需要时采取纠正措施。
WebSurfer: 一个基于LLM的代理,擅长指挥和管理基于Chromium的网页浏览器的状态。它在浏览器上执行操作并报告网页的新状态。
FileSurfer:一个基于LLM的代理,它控制一个基于Markdown的文件预览应用程序来读取大多数类型的本地文件。它还可以执行常见的导航任务,如列出目录内容和浏览文件夹结构。
Coder: 一个基于LLM的代理,专注于编写代码、分析从其他代理收集的信息或创建新的工件。
计算机终端:为团队提供访问控制台 shell 的权限,可以在其中执行 Coder 的程序,并可以安装新的编程库。
Magentic-One 的代理共同为 Orchestrator 提供了解决各种开放式问题所需的工具和能力,以及自主适应并在动态和不断变化的网络和文件系统环境中行动的能力。
示例
# 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} }