Goal In, DAG Out: How Open-Multi-Agent Turns a Goal into a Task DAG
개요
Open-Multi-Agent는 사용자가 목표를 문장으로 제공하면, 이를 바탕으로 코디네이터 에이전트가 태스크 DAG(Directed Acyclic Graph)를 생성하고, 에이전트들에게 작업을 할당하며, 독립적인 작업을 병렬로 실행하고 최종 결과를 종합하는 runTeam() 함수를 제공한다.
주요 내용
* 목표 기반 태스크 DAG 생성: runTeam() 함수는 명시적인 그래프 정의 없이 영어 문장으로 된 목표를 받아, 코디네이터 에이전트를 통해 여러 태스크로 분해하고 각 태스크 간의 의존성을 정의한 JSON 형태의 태스크 사양을 생성한다.
* 자동화된 태스크 큐 및 스케줄링: 생성된 태스크 사양은 TaskQueue에 로드되어 의존성이 해결되면 실행 준비가 되며, 코디네이터가 할당하지 않은 태스크는 스케줄러에 의해 기본적으로 의존성 우선 전략으로 에이전트에게 할당된다.
* 병렬 실행 및 결과 통합: 독립적인 태스크는 maxConcurrency 제한 내에서 병렬로 실행되며, 각 태스크의 결과는 팀의 공유 메모리에 지속적으로 저장되어 에이전트 간의 통신 수단으로 활용된다. 마지막으로 코디네이터가 모든 태스크의 결과물을 취합하여 최종 결과물을 생성한다.
* 장애 복구 및 유연성: 태스크 실패 시 해당 태스크에 의존하는 작업만 차단되며, 다른 독립적인 작업은 계속 진행되어 부분적인 결과라도 얻을 수 있다. 또한, 간단한 목표의 경우 코디네이터 단계를 건너뛰고 최적의 에이전트에게 직접 작업을 할당하여 효율성을 높인다.
* 결정론적 실행 옵션: LLM 기반 코디네이터는 매번 다른 계획을 생성할 수 있으므로, CI/CD나 규제된 워크플로우와 같이 정확한 반복 실행이 필요한 경우에는 runTasks() 함수를 사용하여 명시적으로 태스크 DAG를 직접 정의하는 방식을 선택할 수 있다.
시사점
Open-Multi-Agent의 runTeam() 함수는 복잡한 다중 에이전트 워크플로우를 목표 중심적으로 설계하고 실행할 수 있게 하여 개발 생산성을 향상시키며, runTasks() 함수를 통해 유연성과 결정론적 실행 간의 선택지를 제공한다.
댓글
GitHub Discussions