AutoGen Magentic-One
AutoGen Magentic-One
기본 에이전트로는 다루기 어려운 열린(open-ended) 웹·파일 기반 태스크를 풀어야 한다면, Magentic-One을 살펴볼 만해요. Magentic-One은 다양한 도메인의 열린 웹·파일 기반 태스크를 푸는 범용(일반 목적) 멀티 에이전트 시스템입니다. 여러 에이전트 벤치마크에서 경쟁력 있는 성능을 보여주며, 멀티 에이전트 시스템의 중요한 진전을 나타내요 (자세한 내용은 technical report 참고).
처음 2024년 11월에 공개됐을 때 Magentic-One은 autogen-core 라이브러리 위에 직접 구현됐어요. 이제는 Magentic-One을 autogen-agentchat로 포팅해서 더 모듈화되고 쓰기 쉬운 인터페이스를 제공합니다.
이를 위해 Magentic-One 오케스트레이터 MagenticOneGroupChat은 이제 단순히 AgentChat 팀이고, 표준 AgentChat 에이전트와 기능을 모두 지원해요. 마찬가지로 Magentic-One의 MultimodalWebSurfer, FileSurfer, MagenticOneCoderAgent 에이전트도 이제 AgentChat 에이전트로 널리 제공되어, 어떤 AgentChat 워크플로우에서도 쓰일 수 있습니다.
마지막으로 MagenticOne 헬퍼 클래스가 있는데, 이 클래스는 논문에서처럼 최소 구성으로 이 모든 것을 하나로 묶어 줍니다.
Magentic-One에 대한 추가 정보는 블로그 포스트와 기술 보고서에서 확인할 수 있어요.
예시: 위 그림은 Magentic-One 멀티 에이전트 팀이 GAIA 벤치마크의 복잡한 태스크를 완료하는 모습을 보여줘요. Magentic-One의 Orchestrator 에이전트는 계획을 만들고, 다른 에이전트에게 태스크를 위임하며, 목표를 향한 진행 상황을 추적하고 필요에 따라 계획을 동적으로 수정합니다. Orchestrator는 파일을 읽고 처리하는 FileSurfer 에이전트, 웹 브라우저를 조작하는 WebSurfer 에이전트, 코드를 작성하거나 실행하는 Coder 또는 Computer Terminal 에이전트에게 태스크를 위임할 수 있어요.
Magentic-One을 쓰는 것은 인간을 위해 설계된 디지털 세계와 상호작용하는 것을 포함하며, 이는 본질적 위험을 수반합니다. 이 위험을 최소화하려면 다음 예방 조치를 고려하세요:
1. **컨테이너 사용**: 모든 태스크를 Docker 컨테이너에서 실행해 에이전트를 격리하고 직접적인 시스템 공격을 방지하세요.
2. **가상 환경**: 가상 환경에서 에이전트를 실행해 민감한 데이터에 접근하지 못하게 하세요.
3. **로그 모니터링**: 실행 중과 실행 후에 로그를 면밀히 모니터링해 위험한 동작을 감지·완화하세요.
4. **인간 감독**: 인간이 루프에 있는(human in the loop) 상태로 예제를 실행해 에이전트를 감독하고 의도치 않은 결과를 방지하세요.
5. **접근 제한**: 무단 동작을 막기 위해 에이전트의 인터넷 및 기타 리소스 접근을 제한하세요.
6. **데이터 보호**: 에이전트가 손상될 수 있는 민감한 데이터나 리소스에 접근하지 못하게 하세요. 에이전트와 민감한 정보를 공유하지 마세요.
에이전트는 때때로 인간의 도움을 구하거나 인간의 개입 없이 쿠키 동의를 수락하는 등 위험한 행동을 시도할 수 있음을 인지하세요. 에이전트가 항상 모니터링되고 통제된 환경에서 동작하도록 하여 의도치 않은 결과를 방지하세요. 또한 Magentic-One은 웹페이지의 프롬프트 인젝션 공격에 취약할 수 있으니 주의하세요.
Getting started
필요한 패키지를 설치합니다:
pip install "autogen-agentchat" "autogen-ext[magentic-one,openai]"
# MultimodalWebSurfer를 사용한다면 playwright 의존성도 설치해야 합니다:
playwright install --with-deps chromium
아직 AgentChat 튜토리얼을 거치지 않았다면, AgentChat의 개념을 배우기 위해 먼저 거쳐 보세요.
그런 다음 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())
다른 모델을 쓰려면 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?"))
# # 참고: 팀에서 다른 에이전트도 쓸 수 있습니다.
# 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
from autogen_agentchat.agents import ApprovalRequest, ApprovalResponse
def approval_func(request: ApprovalRequest) -> ApprovalResponse:
"""코드 실행 전에 사용자 입력을 요청하는 간단한 승인 함수."""
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")
# 보안을 위해 코드 실행 승인을 활성화한다.
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())
Architecture
Magentic-One 작업은 높은 수준의 계획, 다른 에이전트 지휘, 태스크 진행 추적을 담당하는 리드 Orchestrator 에이전트가 있는 멀티 에이전트 아키텍처를 기반으로 해요. Orchestrator는 태스크를 다루기 위한 계획을 만드는 것으로 시작하고, 유지되는 Task Ledger에서 필요한 사실과 추정을 모읍니다. 계획의 각 단계에서 Orchestrator는 태스크 진행에 대해 스스로 반성하고 태스크 완료 여부를 확인하는 Progress Ledger를 만듭니다. 태스크가 아직 완료되지 않았다면, Magentic-One의 다른 에이전트 중 하나에게 완료할 하위 태스크를 할당합니다. 할당된 에이전트가 하위 태스크를 완료하면 Orchestrator는 Progress Ledger를 갱신하고 태스크가 완료될 때까지 이렇게 계속합니다. 충분한 단계 동안 진행이 이루어지지 않는다고 Orchestrator가 판단하면, Task Ledger를 갱신하고 새 계획을 만들 수 있어요. 이는 위 그림에 나와 있으며, Orchestrator의 작업은 Task Ledger를 갱신하는 외부 루프와 Progress Ledger를 갱신하는 내부 루프로 나뉩니다.
전체적으로 Magentic-One은 다음 에이전트들로 구성됩니다:
- Orchestrator: 태스크 분해와 계획, 다른 에이전트 지휘, 전체 진행 추적, 필요에 따른 시정 조치를 담당하는 리드 에이전트
- WebSurfer: Chromium 기반 웹 브라우저의 상태를 명령하고 관리하는 데 능숙한 LLM 기반 에이전트. 각 수신 요청으로 WebSurfer는 브라우저에서 작업을 수행한 뒤 웹 페이지의 새 상태를 보고합니다. WebSurfer의 액션 공간에는 내비게이션(URL 방문, 웹 검색), 웹 페이지 액션(클릭·타이핑), 읽기 액션(요약·질문 답변)이 포함됩니다. WebSurfer는 브라우저의 접근성 트리와 set-of-marks 프롬프팅에 의존해 액션을 수행합니다.
- FileSurfer: 마크다운 기반 파일 미리보기 앱을 지휘해 대부분 유형의 로컬 파일을 읽는 LLM 기반 에이전트. FileSurfer는 디렉터리 내용 나열 및 폴더 구조 탐색 같은 일반적인 내비게이션 작업도 수행할 수 있어요.
- Coder: 시스템 프롬프트를 통해 코드 작성, 다른 에이전트가 수집한 정보 분석, 새 아티팩트 생성에 특화된 LLM 기반 에이전트.
- ComputerTerminal: 마지막으로 ComputerTerminal은 팀에 콘솔 셸 접근을 제공해서 Coder의 프로그램을 실행하고 새 프로그래밍 라이브러리를 설치할 수 있게 합니다.
함께, Magentic-One의 에이전트들은 Orchestrator가 광범위한 열린 문제를 해결하는 데 필요한 도구와 능력을 제공하고, 역동적이고 끊임없이 변화하는 웹·파일 시스템 환경에 자율적으로 적응하고 행동하는 능력을 제공해요.
모든 에이전트에 사용하는 기본 멀티모달 LLM이 GPT-4o지만, Magentic-One은 모델에 구애받지 않고 태스크를 수행할 때 다양한 능력을 지원하거나 비용 요구를 충족하도록 이기종 모델을 통합할 수 있어요. 예를 들어 다른 LLM과 SLM 및 그 특화 버전을 사용해 다른 에이전트를 구동할 수 있습니다. Orchestrator 에이전트에는 GPT-4o 같은 강력한 추론 모델을 권장해요. Magentic-One의 다른 구성에서는 Orchestrator의 외부 루프와 Coder에 OpenAI o1-preview를 사용하고, 다른 에이전트는 GPT-4o를 계속 사용하는 실험을 하기도 합니다.
Citation
@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},
}