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