멀티 에이전트 오케스트레이션
오케스트레이션은 앱에서 에이전트가 어떻게 흐르는지를 의미합니다. 어떤 에이전트를 어떤 순서로 실행하며, 다음에 무엇을 할지 어떻게 결정할까요? 에이전트를 오케스트레이션하는 주요 방법은 두 가지입니다:
- LLM 에 의한 의사결정 허용: LLM 의 지능을 활용해 계획하고 추론하여 다음 단계들을 결정합니다
- 코드 기반 오케스트레이션: 코드로 에이전트의 흐름을 결정합니다
이 패턴들은 혼합하여 사용할 수 있습니다. 각 방식에는 아래에 설명된 트레이드오프가 있습니다.
LLM 기반 오케스트레이션
에이전트는 지침(instructions), 도구(tools), 핸드오프(handoffs)로 무장한 LLM 입니다. 이는 개방형 과제가 주어졌을 때, LLM 이 도구를 사용해 행동하고 데이터를 수집하며, 핸드오프를 통해 하위 에이전트에 작업을 위임하는 방식으로 과제를 스스로 계획해 해결할 수 있음을 의미합니다. 예를 들어, 리서치 에이전트는 다음과 같은 도구를 갖출 수 있습니다:
- 온라인에서 정보를 찾는 웹 검색
- 독점 데이터와 연결을 검색하는 파일 검색 및 검색(조회)
- 컴퓨터에서 작업을 수행하는 컴퓨터 사용
- 데이터 분석을 위한 코드 실행
- 기획, 보고서 작성 등에 특화된 에이전트로의 핸드오프
이 패턴은 과제가 개방형이고 LLM 의 지능에 의존하고자 할 때 유용합니다. 여기서 가장 중요한 전술은 다음과 같습니다:
- 좋은 프롬프트에 투자하세요. 사용할 수 있는 도구, 사용 방법, 그리고 운영해야 하는 매개변수를 명확히 하세요
- 앱을 모니터링하고 반복 개선하세요. 문제가 발생하는 지점을 파악하고 프롬프트를 개선하세요
- 에이전트가 성찰하고 개선하도록 허용하세요. 예를 들어 루프에서 실행하면서 스스로를 비판하게 하거나, 에러 메시지를 제공해 개선하도록 하세요
- 모든 것을 잘하는 범용 에이전트보다 하나의 작업에 뛰어난 특화 에이전트를 사용하세요
- evals 에 투자하세요. 이를 통해 에이전트를 훈련하여 작업 성능을 향상시킬 수 있습니다
코드 기반 오케스트레이션
LLM 기반 오케스트레이션은 강력하지만, 코드 기반 오케스트레이션은 속도, 비용, 성능 측면에서 작업을 더 결정적이고 예측 가능하게 만듭니다. 일반적인 패턴은 다음과 같습니다:
- structured outputs 를 사용해 코드로 검사할 수 있는 적절한 형식의 데이터 를 생성합니다. 예를 들어, 에이전트에게 작업을 몇 개의 카테고리 로 분류하게 한 다음, 해당 카테고리 에 따라 다음 에이전트를 선택할 수 있습니다
- 한 에이전트의 출력을 다음 에이전트의 입력으로 변환하여 여러 에이전트를 체이닝합니다. 블로그 글쓰기를 리서치, 개요 작성, 본문 작성, 비판, 개선의 일련의 단계로 분해할 수 있습니다 - do research, write an outline, write the blog post, critique it, and then improve it
- 작업을 수행하는 에이전트를 평가 및 피드백을 제공하는 에이전트와 함께
while루프에서 실행하여, 평가자가 출력이 특정 기준을 통과했다고 판단할 때까지 반복합니다 asyncio.gather같은 파이썬 기본 구성 요소 를 통해 여러 에이전트를 병렬로 실행합니다. 서로 의존하지 않는 여러 작업이 있을 때 속도 향상에 유용합니다
examples/agent_patterns 에 여러 코드 예제가 있습니다.