멀티 에이전트 오케스트레이션
오케스트레이션은 앱에서 에이전트가 흐르는 방식을 말합니다. 어떤 에이전트가 어떤 순서로 실행되며, 다음 단계를 어떻게 결정할까요? 에이전트를 오케스트레이션하는 방법은 두 가지가 있습니다:
- LLM 에게 결정을 맡기기: LLM 의 지능을 활용해 계획하고 추론하며 그에 따라 수행할 단계를 결정
- 코드로 오케스트레이션하기: 코드로 에이전트의 흐름을 결정
이 패턴은 혼합해서 사용할 수 있습니다. 각각의 트레이드오프는 아래에 설명합니다.
LLM 기반 오케스트레이션
에이전트는 instructions, tools 및 핸드오프로 장착된 LLM 입니다. 이는 개방형 태스크가 주어졌을 때, LLM 이 도구를 사용해 행동하고 데이터를 획득하며, 핸드오프를 통해 하위 에이전트에 작업을 위임하면서 태스크를 수행하는 계획을 자율적으로 세울 수 있음을 의미합니다. 예를 들어, 리서치 에이전트는 다음과 같은 도구를 갖출 수 있습니다:
- 온라인에서 정보를 찾기 위한 웹 검색
- 사내 데이터와 연결을 탐색하기 위한 파일 검색 및 조회
- 컴퓨터에서 직접 작업을 수행하기 위한 컴퓨터 사용
- 데이터 분석을 위한 코드 실행
- 기획, 보고서 작성 등 특정 작업에 뛰어난 전문 에이전트로의 핸드오프
이 패턴은 태스크가 개방형이고 LLM 의 지능에 의존하고 싶을 때 유용합니다. 중요한 전술은 다음과 같습니다:
- 좋은 프롬프트에 투자하세요. 사용 가능한 도구, 사용 방법, 그리고 준수해야 할 매개변수를 명확히 하세요.
- 앱을 모니터링하고 반복 개선하세요. 문제가 생기는 지점을 파악하고 프롬프트를 개선하세요.
- 에이전트가 스스로 성찰하고 개선하도록 하세요. 예를 들어 루프로 실행해 자기 비평을 하게 하거나, 오류 메시지를 제공해 개선하도록 하세요.
- 모든 것을 잘하려는 범용 에이전트 대신 하나의 작업에 특화된 에이전트를 두세요.
- 평가(evals)에 투자하세요. 이를 통해 에이전트를 학습시켜 태스크 수행 능력을 향상할 수 있습니다.
코드 기반 오케스트레이션
LLM 기반 오케스트레이션이 강력하긴 하지만, 코드 기반 오케스트레이션은 속도, 비용, 성능 면에서 더 결정론적이고 예측 가능하게 만듭니다. 일반적인 패턴은 다음과 같습니다:
- structured outputs를 사용해 코드로 검사할 수 있는 적절한 형식의 데이터를 생성. 예를 들어 에이전트에게 태스크를 몇 가지 카테고리로 분류하게 한 뒤, 그 카테고리에 따라 다음 에이전트를 선택할 수 있음
- 한 에이전트의 출력을 다음 에이전트의 입력으로 변환하여 여러 에이전트를 체이닝. 예를 들어 블로그 글 작성 태스크를 리서치, 개요 작성, 본문 작성, 비평, 개선의 연속적인 단계로 분해
- 평가와 피드백을 제공하는 에이전트와 함께 태스크 수행 에이전트를
while루프에서 실행하고, 평가자가 출력이 특정 기준을 충족한다고 할 때까지 반복 - 여러 에이전트를 병렬로 실행. 예:
asyncio.gather와 같은 Python 기본 구성 요소를 사용. 서로 의존하지 않는 여러 태스크가 있을 때 속도 향상에 유용
examples/agent_patterns 에 다양한 code examples 를 찾아볼 수 있습니다.